Sprite3D在UI層的繪製和遮擋

有很多朋友對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就別用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章