Рисование частиц - PullRequest
       16

Рисование частиц

9 голосов
/ 23 марта 2011

Одна часть моего приложения показывает пейзаж, но на данный момент это довольно скучно.Поэтому я планирую анимировать некоторые частицы на экране (подумайте о чем-то вроде крошечных крыльев - http://www.youtube.com/watch?v=DpmcX-rWGfs). Однако я пока не нашел встроенной системы частиц; как я могу сделать это эффективно с памятью?Я уже внедрил свою собственную систему анимации для некоторых облаков, анимирующих над ландшафтом, используя CADisplayLink, и это довольно медленно (хотя я надеюсь сделать это быстрее). Еще одна очень тяжелая система, например, анимация 20 небольших точек за раз, возможно сломаю его.

Ответы [ 4 ]

5 голосов
/ 01 апреля 2011

Я еще не нашел ни одной встроенной системы частиц;

Существует несколько «бесплатных» проектов, в которые встроены системы частиц, вы можете посетить это видеоурок для Системы частиц, которая будет более чем достаточно эффективной для удовлетворения потребностей, о которых вы упомянули. Этот способ создания системы частиц в основном такой же, как и в Cocos2d, поэтому посмотрите учебник, а затем загрузите файлы проекта, вы можете легко встроить их Particle Emitter в ваш проект.

Как я могу эффективно использовать эту память?

Я бы порекомендовал вам использовать " Pattern Pool Pattern ", в основном вы предварительно выделяете "Pool" частиц, скажем, 1000 объектов. Затем ваши излучатели, попросите бассейн для частиц, когда они нуждаются в них. Если пул пуст, вы можете управлять делом соответствующим образом. Это может показаться неэффективным с точки зрения памяти, но очень эффективно с точки зрения производительности (чтобы избежать распределения в реальном времени многих мелких объектов, таких как частицы).

Некоторые предложения, когда вы объявляете, что ваша структура частиц пытается быть легкой и выровненной по степеням 2 (это сделает вашу структуру более дружественной к кешу), это 32 байта:

struct Particle 
{
    CGPoint position;
    CGPoint speed;  
    float life;
    float decay;
    unsigned short index;
    unsigned char color_R;
    unsigned char color_G;
    unsigned char color_B;
    unsigned char color_A;
    unsigned char rotation;
};

Но в зависимости от ваших потребностей, это может быть намного меньше, может быть, вам не нужен цвет / индекс / и т.д. Вам придется оценить это самостоятельно.

Наконец, я бы порекомендовал вам взглянуть на класс cocos2d CCParticleSystem, вы можете скачать код здесь . Их реализация не такая легкая, но она достаточно гибкая и может достигать очень хороших эффектов.

Удачи с вашими частицами:)

4 голосов
/ 30 марта 2011

Cocos2D - это графический движок 2D, который использует OpenGL ES 1 для рендеринга. Он поставляется со встроенной системой частиц. Код движка частиц довольно прост. Он использует VBO для рисования текстурированных квадратов для частиц. Вы должны быть в состоянии приспособить это к вашим собственным потребностям.

4 голосов
/ 23 марта 2011

Вам стоит ознакомиться с новой книгой iOS Recipes, написанной Мэттом Дрансом:

http://pragprog.com/titles/cdirec/ios-recipes

Среди рецептов есть использование встроенного CoreAnimation CAReplicatorLayer для создания излучателя в «Построить простой излучатель».

Книга все еще в альфа-версии, но если вы купите ее сейчас, вы получите обновления, когда она будет закончена.

0 голосов
/ 10 августа 2012

Если вы хотите использовать iOS5 и более поздние версии, вы можете использовать встроенные средства ОС, а именно CAEmitterLayer.

...