如何在变量更改时停止在 DidMove 上调用的 SKAction

How to stop SKAction called on DidMove when a variable changes

所以当我的场景开始时,我正在加载并 运行 一个动画,但有一点我想停止我的动画。我明白为什么它不起作用,但我找不到解决它的方法。我已经尝试覆盖 func update,但我找不到正确的方法(如果有的话)来更新我的函数。

override func didMove(to view: SKView) {
    loadAnimation(atlasName: "test")
    runAnimation(spriteName: "testImg", timeFrame: 0.08)    
}

func loadAnimation(atlasName : String) {
    let spriteAtlas = SKTextureAtlas(named: "\(atlasName)")
    
    for index in 1...spriteAtlas.textureNames.count{
        let image = String(format: "\(atlasName)%01d", index)
        atlasAnimation += [spriteAtlas.textureNamed(image)]
    }

}

func runAnimation(spriteName : String, timeFrame : Double) {
    let spriteNode = self.childNode(withName: "\(spriteName)")
    spriteNode?.name = "\(spriteName)"
    if (spriteNode != nil) {
        let animation = SKAction.animate(with: atlasAnimation, timePerFrame: timeFrame)
        let forever = SKAction.repeatForever(animation)
        spriteNode?.run(forever, withKey: "key")
        if spriteNode?.name == "whatever" {
            if i  < 18 {
                spriteNode?.removeAction(forKey: "key")
            }
        }
    }

您可以使用 属性 观察器来完成此类任务:

var i = 50{
   didSet{
      if i < 18{
          spriteNode.removeAction(forKey: "key")
      }
   }
}      

这意味着每次 i 设置为另一个值时,都会调用 didSet 块。