4

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

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

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

    if (lionJumpActionComplete) {
        return;
    }

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

3 回答 3

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;
}];
于 2014-02-19T17:32:05.630 回答
0

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

所以在这种情况下

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

可能更好

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

这将永远继续执行该操作。

于 2014-02-19T17:35:26.820 回答
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"];
}
于 2014-02-19T16:47:46.487 回答