XNA4でパーティクルシステムを作成していますが、問題が発生しました。私の最初のパーティクルシステムは、必要なときにインスタンスが作成されるパーティクルの単純なリストでした。しかし、それから私はプールの使用について読みました。
私の2番目のシステムは、粒子で満たされたプールと、エミッター/コントローラーで構成されています。私のプールはかなり基本的です、これはコードです:
class Pool<T> where T: new ()
{
public T[] pool;
public int nextItem = 0;
public Pool(int capacity)
{
pool = new T[capacity];
for (int i = 0; i < capacity; i++)
{
pool[i] = new T();
}
}
public T Create()
{
return pool[nextItem++];
}
public void Destroy(T particle)
{
pool[--nextItem] = particle;
}
}
問題は、プールシステムがCPUに対してはるかに飢えていることです。プールからエミッターにパーティクルを取り出すたびに、コンストラクターがないため、パーティクルを再初期化してリセットする必要があります。これは問題です。
プールを使用する意味はありますか?それらのパーティクルを再初期化する場合、または変更されない完全に同一のオブジェクトの配列用にプールを残す必要がある場合はどうなりますか?