对一个节点获取width,在start里,获取的是 精灵在编辑器里的宽度,但是在模拟器里,第2次获取的宽度就是真实的宽度了。。精灵加了widget,本身是按照百分比和四边缩放的
不太理解你的问题,有没有示例代码可以发一下
我之前也遇上了,以为是什么问题,结果应该是widget在第一帧结束的时候才会更新对象节点的宽高。这个为什么不是在onLoad或start阶段就更新呢?
大概就是楼下描述的这样.加了widget,在start里获取width, 在模拟器里时, 宽度产生了变化,但是获取到的还是在编辑里时的宽度,在后续操作里重新获取width时,就是正确的了
Widget 的宽高要在本帧结束前才会刷新,下一帧才能获取到。如果你需要即时得到最新的计算结果,你可以自己手动计算。Widget 主要是提供给美术做一些常见的 UI,对引擎本身没有太耦合的操作,如果你需要一些对逻辑更友好的计算,你可以自己写一些脚本代替 widget。
搬运一下:
widget 计算时需要用到父物体的 pos, anchor, scale, size 属性,目前没有监听这么多个变量,所以没办法实时刷新坐标。
如果要实时监听这些属性,就有可能导致父物体在一帧内同时修改多个属性时,出现多次的重复排版计算,很影响现有的 bunnymark 渲染成绩。
就算采用标志位的方式惰性求值,则需要在节点的坐标和尺寸的获取代码中耦合 widget 相关逻辑,不利于引擎的模块化。
引擎跑分现在基本上是在比较谁家的 js 端执行到的代码更少,所以为了提高引擎的跑分成绩,不建议做这方面的调整。