2015-09-22 50 views
0

我不能等待SKAction组,因为完成处理程序立即执行。下面是简单的例子:如何等待所有群组操作?

let a1 = SKAction.runAction(SKAction.fadeAlphaTo(0.5, duration: duration), onChildWithName: child1.name!) 
let a2 = SKAction.runAction(SKAction.fadeAlphaTo(1, duration: duration), onChildWithName: child2.name!) 

runAction(SKAction.group([a1, a2]), completion: {() -> Void in 
    // do something 
}) 

节点child1child2是现场的孩子。当我在iPhone 5s(iOS 8.4)模拟器上运行应用程序时,我发现完成模块不会等待组操作完成并立即启动。

所以我的两个问题:

  1. 是IT方面的错误?如果否,在SKAction文档中我可以找到这种行为的解释。

  2. 如何做到这一点?我知道我可以使用计数器,并开始每个动作a1a2与完成块,只是检查计数器变为0时,但它看起来像一个样板代码为我。

+0

你有一个警告说'SKScene:动画SKScene的位置没有任何效果.'? – WangYudong

+0

@王玉东不,没有任何警告,所有动画都能正常工作,而且完全像我需要的一样。 –

+0

很奇怪,一小时前我可以重现你的问题,但现在一切正常。看到我的示例项目[这里](https://www.dropbox.com/s/hqsnyh0czha0ymh/GroupAction.zip?dl=0)。 – WangYudong

回答

0

根据Apple的文档,SKAction.runAction返回瞬时持续时间(即0持续时间)的动作。

因此,在您的代码SKActions,a1a2,有瞬时持续时间。这就是为什么立即调用完成块。

从苹果文档

SKAction.runAction:这个动作有一个瞬间的持续时间, 虽然对孩子要执行的操作可能有其自己的 的持续时间。

https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKAction_Ref/#//apple_ref/occ/clm/SKAction/runAction:onChildWithName

一种方式设置完成处理程序将其设置为子节点之一,因为这两个动作的时间相同。

let a1 = SKAction.fadeAlphaTo(0.5, duration: 1); 
let a2 = SKAction.fadeAlphaTo(1, duration: 1); 

child1.runAction(a1) 
child2.runAction(a2) {() -> Void in 
    //completion code 
}