Swift当变量发生变化时怎么让SKAction停止调用DidMove?

标签: Swift
发布时间: 2017/12/22 16:58:00
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

当我的场景开始时会加载和运行一个动画,现在的问题是当我的全局变量"i"小于18时停止动画.但我不明白为什么它没有执行,我也找不到解决方法,下面是我的swift代码:

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")
            }
        }


解决方法 1:

您可以为此类任务使用属性观察器:

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


赞助商