【发布时间】:2015-06-10 21:07:52
【问题描述】:
是否存在使用runAction 运行SKAction 无法完成的已知情况?
我在不同的SKNode 上启动了几个“runAction”。为了同步所有这些动作,我使用了一个在每个SKAction 的完成块内递增的计数器。当计数器达到启动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!")
}
}
动作是动态生成的,由sequence 的以下动作组成:
waitForDurationscaleTomoveByhideunhide
没有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,
])
【问题讨论】:
-
我没有遇到这个。你能提供一个代码sn-p吗?询问是否有任何已知案例很难回答。至于为什么你的没有完成可能更容易弄清楚,然后将军有没有人遇到过这个问题。
-
发布代码会很有帮助。除了显式删除动作之外,可能导致动作停止的一件事是,如果您在序列中间从场景中删除节点,就像 here 发生的那样。也许你做了类似的事情。不看代码很难说。
-
没有代码...没有答案。
-
@Domsware 这段代码没有说太多,因为问题的“核心”在 myActions 中...您能否用那部分代码更新您的问题(您在其中创建 myActions 变量) ?
-
我的直觉说它工作正常,但你期待不同的结果。没有真正的代码,我无法帮助识别它。我能做的最好的事情是建议您仔细检查记录内容的位置并验证您认为应该发生的事情是否与实际编写的代码相匹配。我怀疑这是您正在操纵的竞争条件或共享变量的简单问题。
标签: swift sprite-kit skaction