SpriteKit - 如何向上一个操作完成后将运行的节点添加操作

时间:2015-03-14 16:29:07

标签: ios swift sprite-kit

我有一个节点,我在其上运行两个动作 - 一个在mouseDown事件上,另一个在mouseUp事件上。 正在运行的操作可能需要比鼠标左键关闭更长的时间,我想继续执行此操作,并在mouseDown方法的操作完成后以某种方式从mouseUp方法运行第二个操作。有可能吗?

1 个答案:

答案 0 :(得分:1)

你没有代码供我工作,无论如何我对Swift并不是那么好所以希望这对Objective-C来说是有意义的

第一个选项

onmousedown事件:

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"只需执行第二个操作。

希望这是有道理的,也是有帮助的。