2014-02-19 208 views
4

如何检查SKAction是否已完成其动画?检查SKAction是否正在运行

我需要检查我的操作是否已完成或仍在执行其操作。之后,我想创建一个布尔值来避免主要操作中的多个操作。

SKAction *lionJumpActionComplete = [lionNode actionForKey:@"lionIsJumping"]; 
    lionJumpActionComplete = [SKAction sequence: @[lionJumpActionUp, lionJumpActionFly, lionJumpActionDown, lionJumpActionPause]]; 

    if (lionJumpActionComplete) { 
     return; 
    } 

    [lionNode runAction:lionJumpActionComplete withKey:@"lionIsJumping"]; 

回答

9

如果这是您的节点上运行的唯一动作,你可以检查此使用:

if (!lionNode.hasActions) { // check if no actions are running on this node 
    // action code here 
} 

或者,你可以设置你的布尔在完成块获取操作运行和之后调用完成:

[lionNode runAction:[SKAction sequence: @[lionJumpActionUp, lionJumpActionFly, lionJumpActionDown, lionJumpActionPause]] completion:^{ 
    BOOL isActionCompleted = YES; 
}]; 
0

以下是我在节点上创建步行动画的示例。在我再次创建它之前,我通过查找它的关键字来确保前一个已完成。

SKAction *animAction = [self actionForKey:@"WalkingZombie"]; 

    if (animAction) { 
     return; // we already have a running animation 
    } 

    [self runAction: 
     [SKAction animateWithTextures:[self walkAnimationFrames] 
         timePerFrame:1.0f/15.0f 
           resize:YES 
           restore:NO] 
      withKey:@"WalkingZombie"]; 
} 
+0

对不起,但这不起作用 –

+0

我们可以得到更多的背景知道什么不起作用吗?你有没有用钥匙注册你的动作? – jervine10

+0

此动作现在只触发一次,而不是每次触摸屏幕时(动作正在运行时除外) –

0

你需要检查,看看是否节点运行的操作

所以在日区分

if (![self hasActions]) { 
    [self runAction:[self actionForKey:@"ZombieAction"]]; 
} 

可能会更好,可能是

[self runAction:[SKAction repeatForever:[self actionForKey:@"zombieAction"]]]; 

这将永远保持这样的动作。