こんにちは、みやびのです。
今回は、Pythonista+sceneで歩行アニメーションを作成する方法を紹介します。
アニメーションがなくてもオブジェクトの移動は可能ですが、アニメーションを加えることでより自然なアクションで移動させることができます。
簡単なアクションができたら完成度を上げるために歩行アニメーションも活用しましょう。
本記事の内容は以下の通り。
・Pythonista+sceneで歩行アニメーションに必要な処理
・Pythonista+sceneで歩行アニメーションの実装例
目次
Pythonista+sceneで歩行アニメーションの基本
歩行アニメーションに関する基本的な事項について解説します。
歩行アニメーションと画像
歩行アニメーションを追加する場合以下の3種類の画像が必要です。
・立ち絵画像:立ち止まっている時の画像
・歩行画像1:歩いている時の画像1枚目
・歩行画像2:歩いている時の画像2枚目
立ち止まっている時は立ち絵画像を設定します。
歩行中は歩行画像1と歩行画像2を連続で切り替えることで自然な形の歩行を見せることが可能です。
具体的な処理は以下の通り。
・update()メソッドでオブジェクトの位置情報(object.position)を監視
・オブジェクトのx座標を2で割り余りを求める
・余りの値によって画像情報(object.texture)を書き換える(0の場合は画像1,1の場合は画像2)
・立ち止まっている場合は歩行画像ではなく立ち絵にする
歩行アニメーションの向き
オブジェクトの向きは「object.x_scale」に格納されています。
object.x_scaleの値を変えることで進行方向に合わせてアニメーションの向きを切り替えることが可能です。
具体的な処理は以下の通り。
・進行方向の情報を取得
・進行方向によってobject.x_scaleの値を変える(1 or -1)
・停止中はobject.x_scaleの値を変えない
キャラクターの向きは以下の式で求めることができます。
direction = (a > 0) - (a < 0)
上記式の結果は1・0・-1のいずれかです。
object.x_scaleに0を設定してしまうと画像が消えてしまうので、その場合は-1か1を設定しておきましょう。
また、画像によって前後が異なるので注意が必要です。
(-1が前の画像と1が前の画像がある)
キャラクターのアニメーションに関してはPythonistaの「Examples/Game Tutorial/Tutorial Part3.py」が非常に参考になります。
Pythonista+sceneで歩行アニメーションの実装例
基本的に「Examples/Game Tutorial/Tutorial Part3.py」の内容をそのまま実装して画像だけ切り替えればOKです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | # coding: utf-8 from scene import * import sound # 向きを取得する関数 def cmp(a, b): return ((a > b) - (a < b)) # 立ち絵画像の設定 standing_texture = Texture('plf:AlienBlue_front') # 歩行画像の設定(2枚) walk_textures = [Texture('plf:AlienBlue_walk1'), Texture('plf:AlienBlue_walk2')] class Game (Scene): def setup(self): self.background_color = '#004f82' ground = Node(parent=self) x = 0 while x <= self.size.w + 64: tile = SpriteNode('plf:Ground_PlanetHalf_mid', position=(x, 0)) ground.add_child(tile) x += 64 # デフォルト画像(立ち絵画像の設定) self.player = SpriteNode(standing_texture) self.player.anchor_point = (0.5, 0) self.player.position = (self.size.w/2, 32) self.add_child(self.player) # 現在の歩数を記録する変数 self.walk_step = -1 def update(self): g = gravity() # スマホが傾いている場合(移動中) if abs(g.x) > 0.05: # 画像の向きの設定。画像によって左右が違うの注意 self.player.x_scale = cmp(g.x, 0) x = self.player.position.x max_speed = 40 x = max(0, min(self.size.w, x + g.x * max_speed)) self.player.position = x, 32 # x座標から現在の歩数を求めてどちらの画像を使うか決める step = int(self.player.position.x / 40) % 2 if step != self.walk_step: self.player.texture = walk_textures[step] self.walk_step = step # 停止中 else: # 画像だけ差し替える self.player.texture = standing_texture self.walk_step = -1 if __name__ == '__main__': run(Game(), PORTRAIT, show_fps=True) |
内容はほぼ「Examples/Game Tutorial/Tutorial Part3.py」からの引用でコメントを追加しています。
なので基本的にはチュートリアルを動かしつつコードを熟読しておけばOKです。
◆実行例
終わりに
今回は歩行アニメーションを追加する方法について紹介しました。
歩行アニメーションがあるとより自然なアクションができるのでゲームの完成度が高まります。
歩行用の画像を用意すれば簡単な処理を追加するだけで実装できるので是非挑戦してみてください。
Pythonistaについては「Pythonistaの使い方まとめ」にまとめています。