有人會考慮以下場景並給我一個建議:我正在實現一個基本的cocos2d遊戲,其中一個GameplayLayer獲得了一個CCSpriteBatchNode。我有一個遊戲對象:CCNode有3個CCSprites像這樣:構圖和CCSpriteBatchNode的遊戲對象續
CCSprite *bodySprite;
CCSprite *hairSprite;
CCSprite *eyesSprite;
當初始化GameObject
我加入精靈到GameObject
作爲其子像這樣:
[self addChild:bodySprite];
[self addChild:hairSprite];
[self addChild:eyesSprite];
這樣我可以改變位置,旋轉等節點(GameObject
)和所有精靈將受到更改但是影響當我添加多個GameObject
s到"each sprite draws itself, which means one additional draw call per sprite"是一個主要性能問題。
要解決性能問題,閱讀this post後,我決定在初始化到GameObject
的精靈,以GameplayLayer
'加s CCSpriteBatchNode
像這樣:
[[GameplayLayer sharedGameplayLayer].sceneSpriteBatchNode addChild:bodySprite];
[[GameplayLayer sharedGameplayLayer].sceneSpriteBatchNode addChild:hairSprite];
[[GameplayLayer sharedGameplayLayer].sceneSpriteBatchNode addChild:eyesSprite];
只是現在,我必須設置的位置在GameObject
的精靈一個接一個,而不是
self.position = ...
我不得不使用
bodySprite.position = ...
hairSprite.position = ...
eyesSprite.postion =...
這是一個單調乏味的變化,我失去了將我的GameObject
設計爲精靈組合的最大好處之一。
問題:是否有使用該節點的現在的位置是影響合成精靈位置的方式,我可以添加他們爲孩子們既GameObject
和sceneSpriteBatchNode
?如果不是什麼正確的做法,它是否一個接一個地設定精靈的位置?
很酷:)非常感謝你,我會嘗試儘快...是的,平均而言,我有20個GameObjects在同一時間,這使得我的幀速率下降到40幀/秒以下:/ –
嗨,我確實嘗試了建議解決方案,它確實有效......唯一的問題是我依賴節點的位置並將整個紋理作爲紋理貼圖(即使不可見)將使我改變依賴於節點位置的邏輯。我目前正在重新設計整個事情。 –