アニメーション
前章の通り、SKSpriteNodeを使えば静止画像を簡単に表示できますが、それだけではゲームは表現できません。
この章ではSKActionをによって、スプライトをアニメーションさせる方法を紹介します。
まずは、これまでの要領でプロジェクトを作成し、SJAnimationScene
を追加します。
そして、左下に剣のスプライトを配置し、アニメーションさせる際にノードを特定できるよう、name
を指定します。
剣を表示
次に、touchesBegan:withEvent:
の中で、アニメーションの設定をします。
タップされた位置へ移動するためのSKActionのインスタンスを、moveTo:duration:
メソッドで作り、ノードのrunAction:
に渡しています。
これでタップされた位置に剣が1秒間かけて移動するようになりました。
SKActionは他にも様々な種類があり、拡大・縮小や回転、フェードイン・アウト、音の再生までできます。
タップで移動
runAction:completion:
を使えば、アニメーション完了時に任意の処理を行うこともできます。
以下のコードでは座標をNSLog
で表示しています。
シーケンス
シーケンスを使えば、複数のアニメーションを連続して実行することも可能です。
以下は、1周回った後に画面から消えるサンプルです。
途中、右下で1秒間待っています。
シーケンス
グループ
同時に複数のアクションを適用することも可能です。
この例では、グループを使って、中央の剣をズームしながらフェードアウトさせています。
グループ
テクスチャ
SKSpriteNodeの使用する画像はSKTextureによって管理されています。
今まで意識していませんでしたが、spriteNodeWithImageNamed:
の中で、SKTextureが作られています。
単純な利用ならこの方法でいいのですが、例えば同じ画像を何度も使う場合は、
一度テクスチャを作って、それを再利用してSpriteNodeを生成したほうがメモリ効率が良くなります。
またSKTextureとSKActionを組み合わせ使うと、パラパラ漫画のような表現も簡単にできます。
ここでは以下の画像から歩行のアニメーションを作ります。
clotharmor.png
note
複数枚の画像からアニメーションを作りたい場合は、テクスチャアトラスという機能を使うと簡単にひとまとめにして扱うことができます。既存の素材を利用する場合、今回のようにタイル上に並べてあるものが多いため、ここでは割愛します。
実装例は以下のようになります。
先ほどの画像からSKTextureを作り、その一部分を切り取って複数枚のテクスチャを作っています。
こうすることで手間もメモリも節約できます。
なお、Rect指定は比率での指定になりますので、幅・高さで割るのを忘れないようにしましょう。
そして、作成したテクスチャの配列を一定時間で切り替えるSKActionを生成し、無限に繰り返すようにしてrunAction:
に渡しています。
歩行
このように、SKActionを利用すると、手軽にアニメーション表現を行うことができます。
ゲームの表現力向上に、是非活用してください。
comments powered by