如何检查CCAction是否正在运行 - cocos2d

问题描述:

我正在使用Cocos2d为iPhone编写游戏。 这是问题所在。如何检查CCAction是否正在运行 - cocos2d

我有CCSprite和CCAction在其上运行。

CCSprite texture; 
CCAction anim_action; 

“Anim_action”是一个CCRepeatForever操作。 现在我想检查一下这个动画是否在运行。

首先我虽然我可以用[isDone]功能,但我认为这不会对CCRepatForever行动的工作(我不知道 - 这opion是根据我的测试)

那么如何检查这个动画已经在我的“纹理”上运行了?

也许有一种方法可以获取目前在纹理上运行的动作名称? 它可能也有用!

我不相信有一种方法可以直接告诉CCRepeatForever操作是否已完成,因为isDone没有任何意义,但是您可以使用一些技巧从本质上提供回调来指示是否仍在运行:

  1. 覆盖步骤:方法和召唤出来的东西,检查的时间间隔 - 当它超过阈值时,你可以假设完成...有点儿”
  2. 裹有CCSequence的CCRepeatForever内采取行动。该序列的第一个动作将是你的重复动作和第二将是一个CCCalFunc,再次表明该行动仍在运行
  3. 子类的CCRepeatForever并重写的dealloc这样你就可以触发一个回调时的动作被杀害和释放

您可以轻松地使用[isDone虽然底肥效果

- (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]]; 
}} 

,如果它是打开或关闭简单BOOL控制。 我不知道这是不是你的意思,但希望它无论如何会有帮助。

如果你知道有多少行动将在精灵运行,或者如果动画是唯一的行动,那么你就可以推断出动画通过检查精灵的运行行为的总次数运行。

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

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

还有就是要检查是否有具体的行动上你的纹理运行方式。用途:

CCAction *action = [texture getActionByTag:kAsignedActionTag]; 

其中kAsignedActionTag是分配给你的动画标签。

anim_action.tag = kAsignedActionTag; 

如果你的行动仍在运行getActionByTag方法将不会返回零。