2010-11-13 4 views
3

Je suis nouveau à cocos2d et au développement de l'iphone à tous. Je veux créer une animation, quand un objet physique avec son sprite est détruit (par exemple pour montrer un splash). Et je veux faire un objet que je vais dire: exécuter l'animation et vous détruire lorsque vous avez terminé. Ensuite, je veux oublier cet objet - il devrait être détruit automatiquement lorsque l'animation est terminée. Quelle est la meilleure façon de le faire?cocos2d auto-supprimer sprite après l'animation

Répondre

8

Vous pouvez utiliser CCSequence pour créer une liste d'actions. La première action que vous faites devrait être votre action régulière (ou séquence). La deuxième action devrait être l'action CCCallFuncND, où vous pouvez appeler une fonction de nettoyage et passer l'image-objet donnée.

Du haut de ma tête, je ferais quelque chose comme ceci:

CCSprite* mySpriteToCleanup = [CCSprite spriteWithFile:@"mySprite.png"]; 
[self addChild:mySpriteToCleanup]; 

// ... do stuff 

// start the destroy process 
id action1 = [CCIntervalAction actionWithDuration:0]; // the action it sounds like you have written above. 
id cleanupAction = [CCCallFuncND actionWithTarget:self selector:@selector(cleanupSprite:) data:mySpriteToCleanup]; 
id seq = [CCSequence actions:action1, cleanupAction, nil]; 
[mySpriteToCleanup runAction:seq]; 

et dans la fonction de nettoyage:

- (void) cleanupSprite:(CCSprite*)inSprite 
{ 
    // call your destroy particles here 
    // remove the sprite 
    [self removeChild:inSprite cleanup:YES]; 
} 

Vous pouvez ajouter dans une autre action entre ces deux actions et pour détruire vos actions de particules au lieu de les appeler dans la fonction finale.

+5

Très agréable. Dans cocos2D 2.0, vous pouvez également utiliser des blocs: 'CCAction * cleanupAction = [CCCallBlock actionWithBlock:^{ [mySpriteToCleanup removeFromParentAndCleanup: YES]; }]; ' – Eliot

3

La façon pratique utilise une action RemoveNode personnalisée, qui supprime l'CCNode objet en cours d'exécution (CCSprite est également CCNode).

//Remove the node from parent and cleanup 
@interface RemoveNode : CCActionInstant 
{} 
@end 

@implementation RemoveNode 
-(void) startWithTarget:(id)aTarget 
{ 
    [super startWithTarget:aTarget]; 
    [((CCNode *)target_) removeFromParentAndCleanup:YES]; 
} 

@end 

Placez-le dans le dernier paramètre CCSequence. Par exemple, l'image-objet sera supprimée après le fondu sortant:

[mySprite runAction:[CCSequence actions: 
[CCFadeOut actionWithDuration:0.5], [RemoveNode action], nil]]; 
+0

Dans Cocos2d 2.1, j'ai dû ajuster ceci à' [(CCNode *) _ target removeFromParentAndCleanup: YES]; ' – Nick

Questions connexes