Cocos2D addChild行为

时间:2011-09-07 05:45:17

标签: cocos2d-iphone addchild

我对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对我来说似乎很奇怪!

谢谢!

1 个答案:

答案 0 :(得分:0)

感谢您的评论,但我明白了。

当我调用静态[Ball ballInWorld:]时,CCSprite不会保留在Ball类中,而只保留在CCSpriteBatchNode中,所以我必须使用addChild:ball或使用[[Ball alloc] init ...]来保持精灵参考活着。

GameScene是一个CCLayer,我认为可以将它用作单身人士。