TaskSystem
シューティングとしての体裁は整ってきたので、思い切ってタスクシステムを使ったフレームワークに移植中。今まではyaneSDKのシーンクラスを軸にしたフレームワークをとっていたのでだいぶ大きな変更になるが、システムの見通しはついているのでそれほど難しくはない。今までシーンとキャラクタがまったく別の系統として存在していたのを、同じ根(タスク基底クラス)に結びつけただけともいえる。
yaneSDKタスクシステムの自分問題点
- 何をタスクにして、何をタスクにしないのかよくわからない
- タスク同士でやり取りをしたいときにアクセス手段に困る
- コンストラクタ、デストラクタからタスクコントローラなどのコンテキストにアクセスできない
- あと基底のCTaskControlBaseインターフェースだけど、仮想デストラクタがないのは仕様?
自解
- 毎フレーム同じ処理を行うならタスクにしてよいだろう。ただし2にも絡むが、終了条件が他のタスクに依存する場合それを関知できないので、普通のクラスにしてその依存先タスクが保持して毎フレーム呼び出すのがいい。
- これは結構困る。ゲーム内に一つしか存在しないはずのタスクを取り出す手段をタスクコントローラに実装しておくくらいか。あとは生成時にポインタをやり取りするしかない。一度タスクシステムに取り込まれると、外から手を出すのは難しい(というかそれが正しい?)。
- 初期化処理、終了処理もOnMove()内に書くのが普通になるか。もちろんタスクコントローラなどを使わないなら、コンストラクタ、デストラクタを使えばいい。無理やりでもやりたいなら、生成時にコンストラクタに引数として渡して、メンバで持っておくしかないかな。
- 自分で足しちゃった。チェインが基底クラスのポインタなんだから、仮想デストラクタがないとやばいんじゃないかなあ?