2017-12-21 2 views
1

그래서 장면을 시작할 때 애니메이션을로드하고 실행하지만 애니메이션을 중단하고 싶습니다. 내 전역 변수 " 나는 그것이 18 세보다 낮다. 나는 그것이 효과가없는 이유를 이해하지만 그것을 해결할 방법을 찾을 수 없다. 재정의하는 func 업데이트를 시도했지만 내 기능을 업데이트하는 올바른 방법 (있는 경우)을 찾을 수 없습니다. 주석 처리 된 부분을 만드는 방법에 대한 아이디어가 있습니까? 내 말은, 어디에 넣어야합니까?변수가 변경 될 때 DidMove에서 호출 된 SKAction을 중지하는 방법

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 statement !!!"를 볼 수 있습니다. 콘솔에. 이 매번 i는 것을 의미

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

: 아무것도 처음부터 애니메이션되고 있지 된 이후하지만,

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

답변

2

당신은 작업의 이런 종류의 속성 관찰자를 사용할 수 있습니다 ... 제거 할 어떠한 조치도 없다 다른 값으로 설정하면 didSet 블록이 호출됩니다.

+0

답변 해 주셔서 감사합니다. Marcel. 나는 한 가지 의심을 품는다. 내 "spriteNode"는 "runAnimation"함수 내에서 생성되므로 ("spriteName"을 얻기 위해 생성되어야 함) 클래스의 해결되지 않은 식별자로 간주됩니다. 어떻게 작동합니까? – pantaleonPantoja

+0

또한 함수 내부에서 시도했지만 작동하지 않았습니다. 그것을 어디에 넣을 지 잘 모르겠지만 그것을 작동하게 만들 수는 없었습니다. – pantaleonPantoja

+0

spriteNode를 함수 내에서 선언해야하는 이유는 무엇입니까? var spriteNode : SKSpriteNode?를 선언하면됩니다. 클래스 및 다음 함수를 사용하여 spriteNode = self.childNode (withName : "\ (spriteName)") – Marcel

관련 문제