我对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对我来说似乎很奇怪!
谢谢!
答案 0 :(得分:0)
感谢您的评论,但我明白了。
当我调用静态[Ball ballInWorld:]时,CCSprite不会保留在Ball类中,而只保留在CCSpriteBatchNode中,所以我必须使用addChild:ball或使用[[Ball alloc] init ...]来保持精灵参考活着。
GameScene是一个CCLayer,我认为可以将它用作单身人士。