J'ai un CCSprite
appelé sprite
qui est un enfant d'un CCLayer
appelé movingLayer
qui est lui-même un enfant de l'actuel CCLayer
en cours d'exécution de ma logique de jeu, de sorte qu'il est self
dans ce cas. movingLayer
se déplace d'avant en arrière à travers l'écran dans une action répétée pour toujours et sprite
est le long de l'écran. Je veux obtenir sprite
pour "descendre" de movingLayer
et "aller" à self
où il peut faire quelques actions de son propre chef.Comment transférer un CCSprite d'un parent à un autre?
Lorsque je tente de le faire, je dois dire movingLayer
pour enlever sprite
et self
ajouter sprite.
C'est ce que je faisais ...
- (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];
}
Je pense que stopAllActions
est redondant, mais ce n'est pas le problème . Si je supprime sprite
de movingLayer
avant de l'ajouter à self
Je plante pour accéder à un zombie, et si j'essaye de l'ajouter à self
d'abord, je plante pour essayer d'ajouter quelque chose déjà ajouté.
+1 pour 'retenir et release'! – Emadpres