2010-11-23 11 views
2

J'utilise Cocos2d pour écrire un jeu pour iPhone. Voici le problème.Comment vérifier si CCAction fonctionne - cocos2d

J'ai CCSprite et CCAction qui est exécuté dessus.

CCSprite texture; 
CCAction anim_action; 

"Anim_action" est une action CCRepeatForever. Maintenant, je veux vérifier si cette animation est en cours d'exécution.

D'abord, je si je peux utiliser la fonction [isDone], mais je pense que cela ne fonctionne pas sur les actions de CCRepatForever (je ne suis pas sûr - ce opion est basé sur mes tests)

Comment vérifier si cette animation fonctionne déjà sur ma "texture"?

Peut-être existe-t-il un moyen d'obtenir le nom de l'action qui s'exécute sur la texture pour le moment? Cela peut aussi être utile!

Répondre

1

Je ne crois pas qu'il existe un moyen de dire directement si une action CCRepeatForever est terminée puisque l'isDone n'aurait aucun sens, mais il y a quelques techniques que vous pouvez utiliser pour fournir essentiellement un rappel pour indiquer si quelque chose est encore en cours d'exécution:

  1. Remplacer l'étape: méthode et appeler à quelque chose qui vérifie l'intervalle - quand il dépasse un certain seuil, vous pouvez supposer la fin ... un peu »
  2. Wrap l'action intérieure du CCRepeatForever avec un CCSequence. La première action de la séquence serait votre action répétée et la seconde serait un CCCalFunc, indiquant à nouveau que l'action est toujours en cours
  3. Sous-classe CCRepeatForever et remplacer le dealloc afin que vous puissiez déclencher un rappel lorsque l'action est tuée et relâchée
1

Vous pouvez facilement utiliser [isDone] tout en appling un effet

- (void)shakeThatThingOn: (BOOL)on { //you can return BOOL and get if the animation is working or not 
if (on == YES){ 
    id shaky2 = [CCShaky3D actionWithRange:3 shakeZ:NO grid:ccg(15,10) duration:5]; 
    if (![shaky2 isDone]) 
    [self runAction:[CCSequence actions:shaky2,[CCStopGrid action],nil]]; 

} 
else {//this else is being called when you turn off animation (it's just 0.2s continuation after turning off - for better visual effect. 

    [self stopAllActions]; 
    id shaky2 = [CCShaky3D actionWithRange:3 shakeZ:NO grid:ccg(15,10) duration:0.2]; 
    [self runAction:[CCSequence actions:shaky2,[CCStopGrid action],nil]]; 
}} 

et le contrôler par un simple BOOL si elle est activée ou non. Je ne sais pas si c'est ce que vous voulez dire, mais j'espère que ça vous aidera quand même.

1

Si vous savez combien d'actions seront exécutées sur l'image-objet ou si l'animation est la seule action, vous pouvez déduire que l'animation s'exécute en vérifiant le nombre total d'actions en cours d'exécution de l'image-objet.

if ([texture numberOfRunningActions] > 0) //animation is running 

ou

if ([texture numberOfRunningActions] > someNumber) //if you had other actions running 
2

Il y a un moyen de vérifier si une action spécifique fonctionne sur votre texture. Utilisation:

CCAction *action = [texture getActionByTag:kAsignedActionTag]; 

kAsignedActionTag est la balise affectée à la votre animation.

anim_action.tag = kAsignedActionTag; 

Si votre action est toujours en cours d'exécution de la méthode getActionByTag ne reviendra pas nul.

Questions connexes