如何记录加了widget的节点的初始坐标

如果某个节点附加了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();

不需要监听事件了。