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