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 !!!"を見ることができます。コンソールで。しかし...何も初めからアニメ化されませんでした、削除するアクションはありませんので、
override func update(_ currentTime: TimeInterval) {
runAnimation(spriteName: "testImg", timeFrame: 0.08)
}
あなたの答えをありがとう、マルセル。私は疑問に思った。私の "spriteNode"は関数 "runAnimation"内に作成されるので( "spriteName"を取得するためにそこに作成する必要があります)、クラスの未解決の識別子とみなされます。 – pantaleonPantoja
また、関数内で試しても機能しませんでした。それをどこに置くべきかは確かではありませんでしたが、私はそれを機能させることができませんでした。 – pantaleonPantoja
spriteNodeを関数内で宣言する必要があるのはなぜですか? var spriteNode:SKSpriteNode?を宣言するだけです。クラスで使用し、関数内でspriteNode = self.childNode(withName: "\(spriteName)") – Marcel