var action = SKAction.sequence([
SKAction.waitForDuration(1),
SKAction.runBlock({
//Some code
})
])
我希望上述操作在某些情况为真时继续重复执行。我怎样才能做到这一点?
我知道我可以使用
runAction(action)
运行一次操作,或者使用runAction(SKAction.repeatActionForever(action))
永久重复操作。我如何只在某些条件为真的情况下重复它?如果使用动作无法做到这一点,那么除了在某些情况为真的情况下可以重复这些步骤之外,还有其他方法(显然,在单独的线程上,我不希望这冻结我的应用程序):
1)等一下
2)执行一段代码
3)检查条件是否正确。如果它停止重复。否则,重复。
我不愿意使用
sleep()
,因为这听起来像是一个糟糕的解决方案,而且苹果不允许在商店中使用应用程序。 最佳答案
您可以使用SKAction的
队列:(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];
像苹果派一样容易