30代で東京→名古屋にUターン転職しました。

30代既婚男子。子供2人。日経先物トレードとかプログラミングとか英語とか

【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)