Меня смущает поведение addChild: в Cocos2D из-за следующего:
У меня есть подкласс CCNode, которому принадлежат CCSprite и Box2DBody. В методе -init этого подкласса я добавляю спрайт в CCSpriteBatchNode основной GameScene, например:
//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 мне кажется странным!
Спасибо!
batch
инициализируется к тому времени, когда вы начнете его использовать. Попробуйте NSLog или точку останова, чтобы убедиться, что отправка сообщений нулевым объектам просто не работает в Objective-C. - person James Webster   schedule 07.09.2011