4

我正在 XNA4 中创建一个粒子系统,但遇到了问题。我的第一个粒子系统是一个简单的粒子列表,它的实例在需要时创建。但后来我读到了关于使用池的信息。

我的第二个系统由一个充满粒子的池和一个发射器/控制器组成。我的游泳池非常基本,这是代码:

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。每次我从池中取出粒子到我的发射器时,我都被迫重新初始化和重置粒子,因为没有构造函数,这是一个问题。

如果我重新初始化这些粒子,或者我应该为完全相同且永不改变的对象数组留下池,那么使用池是否有任何意义?

4

1 回答 1

5

在 XNA 应用程序中,通常对象池不应该加速初始化。这是为了加快垃圾收集。主机上的 GC 速度较慢,并且在整个更新函数运行时间为 16 毫秒的游戏中,收集暂停会很明显。对于您的特定情况,这可能会或可能不会关注,特别是如果这是一个 PC 应用程序,这取决于您使用的粒子的数量和寿命。

于 2013-01-17T21:54:13.737 回答