SpriteKit - 如何在前一个动作完成后向将 运行 的节点添加动作

SpriteKit - how to add action to the node that will run after the previous action has finished

我有一个节点,我在该节点上 运行 拖曳动作 - 一个在 mouseDown 事件上,第二个在 mouseUp 事件上。 正在执行的操作 运行 可能需要比按下鼠标左键更长的时间,我想继续执行此操作,并且不知何故 运行 mouseUp 方法的第二个操作是在 mouseDown 方法的操作之后完成的。可能吗?

你没有代码供我使用,而且我对 Swift 也不是很好所以希望这对 Objective-C

有意义

第一个选项

鼠标按下:

SKAction *firstAction = [SKAction moveByX:100 y:100 duration:5];
SKAction *customAction = [SKAction customActionWithDuration:0 actionBlock:^(SKNode *node, CGFloat elapsedTime) {
    if (self.runSecondAction)
    {
        SKAction *secondAction = [SKAction moveByX:-100 y:-100 duration:5];
        [node runAction:secondAction];
        self.runSecondAction = NO;
    }
}];

SKAction *squence = [SKAction sequence:@[firstAction, customAction]];

[sprite runAction:squence withKey:@"moveAction"];

OnMouseUp:

if ([sprite actionForKey:@"moveAction"])
{
    self.runSecondAction = YES;
}
else
{
    SKAction *secondAction = [SKAction moveByX:-100 y:-100 duration:5];
    [sprite runAction:secondAction];
}

基本概念是您 运行 具有自定义操作的序列,运行 是一个块。在该块中,您检查是否已将 bool 设置为 运行 第二个对象。这将使第一个完成后运行。

在 mouseUp 中,如果第一个动作完成,您希望 运行 立即执行该动作,但如果没有,您可以设置一个 bool 值,它将在序列期间进行检查。

第二个选项

不要运行 OnMouseDown 中的序列,并检查是否有@"moveAction" 进入OnMouseUp。如果存在,请检查精灵的状态并在该点创建序列以及该动作的剩余部分。如果没有那个@"moveAction"只是运行第二个动作。

希望这说得通并且有所帮助。