Производительность системы частиц XNA - PullRequest
3 голосов
/ 23 августа 2011

У меня есть система частиц, использующая базовую спрайт-партию, где частицы создаются и уничтожаются на основе уменьшающегося альфа-значения до 0.

Производительность системы довольно плохая на ПК, и очень плохая на xboxс примерно сотней частиц на экране, прежде чем значительный fps замедлится, я прочитал о том, как улучшить производительность, но есть ли у кого-нибудь какие-либо советы о том, как их улучшить, например, что является лучшим способом - повторно использовать частицы, а не убивать()?Имеет ли значение размер изображения каждой частицы?если я не поверну каждую частицу, это поможет?

Я поиграл с каждым из этих предложений, но не получил какого-либо существенного улучшения - есть ли у кого-нибудь совет - стоит ли переходить на gpu вместона базе процессора?

Ответы [ 2 ]

4 голосов
/ 23 августа 2011

Из того, что я помню, уничтожение и создание частиц существенно снижает производительность.Возможно, вы захотите повторно использовать частицы.

Не уверен, что размер изображения или его вращение резко снижают производительность, если изображение не очень большое.

У меня был бы массив с обменом мертвыми частицами наконец активных частиц, поэтому обрабатывает только активные частицы.

Например:

Make an array of MAX particles;
When you need a particle grab particle_array[count]; 
Increment count.
When a particle dies, decrement count, swap the particle with particle_array[count];
Update only count particles;

Надеюсь, это поможет.

1 голос
/ 24 августа 2011

Я полностью согласен с ответом дозвуковой, но я хотел бы расширить его.

Создание новой частицы каждый раз и уничтожение (или отпускание) старых частиц создает МНОГО мусора. Мантра избегания мусора в C #, особенно в Xbox (из-за плохой обработки мусора в компактной среде), НИКОГДА new не является типом класса в цикле обновления / отрисовки. ВСЕГДА предварительно создавайте пулы. Шон Х объясняет: http://blogs.msdn.com/b/shawnhar/archive/2007/07/02/twin-paths-to-garbage-collector-nirvana.aspx.

Еще одна вещь, которую следует учитывать, это то, что использование нескольких текстур может вызвать замедление для пакета спрайтов из-за нескольких вызовов отрисовки. Попробуйте объединить несколько текстур частиц в одну и использовать параметр исходного прямоугольника SpriteBatch.Draw.

...