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

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

4 ответов


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

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

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

Я бы рекомендовал вам использовать "Шаблон Пула Объектов", в основном вы предварительно распределяете " пул " частиц, скажем, 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 класс, вы можете скачать код здесь. Их реализация не такая легкая, но достаточно гибкая и может добиться очень приятных эффектов.

удачи с частицами :)


вы должны проверить новую книгу iOS рецепты, написанные Мэттом Drance:

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

среди рецептов один, чтобы использовать встроенный CoreAnimation CAReplicatorLayer для создания излучателя в "построить простой излучатель".

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


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


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