如果某个节点附加了widget组件,那么它的坐标就是变化的了,如果在onload里获取节点坐标,那获取到的是编辑器里的坐标,不是真实运行设备上的坐标,这个有什么方法可以解决这个问题呢
真实设备上的坐标和 widget 无关吧?用 cocos 原有的 API 不能获得吗?
onLoad获得的是widget还没发挥作用之前的坐标啊,一旦widget发挥作用了,那前面获取的坐标就与实际情况不符了
你可以用 widget.node.once('position-changed', function () { ... });
这个能不能提供更好一点的方法,这种解决方式容易与正常的节点移动混淆,要解决的话还得加各种判断。我觉得可以再加一个事件,在widget排版结束时分发这个事件,这样我就只需要接收这类事件就可以了,或者可以像scrollView的滚动事件一样,直接指定排版事件
我觉得更好的方法应该是让用户立即排版,比如增加一个 update 接口:
widget.top = 10;
cc.log(widget.node.y); // unchanged
改成:
widget.top = 10;
widget.update();
cc.log(widget.node.y); // changed
这样就不需要监听事件了。
你看着办吧,反正好用就成
加了没啊,感觉这个需求越来越强烈了,好多逻辑都是在位置确定之后再触发的
1赞
目前安排到下一个周期,不过优先级已经上升了!你这边建议先监听指定节点的 position-changed 事件吧。
该功能已加入,从 1.4 开始只需要调用
widget.updateAlignment();
不需要监听事件了。