めざせお手軽で富豪的なSTGアーキテクチャー(3.75)

インスタンスプールの続き。
ところで、メインループをぐるぐる回して全オブジェクトのUpdateメソッドのようなものを呼ぶ一般的なゲームプログラムの場合、画面外に出るなどしてインスタンスが破棄(Dispose)されるとき、前回書いたレベルの単純な方法では、破棄したその瞬間からインスタンスを再利用可能になるため、オブジェクトチェインなりタスクリストなりに参照が残ったまま再利用され、重複して登録されるという問題が発生し得ます。
こういう場合、貧民的発想だと、「破棄されたオブジェクトはしばらく別枠でプールしておき、準備用のメソッド呼び出し(ゲームループの終端で呼ばれる)などをキーにして使用可能になる、という仕組みにしたりします。
では富豪的発想ではどうなるか、というと、私の結論では「一旦世に出たインスタンスが破棄(Dispose)されたとき、必ず全管理リストから抹消されるまでの時間(ゲームループ1週とか)は帰ってきたばかりのインスタンスを再利用しなくてもすむ程度の量のインスタンスを最初に確保しておく」となります。
たとえば、ゲームループ1周で最大10発の弾を生成するとするならば、画面に同時に存在しうる弾の総数+20(余裕を持って!)ぐらいのインスタンスを最初から持たせておきさえすればいい、というわけですよ!
あとは、そうやって決めた猶予期間内にタスクリストからオブジェクトをもれなく抜いてやればOKです。ね、簡単でしょ?(ボブ