Cocos2d - передача CCSprite на дочерний уровень - PullRequest
0 голосов
/ 10 февраля 2012

У меня есть сцена, основной слой и дочерний слой, основной слой содержит объект Player *, который является подклассом CCSprite, я хочу передать Player в дочерний слой следующим образом:

BattleLayer* b = [[BattleLayer alloc] initWithPlayer:_player];
[((CCScene*)self.parent) addChild:b];

-(id)initWithPlayer:(Player *)p
{
    if((self=[super init]))
    {
        _player = p;
        [self addChild:_player.spriteSheet];
    }
    return self;
}

Однако это выдает ошибку, когда я делаю [self addChild: _player.spriteSheet];

*** Assertion failure in -[BattleLayer addChild:z:tag:]

Я пытался удалить спрайт из основного слоя перед его передачей, но даже с очисткой: НЕТ, это дает ошибку

*** -[CCSpriteBatchNode tag]: message sent to deallocated instance 0x747a580

Что я здесь не так делаю? И как лучше всего этого достичь?

Ответы [ 2 ]

2 голосов
/ 10 февраля 2012

Я вижу одну из трех причин, вызывающих ошибку утверждения addSprite.

  • p равно nil
  • p.spriteSheet равно nil
  • или, наконец, p.spriteSheet уже имеет родителя (то есть spriteSheet уже был добавлен в CCNode заранее)
1 голос
/ 10 февраля 2012

Я сталкивался с этим раньше и сохранил, а затем отпустил после изменения порядка Мои объекты были автоматически освобождены и сохранены только CCLayer, так что это сработало, Попробуйте:

[_player retain];
[_player removeFromParentAndCleanUp:YES];
[self addChild:_player];
[_player release];

Однако я столкнулся с ошибкой быстрого удаления и повторного добавления спрайтов, которая описана здесь: http://www.cocos2d -iphone.org / forum / topic / 9980

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...