iPhone. Производительность системы частиц - PullRequest
2 голосов
/ 29 марта 2010

Я пытаюсь нарисовать дождь и снег как система частиц , используя Core Graphics . В симуляторе рендеринг проходил нормально, но когда я запускаю свое приложение на реальном устройстве, рендеринг замедляется.

Итак, посоветуйте мне, пожалуйста, подходы для увеличения производительности рисования системы частиц на iPhone .

Может быть, я должен использовать OpenGL для этого или CoreAnimation ?

Ответы [ 3 ]

2 голосов
/ 29 марта 2010

OpenGL будет самым низким уровнем для рендеринга, поэтому должен предлагать наилучшую производительность (если все сделано правильно). CoreAnimation будет достаточно близко, если частиц не слишком много (точная цифра зависит от других факторов, но примерно до 50 должно быть в порядке). Когда вы говорите, что используете CoreGraphics на данный момент, вы имеете в виду, что вы перерисовываете на основе таймера? Если это так, то CoreAnimation определенно поможет вам - до тех пор, пока вы можете отделить каждую частицу в виде. Вы все еще можете использовать CoreGraphics для визуализации отдельных частиц.

Используете ли вы физический движок для расчета позиций?

2 голосов
/ 29 марта 2010

Если вы просто рисуете представление с помощью Core Graphics, а затем перерисовываете его каждый кадр, чтобы отразить движение частиц, вы увидите ужасную производительность (подробнее см. этот ответ ). Для анимации системы частиц вам понадобится OpenGL ES или Core Animation.

Моя рекомендация: CAReplicatorLayer , новый тип слоя Core Animation, добавленный в iPhone OS 3.0 и Snow Leopard. Я видел несколько впечатляющих систем частиц, созданных только с использованием этого типа одного слоя, без использования большого количества кода. См. Пример приложения ReplicatorDemo (для Mac, но основные концепции совпадают) или статью Джо Ричиоппо "To 1e100f и далее с CAReplicatorLayer" статья.

1 голос
/ 29 марта 2010

Трудно дать совет, практически не имея информации о вашей реализации. По моему опыту, одним из главных препятствий для iPhone является распределение памяти. Поэтому, если вы выделяете новые объекты для каждой порождаемой частицы, это будет первое, что вы, возможно, захотите исправить. (Выделите пул объектов и используйте их повторно.)

...