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

时间:2010-11-23 09:10:21

标签: cocos2d-iphone

我正在使用Cocos2d为iPhone编写游戏。 这是问题所在。

我在其上运行CCSprite和CCAction。

CCSprite texture;
CCAction anim_action;

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

首先我虽然可以使用[isDone]功能,但我认为它不能用于CCRepatForever动作(我不确定 - 这个opion是基于我的测试)

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

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

4 个答案:

答案 0 :(得分:2)

有一种方法可以检查特定操作是否在纹理上运行。使用:

CCAction *action = [texture getActionByTag:kAsignedActionTag];

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

anim_action.tag = kAsignedActionTag;

如果您的操作仍在运行, getActionByTag 方法将不会返回nil。

答案 1 :(得分:1)

我不相信有一种方法可以直接判断CCRepeatForever操作是否已经完成,因为isDone没有任何意义,但是有些技术可以用来提供回调以指示某些内容是否仍在运行:< / p>

  1. 覆盖步骤:方法并调用检查间隔的内容 - 当超过阈值时,您可以假设完成...有点'
  2. 用CCSequence包装CCRepeatForever的内部动作。序列的第一个动作是你的重复动作,第二个动作是CCCalFunc,再次表明动作仍在运行
  3. 对CCRepeatForever进行子类化并覆盖dealloc,以便在操作被终止并释放时触发回调

答案 2 :(得分:1)

您可以在应用效果时轻松使用[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控制它,如果它打开或关闭。 我不知道这是不是你的意思,但希望它无论如何都会有所帮助。

答案 3 :(得分:1)

如果您知道将在精灵上运行多少个动作,或者动画是唯一的动作,那么您可以通过检查精灵的正在运行的动作总数来推断动画正在运行。

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

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