只要某个label一改变,就会发送一个事件。
主要是想做价格的进位,1000000就显示1百万这样,升级价格就会改变。UI已经做了蛮多,感觉不方便在代码里在一句句改。感觉有点麻烦
想弄一个脚本来控制,直接挂在那些想进位显示的数字节点下。
这种应该封装一个函数,在函数内修改string再发送事件。至于能不能监听就不知道了
写个公用的脚本处理赋值啊,参数传实际值 ,return一个新的值
// -- 数字转换 ,超过万 的 就以万为单位,否则不处理
get_numConverto(parasnum) {
if (parasnum >= 100000 && parasnum < 10000000) {
parasnum = (parasnum / 10000).toFixed(2) + "万"
} else if (parasnum >= 10000000 && parasnum < 100000000) {
parasnum = (parasnum / 1000000).toFixed(2) + "百万"
} else if (parasnum >= 100000000) {
parasnum = (parasnum / 10000000).toFixed(2) + "亿"
} else {
parasnum = Math.floor(parasnum)
}
return parasnum
},
事已至此,我来给楼主提供一个方法吧。这个需要hack一下cc.Label的string的set方法
楼主在游戏逻辑靠前的地方加上这些逻辑
let desc = Object.getOwnPropertyDescriptor(cc.Label.prototype, "string")
desc.set = function(value) {
let oldValue = this._string;
// 开始楼主的表演
// 注意,这句话的上下部分是源码抄过来的,我这里是2.0.8版本的,版本不同不要照抄
this._string = value.toString();
// 楼主处理 string的逻辑就自己写吧
// 楼主表演结束
if (this.string !== oldValue) {
this._updateRenderData();
}
this._checkStringEmpty();
}
Object.defineProperty(cc.Label.prototype, "string", desc)
4赞
看上去好高端,想知道这方面的知识是怎么获取的。
另外,是不是这么弄了所有string就都会这么执行了,那应该也不行。。有些不希望进位
已经从源头改了下游戏赋值的方式。
