iOS SpriteKit SKAction вызов завершения не работает / создает странные результаты

Я пытаюсь заставить 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");
        }];

Тем не менее, SKActions, похоже, не стреляют в правильном порядке. Я использовал код, чтобы после завершения одного шага начался следующий. Тем не менее, кажется, что SKAction не перемещает узел достаточно быстро, прежде чем следующая SKAction начнет работать. У меня сложилось впечатление, что использование вызова завершения означает, что следующее действие не начнется, пока не закончится предыдущее? Это не похоже на случай здесь. Кроме того, если я оставлю достаточно длительную продолжительность для шага 1 (ДВИЖЕНИЕ ВВЕРХ), он пропустит шаг 2 (ДВИЖЕНИЕ ВНИЗ) и начнет выполнение шага 3 (НАЧАТЬ ДВИЖЕНИЕ). Я понятия не имею, как это возможно. Если бы кто-нибудь мог указать на мою ошибку в понимании того, как правильно соединить различные действия, я был бы признателен.

(Я не выполнил последовательность SKAction, потому что мне нужно «показать» узел на полпути. Я не думаю, что смогу поместить это в последовательность, если я тоже не прав в этом.)

Ответы на вопрос(3)

Ваш ответ на вопрос