2011-09-07 18 views
0

我很困惑與的addChild:行爲在cocos2d,由於下列原因:的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我做的: 球*球=球ballInWorld ... ]

如果我這樣做[個體經營的addChild:球],物理工作正常,但如果我不這樣做,ballSprite卡在(0,0)......這是爲什麼?該批次已添加到GameScene和ballSprite已經被添加到批,這種額外的addChild似乎怪我!

謝謝!

+0

你一定'batch'由你來使用它的時候初始化。嘗試一個NSLog或斷點,以確保發送消息到nil對象只是在默默地失敗objective-c –

+0

我看到的是,你是在內部添加對象到spriteBatch,而不是在你調用initBallInWorld的範圍內,我是博彩是GameScene。 CCScene不應該是單身人士。你濫用單身模式。修復可能不會解決你的問題,但它會讓你成爲一個更好的程序員。 –

回答

0

感謝您的意見,但我看着辦吧。當我調用靜態[Ball ballInWorld:] CCSprite不保留在Ball類中,但只在CCSpriteBatchNode中,所以我必須使用addChild:ball或使用[[Ball alloc] init ...]保持精靈參考活着。

GameScene是一個CCLayer,我認爲是確定使用它作爲一個單身。