在哪些情况下,SKNode上的runAction无法完成?

时间:2015-06-10 21:07:52

标签: swift sprite-kit skaction

是否存在使用SKAction运行runAction未完成的已知情况?

我在不同的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个动作组成:

  • waitForDuration
  • scaleTo
  • moveBy
  • hide
  • unhide

不是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,
])

1 个答案:

答案 0 :(得分:0)

有一个已知的案例:在Remove from parentsequence之后添加操作:SKAction runAction does not execute completion block

如评论中所述:

  

Remove from parent正在导致其余的操作   sequence不被调用,因为涉及的节点不再存在   现场。序列没有完成,因此完成   不应该调用块。