Как перевести CCSprite от одного родителя к другому? - PullRequest
4 голосов
/ 17 июля 2011

У меня есть CCSprite с именем sprite, который является дочерним по отношению к CCLayer с именем movingLayer, который сам является дочерним по отношению к текущему CCLayer, выполняющему мою игровую логику, поэтому в этом дело. movingLayer движется вперед и назад по экрану в бесконечном повторном действии, и sprite движется по нему. Я хочу заставить sprite «сойти» с movingLayer и «сесть» на self, где он может выполнять свои собственные действия.

Когда я пытаюсь это сделать, мне нужно сказать movingLayer, чтобы удалить sprite и self, чтобы добавить sprite. Это то, что я сделал ...

- (void)attack:(id)sender
{
    [sprite stopAllActions];
    [movingLayer removeChild:sprite cleanup:YES];
    [self addChild:sprite z:1];
    CGFloat distance = ccpDistance(sprite.position, ccp(sprite.position.x, -sprite.contentSize.height/2));
    id goDown = [CCMoveTo actionWithDuration:distance/moveDuration position:ccp(sprite.position.x, -sprite.contentSize.height/2)];
    id repeatDown = [CCRepeatForever actionWithAction:[CCSequence actions:[CCMoveTo actionWithDuration:0 position:ccp(sprite.position.x, sprite.contentSize.height/2+self.contentSize.height)], [CCMoveTo actionWithDuration:moveDuration position:ccp(sprite.position.x, -sprite.contentSize.height/2)], nil]];
    id attackAction = [CCSequence actions:goDown, repeatDown, nil];
    [sprite runAction:attackAction];
}

Я думаю, stopAllActions является избыточным, но это не проблема. Если я удаляю sprite из movingLayer перед добавлением его в self, у меня происходит сбой при доступе к зомби, и если я сначала пытаюсь добавить его в self, то при попытке добавить что-то уже добавленное происходит сбой.

1 Ответ

9 голосов
/ 17 августа 2011

Вы пытались установить для очистки значение NO?

В качестве альтернативы, попробуйте сохранить спрайт, прежде чем удалить его из movingLayer, а затем отпустите его, когда закончите с ним:

[sprite retain];
[movingLayer removeChild:sprite cleanup:YES];
[self addChild:sprite z:1];
[sprite release];
...