【swift】runActionは即時反映しないのかもしれない
ちょっとSKActionでハマったのでメモします。修正前のソースコードは以下のとおり。「catActionLeft」というアクションを起こして、即そのアクションを止めたかったんだけどうまくいかない。reomoveActionでは「catActionLeft」の前から動いてるActionの状態で止まってしまうという事象。
//「catImage」は猫の画像のSKSpriteNode。「catActionLeft」は猫が左側に走ってるアクション。 //ここで猫を左側に走らせるアクションに変更したい。 let leftAction = SKAction.repeatActionForever(catActionLeft) catImage.runAction(leftAction,withKey:"catAction") //「catActonLeft」アクションに変えた後、即そのアクションを止める想定。 //ただ実際は「catActionLeft」アクションが反映せず、その前のActionの状態でActionが止まってた。 catImage.removeActionForKey("catAction")
なんとなくrunActionは即時反映しないのかなあと。ということでソースを以下のとおり書き換えたらうまくいきました。わざわざブログに書くほどのことでもないかもしれないですけど、一旦削除して新たなオブジェクトを作成する感じですね。
//SKSpriteNodeを一旦削除。 catImage.removeFromParent() //動きを止めた後に表示したい画像を設定。 catImage = SKSpriteNode(texture: catImageView) //画面に表示。 self.addChild(catImage)