[BUG] setGlobalZOrder 方法无效

在我的理解里面,setGlobalZOrder 方法改变节点的全局渲染顺序,假设我的场景顺序是这样的:

运行效果图:

我通过 setLocalZOrder 可以改变 Layout 和 Mask 的渲染顺序,如:

this.layout.setLocalZOrder(100);
this.mask.setLocalZOrder(50);

运行后如图:

现在我想通过 setGlobalZOrder 把 Layout 下的 LightRedA 节点单独高亮,

this.layout.children[0].setGlobalZOrder(100);
this.mask.children[0].setGlobalZOrder(50);

运行之后没有预期的效果,请问是我的用法有误还是 creator 的问题?

能给一个简单的测试项目吗?

眼睛有问题,看错了:joy:

可以的,怎么联系您

:slightly_smiling:

NewProject.zip (155.0 KB)

我验证一下,你稍等

嗯,现在确实有这个问题, setGlobalZOrder 算是一个 bug,会尽快修复,感觉你的反馈 :+1:

GlobalZOrder 的接口继承自 Cocos2d-js,不过目前在 Creator 中确实没有实现。没有实现的主要原因是这个功能的坑很深,不仅会增加引擎的损耗和逻辑复杂度,使用不当对用户游戏也会产生副作用,所以我们没有想好要不要实现这个功能,毕竟需要用到 GlobalZOrder 的需求总是可以通过别的方式实现。

你希望达到的功能可以通过别的方式实现,比如在 LightRedA 和 LightRedB 上单独添加黑色遮罩。或者修改 LightRedA 的颜色。或者建立两个图层,一个在 Mask 上,一个在 Mask 下,节点在两个层之间相互切换。

嗯,在我们实际项目中项目中只能把 LightRedA 复制一个再添加到 Mask 之后才可以了。

我感觉也是,现在调整渲染先后感觉已经有两个接口了,一个是setSiblingIndex,setLocalZOrder,现在还要再有一个全局调整的GlobalZOrder,感觉真是设计复杂~

setSiblingIndex,setLocalZOrder这两个就是一个东西,

请问一下 我cocos2d-x 3.10 这个版本也是没有效果的,也是因为你说的那个原因没实现?

zIndex= 就可以了

https://forum.cocos.org/uploads/default/original/3X/9/2/92e0335b8e25209ce6d7a3efe661a8279dc01f37.jpg