我有一个节点,我在其上运行两个动作 - 一个在mouseDown事件上,另一个在mouseUp事件上。 正在运行的操作可能需要比鼠标左键关闭更长的时间,我想继续执行此操作,并在mouseDown方法的操作完成后以某种方式从mouseUp方法运行第二个操作。有可能吗?
答案 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"只需执行第二个操作。
希望这是有道理的,也是有帮助的。