【Swift】SKActionをグループ化する方法

カエルが跳ねているアニメーション

SKActionのanimateを使うとテキスチャを切り替えてアニメーションを作ることができる。

例えば、カエルが跳ねるアニメーションを作るには2枚の画像を以下のようにすれば良い。

        let frogFrames:[SKTexture] =
            [
                textureAtlas.textureNamed("frog"),
                textureAtlas.textureNamed("frog_move")
            ]
        
        let frogAction = SKAction.animate(with: frogFrames, timePerFrame: 0.14)

このままだと一回だけ跳ねて終わってしまう。

永久的に跳ねさせておきたい場合には以下のようにSKActionのrepeatForeverを使う。

bounceAnimation = SKAction.repeatForever(frogAction)

これで繰り返しその場で跳ねる。

カエルを左右に動かす

では、跳ねているカエルを動かすにはどうすれば良いだろうか。

左に動いて右に動いて、、、を行う場合は以下のようにSKActionのsequenceを使う。

        let flipLeft = SKAction.scaleX(to: 1, duration: 0.05)
        let moveLeft = SKAction.move(by: CGVector(dx: -300, dy: 0), duration: 6)
        let flipRight = SKAction.scaleX(to: -1, duration: 0.05)
        let moveRight = SKAction.move(by: CGVector(dx: 300, dy: 0), duration: 6)
        
        movingAnimation = SKAction.repeatForever(SKAction.sequence([flipLeft,moveLeft,flipRight,moveRight]))

repeatForeverを使えば、永久的に右へ、左へ動き続けることになる。

跳ねている状態で左右に動かすには?

私は当初、SKActionのsequenceの中に、2つとも入れてしまえば良いと考えた。

SKAction.sequence([bounceAnimation,movingAnimation])

しかし、これでは最初のbounceAnimationのみ実行されることになる。

何故なら、bounceAnimatonはforeverになっているから永久的に実行され、次のアニメーションには進まないからだ。

解決策は、SKActionのgroupを使うこと。

bounceAndMoving = SKAction.group([bounceAnimation,movingAnimation])

これで両方のアニメーションがグループ化され、跳ねながら移動することが可能になった。