我正在尝试让 SKNode 根据命令移动到屏幕上。我已经设置了以下 SKAction 链,以便 1) 节点向上移动并移出屏幕,然后 2) 节点向下移动到起始位置,然后 3) 开始四处移动。我已经使用以下代码来尝试实现这一点:
SKAction *moveUp = [SKAction moveTo: shipIntroSpot1 duration:3.0];
SKAction *moveDown = [SKAction moveTo:shipSpot1 duration:ship1MovementSpeed];
[self enumerateChildNodesWithName:@"ship1" usingBlock:^(SKNode *node, BOOL *stop) {
NSLog(@"RUNNING MOVE UP");
[node runAction: moveUp];
[node runAction:moveUp completion:^{
NSLog(@"RUNNING MOVE DOWN");
[node setHidden: NO];
[node runAction: moveDown];
}];
[node runAction:moveDown completion:^{
NSLog(@"STARTING MOVEMENT");
}];
但是,SKAction 似乎没有以正确的顺序触发。我使用了代码,这样一旦完成了一个步骤,下一步就会开始。但是,在下一个 SKAction 开始工作之前,SKAction 似乎没有足够快地移动节点。我的印象是,使用完成调用意味着下一个动作要等到前一个动作完成后才会开始?这似乎不是这里的情况。此外,如果我为第 1 步(向上移动)留出足够长的持续时间,它将跳过第 2 步(向下移动)并开始执行第 3 步(开始移动)。我完全不知道这怎么可能。如果有人能指出我在理解如何正确地将不同的动作链接在一起的错误,我将不胜感激。
(我没有做一个 SKAction 序列,因为我必须在中途“取消隐藏”节点。我认为我不能把它放在一个序列中,除非我也错了。)