У меня есть 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
, то при попытке добавить что-то уже добавленное происходит сбой.