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, потому что мне нужно «показать» узел на полпути. Я не думаю, что смогу поместить это в последовательность, если я тоже не прав в этом.)