그래서 장면을 시작할 때 애니메이션을로드하고 실행하지만 애니메이션을 중단하고 싶습니다. 내 전역 변수 " 나는 그것이 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)
}
답변 해 주셔서 감사합니다. Marcel. 나는 한 가지 의심을 품는다. 내 "spriteNode"는 "runAnimation"함수 내에서 생성되므로 ("spriteName"을 얻기 위해 생성되어야 함) 클래스의 해결되지 않은 식별자로 간주됩니다. 어떻게 작동합니까? – pantaleonPantoja
또한 함수 내부에서 시도했지만 작동하지 않았습니다. 그것을 어디에 넣을 지 잘 모르겠지만 그것을 작동하게 만들 수는 없었습니다. – pantaleonPantoja
spriteNode를 함수 내에서 선언해야하는 이유는 무엇입니까? var spriteNode : SKSpriteNode?를 선언하면됩니다. 클래스 및 다음 함수를 사용하여 spriteNode = self.childNode (withName : "\ (spriteName)") – Marcel