Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocos2d iphone 如何检查CCAction是否正在运行-cocos2d_Cocos2d Iphone - Fatal编程技术网

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

Cocos2d iphone 如何检查CCAction是否正在运行-cocos2d,cocos2d-iphone,Cocos2d Iphone,我正在使用Cocos2d为iPhone编写游戏。 问题出在这里 我有CCSprite和CCAction在上面运行 CCSprite texture; CCAction anim_action; “动漫行动”是一种永久性的行动。 现在我想检查这个动画是否正在运行 首先,我认为我可以使用[isDone]函数,但我认为它不适用于CCRepatForever操作(我不确定-此观点基于我的测试) 那么如何检查这个动画是否已经在我的“纹理”上运行呢 也许有一种方法可以得到目前正在纹理上运行的动作的名称?

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

我有CCSprite和CCAction在上面运行

CCSprite texture;
CCAction anim_action;
“动漫行动”是一种永久性的行动。 现在我想检查这个动画是否正在运行

首先,我认为我可以使用[isDone]函数,但我认为它不适用于CCRepatForever操作(我不确定-此观点基于我的测试)

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

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

我不认为有办法直接判断CCRepeatForever操作是否已完成,因为isDone没有任何意义,但有一些技术可以用来提供回调,以指示某些操作是否仍在运行:

  • 重写step:method并调用检查间隔的内容-当间隔超过阈值时,您可以假设完成…有点
  • 用CCSequence将CCRepeatForever的内部动作包装起来。序列的第一个动作是重复动作,第二个动作是CCCalFunc,再次表明动作仍在运行
  • 将CCRepeatForever子类化并重写dealloc,以便在终止和释放操作时可以触发回调

  • 您可以在应用效果时轻松使用[IsOne]

    - (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]];
     }}
    
    并通过简单的布尔控制它,如果它打开或关闭。
    我不知道这是否是你的意思,但希望它能有所帮助。

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

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


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

    CCAction *action = [texture getActionByTag:kAsignedActionTag];
    
    其中kAsignedActionTag是指定给动画的标记

    anim_action.tag = kAsignedActionTag;
    
    如果您的操作仍在运行,getActionByTag方法将不会返回nil

    anim_action.tag = kAsignedActionTag;