Quantcast
Channel: Cocos中文社区 - 最新主题
Viewing all articles
Browse latest Browse all 91261

cocos creator3.1版本setSiblingIndex替代UITransform 组件的 priority 属性问题

$
0
0
  • Creator 版本: 3.1.0/3.1.1

“从 v3.1 开始,UITransform 组件的 priority 属性已弃用,若需要调整节点树的顺序请使用 setSiblingIndex 方法。在 v3.1 之前通过代码创建并依赖 priority 属性的节点可能会出现节点树表现和之前不一致的问题,请手动调整。”
以上是官方通告内容,我认为直接弃用“UITransform 组件的 priority 属性”改用“setSiblingIndex ”这种迭代方式是无法合理兼容的,因为这两个接口的意义基本完全不一样。前者的目的是纯修改渲染的重叠次序,后者是修改节点树顺序,虽然一定程度上也可实现“修改渲染的重叠次序”,但这个要复杂得多。
比如我有这样一个需求:EffectLayer节点用于存放各种特效节点,而各种特效节点的渲染重叠次序是不一样的,比如A类特效节点渲染重叠次序最低,B类最高,而特效节点是游戏过程中英雄释放技能时动态添加到EffectLayer节点上的,假设英雄先释放了一个B类技能,在B类技能特效节点还没消亡之前,又释放了一个A类技能特效,假设特效都在同一个地点释放,根据渲染重叠次序的需求,我们希望看到的是A类技能特效应该在B类特效下面,因为A类技能特效是后面添加到EffectLayer节点的,所以我们需要手动调整这两个特效节点的渲染次序。
上面这个需求,如果用“UITransform 组件的 priority 属性”来做,我直接把A类技能特效的“UITransform 组件的 priority 属性”统一设置为一个比B类技能特效的值小就可以了。
而如果用“setSiblingIndex ”呢?你可能会说,通过“setSiblingIndex ”把A和B类两个节点的节点树顺序调换一下就可以了,如果通过这种方式想简单做到和“UITransform 组件的 priority 属性”来做到的目的一样就是完全扯淡了,使用“setSiblingIndex ”接口必须明确知道要修改的节点具体想调整到节点树的哪一个有效位置才行,否则,效果将南辕北辙。
基于上面的例子,可能有的人又会说,那你把“EffectLayer节点”拆分成AB两类两个节点不就行了吗,比如所有A类技能特效都放到“EffectOfALayer节点”、所有B类技能特效都放到“EffectOfBLayer节点”,如果需求真这么简单自然通过这样拆分也可以达到目的,但如果是这A和B类的特效节点的渲染重叠次序会因为一些事件动态颠倒调整呢?
基于上述原因,“UITransform 组件的 priority 属性”和“setSiblingIndex ”接口绝对不可能画上等号,所以请官方大佬好好想想,能否出个能画上等号的替代品?

1 个帖 - 1 位参与者

阅读整个主题


Viewing all articles
Browse latest Browse all 91261

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>