var action = SKAction.sequence([
                 SKAction.waitForDuration(1),
                 SKAction.runBlock({
                      //Some code
                 })
             ])

我希望上述操作在某些情况为真时继续重复执行。我怎样才能做到这一点?

我知道我可以使用runAction(action)运行一次操作,或者使用runAction(SKAction.repeatActionForever(action))永久重复操作。我如何只在某些条件为真的情况下重复它?

如果使用动作无法做到这一点,那么除了在某些情况为真的情况下可以重复这些步骤之外,还有其他方法(显然,在单独的线程上,我不希望这冻结我的应用程序):

1)等一下

2)执行一段代码

3)检查条件是否正确。如果它停止重复。否则,重复。

我不愿意使用sleep(),因为这听起来像是一个糟糕的解决方案,而且苹果不允许在商店中使用应用程序。

最佳答案

您可以使用SKAction的

  • (SKAction *)runBlock:(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];
    

    像苹果派一样容易

    10-06 13:24
    查看更多