前回のエントリでGoogle Mapsの真ん中にドラゴンを歩かせてみたが、あの歩行用アニメーション周りのクラス「CharacterWalker」をSpark Projectにコミットしてみた。
どうも画像の規格がいくつかあるらしくてよくわからなかったが、素材サイトを回って、多分こうだろうと言うもの3種類(2000、XP、VX)作ってみた。
まず、発見した3種類の画像規格だが、メモしてみたらこんな感じだと思われる。
見た通り、アニメーション画像の枚数が違ったり、前後左右の向きがバラバラで、何か面倒そうだったので、そこら辺を全部変数化して親クラス「CharacterWalker
」に入れ、全ロジックを書いてみた。で、3つの子クラスは親クラスに特定の引数を渡して初期化するという、正に「実装のための継承」を使った。
なので、CharacterWalkerのコンストラクタは引数だらけでとんでもない事になってる。コメントだとこんな感じ。
- /**
- * キャラチップからキャラクターが歩くアニメーションを作成
- * @param character キャラクター画像
- * @param animationSequence 歩行時のアニメーションの順番(列番号の配列を指定)
- * @param animationCount 歩行アニメーションの枚数
- * @param frontDirection 前向きの絵の行番号
- * @param leftDirection 左向きの絵の行番号
- * @param rightDirection 右向きの絵の行番号
- * @param backDirection 後向きの絵の行番号
- * @param speed アニメーション速度
- */
で、子クラスはコンストラクタ引数が本当に必要そうな画像(最初の引数)と速度だけにして、他は設定すると言う形。
例えばこう。
で、他のメソッドは一切無い。子クラスはコンストラクタだけの実装なのだ。
- /**
- * RPGツクールXP用のキャラクターチップを歩かせる
- * @param character RPGツクールXP用のキャラクターチップ画像
- * @param speed アニメーション速度
- */
- public function CharacterWalkerXP(character:BitmapData , speed:uint = 500)
- {
- super(character, [0, 1, 2, 3], 4, 0, 1, 2, 3, speed);
- }
こんな実装はオブジェクト指向として有りなんだろうか?凄く不安だ・・・・。