iOS SpriteKit SKAction zakończenie działania nie działa / tworzenie nieparzystych wyników

Próbuję przenieść SKNode na ekran na polecenie. Ustawiłem następujący łańcuch SKAction tak, że 1) Węzeł przesuwa się w górę i poza ekran, a następnie 2) węzeł przesuwa się w dół do miejsca początkowego, a następnie 3) zaczyna się poruszać. Użyłem następującego kodu, aby spróbować to zaimplementować:

    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");
        }];

Jednak SKActions nie wydają się strzelać we właściwej kolejności. Użyłem kodu, aby po zakończeniu jednego kroku rozpocząć następny. Jednak SKAction nie wydaje się przesuwać węzła wystarczająco szybko, zanim zacznie działać następna SKAction. Byłem pod wrażeniem, że użycie wywołania zakończenia oznaczałoby, że następna akcja nie rozpocznie się, dopóki poprzednia nie skończy się? W tym przypadku tak nie jest. Ponadto, jeśli zostawię wystarczająco długi czas trwania dla kroku 1 (PRZENIESIENIE W GÓRĘ), przeskoczy on nad krokiem 2 (PRZENIESIENIE W DÓŁ) i rozpocznie wykonywanie kroku 3 (ROZPOCZĘCIE RUCHU). Nie mam absolutnie pojęcia, jak to możliwe. Gdyby ktoś mógł wskazać mój błąd w zrozumieniu, jak prawidłowo łączyć różne działania, byłbym wdzięczny.

(Nie wykonałem sekwencji SKAction, ponieważ muszę „odkryć” węzeł w połowie. Nie sądzę, abym mógł to ująć w sekwencję, chyba że się mylę.)

questionAnswers(3)

yourAnswerToTheQuestion