簡體   English   中英

如果我每次創建它時都被迫重新啟動每個粒子,我是否應該使用Pools作為粒子

[英]Should I use Pools for particles if i forced to re-init every particle every time i create them

我正在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更加飢渴。 每次我從池中取出粒子到我的發射器時我都被迫重新初始化並重置粒子,因為構造函數不存在而且這是一個問題。

使用池有什么意義嗎,如果我重新初始化那些粒子,或者我應該為完全相同的對象的數組留下池,這些對象永遠不會改變?

在XNA應用程序中,通常不應該對象池加速初始化。 這是為了加快垃圾收集。 控制台上的GC速度較慢,並且在整個更新功能運行16毫秒的游戲中,收集暫停可以明顯地顯着。 這可能是或可能不是您特定情況的問題,特別是如果這是一個PC應用程序,取決於您使用的粒子的數量和生命周期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM