Общая эффективность графики iOS - PullRequest
2 голосов
/ 02 июля 2011

Я работаю над простой программой, в которой 500 "частиц" имеют координаты x и y. Они перемещаются по экрану и реагируют на прикосновения. Когда я пробегаю 500 частиц, приложение начинает работать намного медленнее. Используя сэмплер ЦП, я обнаружил, что рисование частиц занимает больше всего времени ЦП.

Это код чертежа:

CGContextSetFillColorWithColor(context, [UIColor colorWithRed:red/255 green:green/255 blue:blue/255 alpha:1].CGColor);
CGRect rectangle = CGRectMake(xpos,ypos,9,9);
CGContextAddEllipseInRect(context, rectangle);
CGContextFillPath(context);

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

Так меня научили использовать Кварц, и он отлично работает для большинства рисунков, но этот код выполняется 500+ раз, и игра начинает замедляться. Я запустил программу с сэмплером ЦП с закомментированным кодом чертежа, и ЦП практически не используется, несмотря на все математические операции в фоновом режиме.

Есть ли более эффективный способ рисовать круги в iOS?

Ответы [ 2 ]

2 голосов
/ 02 июля 2011

Вы можете попробовать два разных подхода, чтобы помочь ускорить производительность ...

  • Используйте предварительно визуализированный UIImage / CGImage вместо точек (не даст вам возможности динамически изменять цвета / размеры, номожет быть, вам нужен только ограниченный диапазон для вашего приложения)
  • Используйте OpenGL, GL_POINTS

Кварц обычно медленнее, чем OpenGL, особенно для рисования на основе траектории из всех исследований, которые я провелайфон.Обратитесь к форумам разработчиков IPhone, и вы увидите общее мнение по этому поводу.

1 голос
/ 03 июля 2011

Создание слоя (CALayer) для каждой частицы может иметь смысл. В общем, рисование «себя» в -drawRect: путь к медлительности на iOS. Избегайте этого, если это вообще возможно.

...