2015-07-09 3 views
0
var action = SKAction.sequence([ 
       SKAction.waitForDuration(1), 
       SKAction.runBlock({ 
         //Some code 
       }) 
      ]) 

Я хочу, чтобы вышеуказанное действие повторялось, пока какое-то условие истинно. Как я могу это сделать?Как повторить действие, пока какое-то условие истинно?

Я знаю, что могу запустить действие один раз с runAction(action) или повторить навсегда с помощью runAction(SKAction.repeatActionForever(action)). Как я могу повторить его только тогда, когда какое-то условие верно?

Если это невозможно с помощью действий, есть ли альтернатива тому, как я могу повторять эти шаги, пока какое-то условие истинно (очевидно, что в отдельном потоке я не хочу, чтобы это зависало мое приложение):

1) Ожидание второго

2) Выполнить блок кода

3) Проверьте, если условие истинно. Если это остановка повторяется. Повторюсь.

Я не решаюсь использовать sleep(), потому что это звучит как плохое решение, и то, что Apple не разрешит приложениям в их магазине.

ответ

1

Вы можете использовать

  • (SKAction *) runBlock SKAction в: (dispatch_block_t) блок очереди: (dispatch_queue_t) очередь

Вы хотели бы создать блок. Внутри просто проверьте переменную, а затем примените свою логику соответственно, после того как условие больше не верно, вы можете удалить его из объекта.

Если вы хотите изменить переменную, добавьте __block перед ее объявлением.

SKAction *logic = [SKAction runBlock:^{ 
if (myvar){ 
NSLog(@"hello world!");} 
else 
{ 
//remove actions 
}} queue : dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)]; 

SKAction *delay = [SKAction waitForDuration: 0.5]; 

SKAction *mySequence = [SKAction sequence:@[logic,delay,nil]]; 

[myNode runAction:mySequence]; 

просто, как яблочный пирог мой мальчик

+1

К сожалению, я немного запутался. Не могли бы вы привести небольшой пример? Я не уверен, как бы интегрировать «waitForDuration». – adsf

3

Альтернативное решение с использованием Swift:

runAction(
    SKAction.repeatActionForever (
      SKAction.sequence([ 
       SKAction.waitForDuration(1), 
       SKAction.runBlock({ 
         //Code you want to execute 
         if conditionIsTrue { 
          self.removeActionForKey("New Thread") 
         }   
       }) 
      ]) 
    ), 
    withKey: "New Thread" 
) 
Смежные вопросы