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
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.
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]];
Dans Cocos2d 2.1, j'ai dû ajuster ceci à' [(CCNode *) _ target removeFromParentAndCleanup: YES]; ' – Nick
- 1. Cocos2d Sprite contentSize Problème
- 2. Simultanée Détection tactile Sprite - iPhone & cocos2d
- 3. Calque de défilement Cocos2d sur Sprite glisser
- 4. glisser Smoothly un sprite cocos2d - iPhone
- 5. Cocos2d - Changer les animations après la fin
- 6. Cocos2d iPhone: faire pivoter Sprite à l'aide de l'accéléromètre
- 7. Faire glisser un Sprite (Cocos2D) pendant que le Chipmunk simule
- 8. Comment dessiner un cercle dans un sprite dans Cocos2d?
- 9. (cocos2d-iphone) Problème-Sprite pivote de 180 degrés
- 10. Déplacer le sprite sur le chemin dans cocos2d
- 11. Cocos2d: Déplacer un Sprite le long d'un chemin/bezier?
- 12. Exécuter une méthode après init dans cocos2d
- 13. Arrière-plans Sprite
- 14. Contour dans Cocos2d
- 15. Comment animer dans Cocos2d?
- 16. Prenez une "capture d'écran" d'un noeud cocos2d et ensuite l'utiliser comme un sprite
- 17. "scheduledTimerWithTimeInterval:" problème dans cocos2d?
- 18. Animation dans Cocos2d.
- 19. IPhone et Cocos2d Sprites/Layers
- 20. bouton cocos2d problème limite cliquable
- 21. Remplacement de l'image dans le sprite - développement du jeu cocos2d de l'iphone
- 22. Comment changer l'image dans un sprite cocos2d à partir d'un tableau?
- 23. Cocos2D modifie les couleurs de la dernière rangée de pixles dans un sprite?
- 24. Dans cocos2d (iphone) comment animeriez-vous un sprite (image par image)?
- 25. Comment faire pour faire tourner un sprite dans cocos2D en utilisant SpaceManager
- 26. Obtenir la valeur alpha au point touché sur un sprite dans Cocos2D
- 27. Cocos2D - NSMutableArray de CCSprites
- 28. Scaling Sprites in Cocos2d
- 29. Comment cacher l'étiquette (CCLabel) après un certain temps dans cocos2d?
- 30. animation de sprites cocos2d
Très agréable. Dans cocos2D 2.0, vous pouvez également utiliser des blocs: 'CCAction * cleanupAction = [CCCallBlock actionWithBlock:^{ [mySpriteToCleanup removeFromParentAndCleanup: YES]; }]; ' – Eliot