SKAction序列是否实际等到行动结束?

时间:2013-09-28 17:53:08

标签: ios objective-c sprite-kit skaction

我有以下代码:

-(void)aggravatedSeek:(SKSpriteNode *)target{
    _isAggravated = YES;

    SKAction *action = [SKAction runBlock:^{
        double randTime = 0.2;
        NSLog(@"%f", randTime);
        [self moveToSpriteNode:target withTimeInterval:randTime];
    }];

    //SKAction *repeatAction = [SKAction repeatAction:action count:6];
    SKAction *rep = [SKAction sequence:@[action, action, action, action, action]]; //Test Sequence

   [self runAction:rep completion:^{
       [self runAction:blackColorAction];
       _isAggravated = NO;

    }];
}

我希望我的行动能够等到上一个动作完成。意思是,我的行为需要排序,以便rep动作不会重复action动作,直到对象完成移动。目前,似乎输出立即运行所有操作,并且不会像它应该那样对它们进行排序。我已阅读文档,我现在所拥有的是他们所说的......

1 个答案:

答案 0 :(得分:4)

runBlock:操作是一次性操作。它只运行一次块,然后立即“结束”。

你想要的是行动不是为了处理而设计的。它们运行一次,或者运行一段时间(持续时间)。但是,它们不会在满足某些任意条件之前运行 - 这可能是立即成立的,最终可能成为现实或可能永远不会成为现实。这种方式使所有可变定时特征动作都能够无效(即线性与易于缩放时间)。

您可以做的是将“moveToSpriteNode”移动作为动作发出,并单独检查更新方法是否精灵到达节点。如果是这样,您将运行下一个移动动作(不使用序列)。

更容易,您可以简单地依靠移动操作来结束精灵已到达目标节点。然后,这将触发序列中的下一个移动动作。如果要在每个目标上运行完成块,只需在完成块内安排下一个移动操作。