2011-02-07 8 views
0

は、私は私の環境内のオブジェクトの4種類(BOX2D)、自身の複数のインスタンスを持つオブジェクトの各タイプがあり、すべてのCCSpritesを追加し、操作に対処するための最も効率的な方法を見つけたいと思います。スプライトはすべて異なるファイルから来ていますので、各スプライトを作成してデータ構造(NSMutableArray)に追加するのが最善でしょうか、各CCSpriteファイルが(オブジェクトの種類ごとに)異なっていてもCCSpriteBatchNodeを使用しますか?ありがとう。複数のCCスプライトを扱うのに最も効率的な方法は?

@interface LevelScene : CCLayer 
{ 
    b2World* world; 
    GLESDebugDraw *m_debugDraw; 

    CCSpriteBatchNode *ballBatch; 
    CCSpriteBatchNode *blockBatch; 
    CCSpriteBatchNode *springBatch; 
    CCSprite *goal; 
} 

+(id) scene; 

// adds a new sprite at a given coordinate 
-(void) addNewBallWithCoords:(CGPoint)p; 

// loads the objects (blocks, springs, and the goal), returns the Level Object 
-(Level) loadLevel:(int)level; 

@end 

答えて

1

異なるテクスチャを使用している場合は、CCSpriteBatchNodeはあなたの回答ではありません。 Cocos2Dのドキュメントhereから:

CCSpriteBatchNodeはバッチ ノードのようなものです:それは子供が含まれている場合、それは (多くの場合、「バッチドロー」として知られている)1つのOpenGLの呼び出し でそれらを描画します。 CCSpriteBatchNode一 つのみテクスチャ(1つの画像ファイル、 1テクスチャアトラス)を参照することができます。

だから、アウトです。外見上、これらのCCSpriteオブジェクトをCCLayer(または他のCCNodeオブジェクト)に追加するのでしょうか?

は、子オブジェクトを管理するための別の配列を作成する必要はありません - Cocos2Dは、任意のノードのchildrenプロパティを提供します。 [myLayer addChild:newSprite]の場合は、childrenに参照があります。

これは役に立ちますか?私はあなたのユースケースをもう少し考えてくれたら答えを広げることができます。

+0

応答@phoozeのおかげで、私は子供の参照を介して任意のオブジェクトにアクセスすることができます知っているその良いです。私は私の質問をクリアするためにいくつかのコードを追加しました。私が考えていたのは、複数のスプライトを持つオブジェクトごとに別々のCCSpriteBatchNodeを持つことでした。なぜなら、OpenGL呼び出しを減らすからです。 – SteveWight

+0

は実際に理想的なあなたはイムは今少し良くCCSpriteBatchNodeを理解し始め、(共有@phoozeマニュアルに従って)Mr.Gando @ – Goles

+0

感謝を同じテクスチャアトラス/画像ファイルを共有するすべての子供のための1 BatchNodeを持っているでしょう。 – SteveWight

関連する問題