代码之家  ›  专栏  ›  技术社区  ›  pantaleonPantoja

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

  •  2
  • pantaleonPantoja  · 技术社区  · 7 年前

    所以我在场景开始时加载并运行动画,但有一点我想停止动画。我确实理解为什么它不起作用,但我找不到解决它的方法。我尝试重写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")
                }
            }
        }
    
    1 回复  |  直到 3 年前
        1
  •  2
  •   Marcel    7 年前

    您可以将属性观察者用于此类任务:

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

    这意味着每次 i