繁体   English   中英

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

[英]How to stop SKAction called on DidMove when a variable changes

因此,当我的场景开始时,我正在加载并运行动画,但是有一点我想停止动画,那就是当我的全局变量“ i”小于18时。我确实知道为什么无法正常工作,但我找不到解决方法。 我尝试覆盖函数更新,但是找不到正确的方法(如果有)来更新我的函数。 关于如何使被注释的部分起作用的任何想法? 我的意思是,我应该放在哪里?

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" {
  //THIS PART WON´T WORK BECAUSE WHEN THE SCENE IS LOADED, i = 100
            if i  < 18 {
                print("if statement!!!")
                spriteNode?.removeAction(forKey: "key")
            }
        }
    }

如果我覆盖了func更新,那么我的动画将永远不会开始,但是if语句确实起作用。 您可以看到“ if语句!!!” 在控制台上。 但是由于从一开始就没有任何动画效果,因此无法删除任何动作...

override func update(_ currentTime: TimeInterval) {
    runAnimation(spriteName: "testImg", timeFrame: 0.08)
}

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM