Sprite3D在UI层的绘制和遮挡

来源:互联网 发布:天房网络客服电话 编辑:程序博客网 时间:2024/05/21 06:26

有很多朋友对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的物体 


截图: 

48_432850_281a717f8d1faf1.jpg

和骨骼动画的绘制对比 

经过我的测试,骨骼动画和sprite3D,他们的绘制顺序是根据globlezorder值 来定的, 

在zorder值相同的时候,先绘制骨骼动画,后绘制sprite3D。 

否则先绘制zorder值高的物体,没图说个JB,上图! 

1435036679538272.png

1435036700952488.png

1435036714400702.png

并且,sprite3D是不会吞噬触摸事件的 

来源网址:http://www.cocoachina.com/bbs/read.php?tid-307234.html

经验回复:其实最重要的原因还不是局部和全局这种关系。 主要原因是localZOrder会根据UI遍历来渲染,而Global的那个是脱离UI树遍历的,比如,你一个弹出框,你意识里希望他能够在最前边显示,所以你设置他背景图的globalzorder了。于是他脱离UI树了,然而你有按钮和显示的文字是放在背景图上的,然后这些文字却没有脱离UI树,最终你看到的结果是一个空白的框(因为按钮和文字实质上是在框下边,遵循LocalZOrder去绘制的)。这个所谓的脱离UI树,也许说的不够准确。欢迎继续探讨,但是,能不用Global就别用

0 0
原创粉丝点击