2013-05-13 92 views
1

我有一個圖層。它讓孩子們具有特定的'z'價值。 例如通過Cocos2d繪圖直接OpenGL ES 2.0繪圖

  • Child_1ž== - 10.0f(CCSprite)
  • Child_2ž== - 5.0F(我的自定義節點)
  • Child_3ž== - 1.0F(CCSprite)

我的自定義節點(Child_2)在'draw'方法中具有直接的Opengl es調用,以通過着色器繪製紋理。

我堅持的問題:

如果我添加在這些步驟中的孩子一切正常:

[self addChild:Child_1 z:-10.0f tag:1]; 
[self addChild:Child_2 z:-5.0f tag:2]; 
[self addChild:Child_3 z:-1.0f tag:3]; 

,如果我在一個這樣的方式將它們添加:

[self addChild:Child_1 z:-10.0f tag:1]; 
[self addChild:Child_3 z:-1.0f tag:3]; 
[self addChild:Child_2 z:-5.0f tag:2]; 

Child_3是不可見但必須是。

如何使用opengl繪製調用適當的繪圖行爲?

PS這裏是代碼

[hm2 use]; 
glVertexAttribPointer (0, 3, GL_FLOAT, GL_FALSE, 0, vVertices2); 
glEnableVertexAttribArray (0); 
glDrawArrays (GL_TRIANGLES, 0, 3); 
+1

發佈您的自定義GL繪圖代碼。我猜你沒有正確地重置GL狀態,或者代碼導致OpenGL錯誤,導致任何後續繪圖代碼失敗。每當有ccDraw *副本時,務必只使用ccDraw *方法而不是gl *方法,否則cocos2d繪圖可能會混亂。 – LearnCocos2D 2013-05-13 20:49:30

+0

沒有任何失敗。是的,我使用glDrawArrays。 – Andrew 2013-05-13 20:55:16

+0

我會在6個小時內回答,因爲我現在不允許網站做它 – Andrew 2013-05-13 21:56:25

回答

0

LearnCocos2D,謝謝!我發現ccDraw *並發現沒有gl *和z值。我的錯誤是我使用了帶有z值的glDrawArrays。 我爲什麼?因爲我想要兩種不同的紋理,其中一種紋理與另一種紋理重疊,但它們都應該在Child_1之上並且在Child_3之後。 爲了避免我與glDrawArrays卡住的問題不應該與z值。

爲了避免這個問題,並在Child_2中創建不同深度的紋理,我猜想該解決方案是創建新的兩個節點,然後將它們作爲子項添加到Child_2。

@implementation Child_2 

... 

-(id) init 
{ 
[self addChild:Child_2_1 z:-1.0f tag:0]; 
[self addChild:Child_2_2 z:-2.0f tag:1]; 

祝你好運!