检查SKAction是否正在运行

时间:2014-02-19 16:44:53

标签: ios iphone objective-c sprite-kit skaction

如何检查SKAction是否已完成动画?

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

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

    if (lionJumpActionComplete) {
        return;
    }

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

3 个答案:

答案 0 :(得分: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;
}];

答案 1 :(得分: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"];
}

答案 2 :(得分:0)

您需要检查节点是否正在运行操作

所以在这种情况下

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

可能更好

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

将永远继续行动。