SyntaxHighlighter

2012年3月27日火曜日

たくさんの敵の処理 現状編

どうやって処理の大きさを測るかという問題に対してはタスクシステムの導入がいいかもしれない。

現状だと、毎フレーム処理したり監視したり更新したりする必要のあるオブジェクトにはすべてvoid Step(int current_time)みたいなインターフェイスのメンバ関数があって、毎フレームそれを実行している。

簡潔ではあるが、外からは何をしているのかは分からないし、処理の大きさはそのオブジェクトしか分からないので、最適化しにくい。まぁ、結局処理の大きさはキャラクタ数と密集度でだいたい決まるので分かるといえばわかるのだけど、これはキャラクタがどれもだいたい同じ大きさの処理という前提があるからだ。しかし、今後そうである保証は無い。

それを逆に、保証してしまえば良い。
だいたい同じくらいの処理の大きさにStepを分割して、タスクシステムに処理を登録。
タスクシシテムは数を数えるだけで1Stepあたりの資源を簡単に把握できる。
タスクに優先度を設定すれば資源の分配がより効率的になる。

…でも、タスクシステムに処理を登録するかどうかっていつ誰が判断するんだ?

1.キャラクタが生成されたとき
2.衝突したとき
3.毎フレーム存在するもの全部登録

現状のStep関数を回して、そこから必要なタスクを生成登録するのがベターかな。

0 件のコメント:

コメントを投稿