有很多朋友对sprite3D在UI层的绘制和遮挡不太明白,这里稍微说明一下。
并且有其他疑问也可以在原帖中回复,然后会持续更新一些想要的功能。
引擎版本: Cocos2d-x 3.6
语言: C++
绘制顺序是按照这种顺序绘制的:
1. globalz<0的物体
2. 3D不透明的物体,如果3D物体的globalZ为0,3D物体都在这里绘制,否则根据他们的globalZ决定绘制顺序
3. 3D透明物体,如果3D透明物体的globalZ为0,都在这里绘制,否则根据他们的globalZ决定绘制顺序,粒子属于3D透明物体,默认在这里绘制。
4. globalZ=0的物体
5. globalZ>0的物体
截图:
和骨骼动画的绘制对比
经过我的测试,骨骼动画和sprite3D,他们的绘制顺序是根据globlezorder值 来定的,
在zorder值相同的时候,先绘制骨骼动画,后绘制sprite3D。
否则先绘制zorder值高的物体,没图说个JB,上图!
并且,sprite3D是不会吞噬触摸事件的
来源网址:http://www.cocoachina.com/bbs/read.php?tid-307234.html
经验回复:其实最重要的原因还不是局部和全局这种关系。 主要原因是localZOrder会根据UI遍历来渲染,而Global的那个是脱离UI树遍历的,比如,你一个弹出框,你意识里希望他能够在最前边显示,所以你设置他背景图的globalzorder了。于是他脱离UI树了,然而你有按钮和显示的文字是放在背景图上的,然后这些文字却没有脱离UI树,最终你看到的结果是一个空白的框(因为按钮和文字实质上是在框下边,遵循LocalZOrder去绘制的)。这个所谓的脱离UI树,也许说的不够准确。欢迎继续探讨,但是,能不用Global就别用