Spark ProjectにCharacterWalkerをコミットしてみた。
前回のエントリで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 アニメーション速度
*/
* キャラチップからキャラクターが歩くアニメーションを作成
* @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);
}
* 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);
}
こんな実装はオブジェクト指向として有りなんだろうか?凄く不安だ・・・・。
カテゴリ:ActionScript





