2011-07-16 3 views
4

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é.

Répondre

9

Avez-vous essayé de régler le nettoyage sur NON?

Sinon, essayez de conserver sprite avant de la retirer de movingLayer, puis relâchez-le lorsque vous avez terminé avec elle:

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

+1 pour 'retenir et release'! – Emadpres

Questions connexes