タスクシステムの再実装を検討してみた |
開発中のゲームもタスクシステムっぽいものを実装しています。
プレイヤーや敵キャラはもちろん、ビルボードエフェクトも
タスクで管理しています。
生存期間がバラバラなので、
単に基底クラスのポインタ配列を作っておいて
タスクの発生時に空いているポインタを探してnew、
消滅でdelete、ポインタをNullに設定では
そのコストやメモリの断片化、肥大化がちょっと心配。
そのため、作業領域を含んだ派生クラスのオブジェクト配列を作成。
呼び出し元は基底クラスで実装されているメインメソッド(procやdraw)を実行。
基底クラスのメインメソッドでは
タスク割り当て時に指定されたタイプ(プレイヤーや敵キャラ)に沿って
本来のプレイヤークラスや敵キャラクラスの
サブメソッド(subProcやsubDraw)をselect-caseで実行・・・
正直、シンプルじゃありません。
ということで、なんとか改善できないか検討してみました。
といっても、今は休刊しているCマガジン2006/01号の「ゲームノシクミ」の
タスクシステムの実装を理解しながら自分なりにアレンジしてみただけなのですが。
結果はかなりシンプルになって理想に近いんだけど
開発中のゲームに適用するのは
かなりのコードを組んじゃったあとなのでちょっと難しいかも。
つぎのゲームで実装できればなぁという感じです。
グラフィックやゲームループに依存しないので
タスクシステム単体としてフレームワークにできるので
今のうちから作りこんでおくのもありなのかもしれないなぁ・・・
