0

次の理由により、Cocos2DでのaddChild:の動作と混同しています。

CCSpriteとBox2DBodyを所有するCCNodeサブクラスがあります。このサブクラスの-initメソッドでは、次のように、メインのGameSceneのCCSpriteBatchNodeにスプライトを追加します。

//Ball class, CCNode subclass with a CCSprite and a b2Body
-(id)initBallInWorld:(b2World *)word spriteFile:(NSString *)file
{
   //self = [super init] blablabla
   CCSpriteBatchNode *batch = [GameScene getSpriteBatch];  //singleton

   //create Box2dBody inside the world
   //create a CCSprite
   [batch addChild:sprite];   //Here is the confusion!
}

メインのGameSceneでは、次のようにします。Ball * ball = [Ball ballInWorld ...]

[self addChild:ball]を実行すると、物理演算は期待どおりに機能しますが、そうでない場合、ballSpriteは(0、0)でスタックします。これはなぜですか。バッチはすでにGameSceneに追加されており、ballSpriteはすでにバッチに追加されています。この余分なaddChildは、私には奇妙に思えます。

ありがとう!

4

1 に答える 1

0

コメントありがとうございますが、わかりました。

静的な[BallballInWorld:]を呼び出すと、CCSpriteはBallクラスに保持されず、CCSpriteBatchNode内にのみ保持されるため、addChild:ballを使用するか、[[Ball alloc]init...]を使用してスプライトを保持する必要があります。生きている参照。

GameSceneはCCLayerであり、シングルトンとして使用しても問題ないと思います。

于 2011-09-07T22:38:58.230 に答える