移除节点后重新加回父节点,世界坐标/本地坐标均发生偏移

项目框架中:当界面切换的/界面打开会先把所有界面从节点中移除,排序后重新添加到节点中。所有panl继承baseView,所有view也继承baseView

tabcontroal在界面panel中,tabControal动态生成两个view,组件A属于其中一个view1的组件

现在遇到了一个问题:view1的组件A节点的位置是动态的,使用了世界坐标设置,但是当在组件A生效的时候打开其他界面,这个时候组件A的世界坐标会发生偏移,但是断点看,唯一设置了坐标的updateData没有重新走的。那么是为什么会产生这样的偏移的呢?应该如何解决这个问题

动态设置坐标时,延迟一帧试试

感谢感谢!!!哥你真的救我命了!!!实在没想过可以这样,可以问问为什么吗?
因为我想着是说可能是节点移除的时候父节点的变换矩阵发生变化,加回去的时候用了本地坐标导致的,然后我设置坐标的时机太晚了,所以我把节点更新位置放在update/onEnable中去调用了,结果还是会有一帧错位了,属实是没招了。

很多 UI 布局和渲染相关的数据不是“立即生效”的,而是要等当前帧末尾或下一帧的引擎循环把矩阵、尺寸、布局计算完,才会是最终值。原因一般的话像:布局组件延迟刷新、尺寸/UI贴图异步、父节点变化未同步、事件触发顺序等。延迟一帧能确保引擎本帧的布局/渲染更新全部结束,再用“稳定”的状态去计算坐标和尺寸,从而避免被系统覆盖或读到旧值。

明白了!!!谢谢大佬!学到了

可以使用removeChild手动移除然后在destroy删除