めざせお手軽で富豪的なSTGアーキテクチャー(9)
アクションのCompositについて。
前回話に出てきたCompositパターンについて補足しておきましょう。
Compositパターンとは一言で言うと、あるクラス(の派生クラス)のオブジェクト群をひとつの(基底クラスの)オブジェクトとして扱うやり方です。詳しい説明はやるおなりwikipediaなりに聞いてください。
今回の場合は、ActionBaseが基底クラスで、BulletShootActionやらWaitActionやらが派生クラスになります。そいつらをまとめてひとつのオブジェクトとして扱うクラスを作ってやればめでたくCompositパターンの完成となりますので、以下のようなCompositActionクラスを定義します。
public class CompositAction : ActionBase { List<ActionBase> actions = new List<ActionBase>(); int activeAction = 0; public void AddAction(ActionBase action){ actions.Add(action); } public override bool Action(IActionSubject s){ if (actions[activeAction].Action(s) == true) activeAction++; return if (activeAction > actions.Count); } }
CompositしたActionがtrueを返せば次回から次のアクションを実行するようにしてみました。実際にはもうちょっと加筆修正しないと使い物になりませんが、イメージ的にはこんな感じです。
CompositActionのインスタンスを作成、それにAddActionでアクションを追加したものをGmEnemyにアクションとして登録すれば、GmEnemyはバカの一つ覚えでActionを呼ぶだけで、敵の生成や移動・待機の制御を行うための多種多様なアクションを実行することができるようになります。また、CompositActionのAction部を微妙に変えてループするようにしたLoopActionなんかも定義することができますので、下手にGmEnemyが配列管理するより柔軟な処理が簡単に行えます。たぶん。