2015-12-02 71 views
0

你能告诉我为什么这段代码不起作用吗?是不是可以在SKAction.runBlock()函数中运行一个Action?Swift SpriteKit在SKAction.runBlock()运行SKAction

let testaction = SKAction.repeatActionForever(SKAction.runBlock({self.myFunction()})) 
runAction(testaction) 

这里是我的testaction:

func myFunction() { 
    runAction(SKAction.runBlock({ 
     let i = 0 
     print(i) 
    })) 
} 

我需要这一场比赛。我想区分myFunction中的某些情况以在不同情况下运行不同的操作。我做错了什么?

编辑:当我将myFunction()更改为此时,我打印1永远,但不是从runBlock内部0。

func myFunction() { 
    let j = 1 
    print(j) 
    runAction(SKAction.runBlock({ 
     let i = 0 
     print(i) 
    })) 
} 
+1

,如果你尝试它到底会发生什么? –

+0

什么都没有。没有输出和没有错误,只是永远运行。 – SwiftProgger

+1

调用'runAction'不会导致一个动作运行,它只是在下一次处理场景的动画循环时排队一个要运行的动作。我猜测,既然你不断地向这个队列添加动作(甚至没有任何延迟),那么这个动画循环就不会被处理。如果你不重复这个问题,而是运行X次,你会看到一堆1,然后是一堆0。 –

回答

0

喜欢的人上面已经说过,你只需要轻微的延迟添加到它,它应该工作

let testaction1 = SKAction.runBlock(self.myFunction) 
    let testaction2 = SKAction.waitForDuration(0.1) 
    let sequence = SKAction.repeatActionForever(SKAction.sequence([testaction1, testaction2])) 

    runAction(sequence)