シューティングゲームの弾幕や、アクションゲームで敵を倒した際に敵に重なるように表示される得点のような、「表示する機会は多いけど、すぐに画面から消えるオブジェクト」を考えます。
Andengineでは画像を表示するならSprite、テキストならTextクラスのオブジェクトを生成します。
ですが、オブジェクトの生成は重くなるので、大量のオブジェクトを「必要になったら生成。不必要になったら削除。」といった処理で利用しているとFPSが落ちてしまいます。
このようなオブジェクトはAndengineのGenericPoolを使って再利用することで処理を軽くすることができます。
GenericPoolのイメージ
「Pool」とは泳ぐプールの他に「蓄える」といった意味があります。つまりGenericPoolはオブジェクトを蓄えておくのに利用するクラスということです。
ここでは、Spriteをシューティングゲームの弾として使っている場合を考えます。
シューティングゲームの弾は画面上に沢山現れますが、その全てはすぐに画面外に出て行ったり、キャラクターに当たったりして画面から消えます。
このようなゲームでは弾のSpriteをGenericPoolで再利用する場合、以下のような処理になります。
- 弾を画面上から消す際に、そのSpriteのオブジェクトを削除せずに、GenericPoolに格納する。
- 次に、新しいが必要になった際に、新しいSpriteオブジェクトを生成せずに、GenericPoolに格納されているSpriteを取り出す。
- GenericPoolが空の時に弾が必要な場合は、GenericPoolにSpriteオブジェクトを作らせる。
ここで、プールに格納することをRecycle。プールから取り出すことをObtain。新しくオブジェクトを作ることをAllocateといいます。
 |
GenericPoolでの弾の再利用のイメージ |