setPosition()函数并不是原子操作

3.8.4版本,setPosition()函数并不是原子操作,同时对一个节点执行setPosition()操作时,会导致节点的位置和节点碰撞区域位置不一致。

这个还有了另一个问题,当对node节点切换父节点时,前面设置positon后,点击事件失效。尤其是频繁切换的时候。但是当场景中有节点移除又正常了。后面是把node.parent= parent,改成node.removeFromParent(),node.parent=parent。才正常。感觉是同一个原因造成的。

1赞

虽然我没去验证,但想了一下,单线程的程序会有多线程问题?

我是项目中出现这个问题了,update的时候会setPosition()然后回产生碰撞,碰撞后也会setPosition()然后碰撞区域和节点位置分离了

这个其实不叫setPosition不原子,而是你自己的这种做法就充满了隐患,update虽然有顺序的,但这个顺序是不可预测的,你把相互影响的逻辑放在一个不可预测执行顺序的地方去处理,肯定不对啊。所以除了update还有一个lateUpdate的接口,需要自己去规避这种情况

2赞

好的,感谢大佬指导!!!