2015-05-15 2 views
1

У меня есть функция, в которой мне нужно выполнить 2 действия один за другим. , например.Swift - Как запустить 2 действия не одновременно (в линейном режиме) для двух разных SKNodes в той же функции

func foo() 
{ 
    .......... 
    if someConditions 
    { 
      node1.runAction1 
      node2.runAction2 
    } 
} 

Кажется, что быстрое действие этих действий одновременно.
И это именно то, чего я не хочу в моей игре.
Я хочу, чтобы action2 начал работу после завершения действия1.
Что мне делать?
Большое спасибо.

ответ

1

Вы можете передать обработчик завершения при вызове node1.runAction, который начнет действие node2, когда действие node1 выполнено. Например:

node1.runAction(action1) { 
    node2.runAction(action2) 
} 

Edit

В ответ на ваш комментарий, здесь возможное решение: Определить runAction1 как так (я предполагаю, что runAction1 является метод на одном из классов).

func runAction1(completion:() -> Void) { 
    // ... 
    self.runAction(action, completion: completion) 
} 

Затем используйте это как так:

node1.runAction1(completion: node2.runAction2) 

Надежда, что помогает.

+0

На самом деле мое сообщение имеет своего рода утечку. Ну, эти два действия, указанные как node1.runAction1, а следующие - в отдельных функциях. На самом деле я вызываю func1 - animateTheFirstBall() и func2 - animateTheSecondBall() вместо тех node1.runAction1, а другой. –

+0

Да, пожалуйста. Я мог бы очень оценить краткий пример, поскольку я не использую закрытие (об этом вы, наверное, говорите, довольно часто). Спасибо за попытку. –

+0

Я обновил свой ответ, надеюсь, что поможет :) – ABakerSmith