是否存在使用 runAction
运行 SKAction
无法完成的已知情况?
我在不同的 SKNode
上启动了多个“runAction”。为了同步所有这些操作,我使用了一个计数器,该计数器在每个 SKAction
的完成 block 内递增。当计数器达到启动的 SKAction
的确切数量时,动画就完成了。
有时一个 SKAction
未完成,则动画永远不会完成。
// Several actions are launched...
myNode.runAction(myActions,completion:{
checkCompletion()
})
// Check if all actions completed
//
// numberOfLaunchedActions: number of actions launched
// logDebug: some log helper
func checkCompletion() {
// This counter is initialized earlier
numberOfCompletedActions++
logDebug(">> Actions completed: \(numberOfCompletedActions)/\(numberOfLaunchedActions)")
if numberOfCompletedActions == numberOfLaunchedActions {
/// some statements
logDebug("Animation Completed!")
}
}
操作是动态生成的,由以下操作的序列
组成:
waitForDuration
缩放至
移动
隐藏
取消隐藏
没有removeFromParent
,也没有runAction
,也没有runBlock
。
我关注的行动如下:
let waitAction = SKAction.waitForDuration(0.4)
let scaleAction = SKAction.scaleTo(0.1, duration: 2.0)
scaleAction.timingMode = .EaseOut
let myAction = SKAction.sequence([
waitAction,
scaleAction,
])
最佳答案
有一种已知情况:在序列
中的从父项中删除
之后添加操作:SKAction runAction does not execute completion block
正如评论中所解释的:
Remove from parent
is causing the rest of the actions in thesequence
not to be called, since the involved node is no longer in the scene. The sequence didn't complete, therefore the completion block shouldn't be called.
关于swift - 在哪些情况下 SKNode 上的 runAction 无法完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30767323/