Когда и когда не следует использовать CoreAnimation - PullRequest
1 голос
/ 30 декабря 2010

При программировании для iPhone, когда лучше использовать CoreAnimation поверх другого API (и наоборот)?OpenGL обладает более общим набором функций (будучи таким же низкоуровневым).CoreAnimation намного проще в настройке и имеет такие функции, как кеширование.

Я делаю игру (2D), и в ней много физики.Я действительно хочу, чтобы эта игра работала со скоростью не менее 50 FPS, предпочтительно 60 (или что-то еще, что нужно, чтобы не отставать от vsync).Я не знаю, как использовать анимацию в этом случае, но я могу разбить все на спрайты / CALayers.Я буду устанавливать их положение и вращать каждый кадр (может быть, только видимые).Многие из спрайтов идентичны.Некоторые из этих спрайтов будут менять цвета в каждом кадре.Я не буду использовать много изображений, но я буду использовать много градиентов.

Итак, CoreAnimation будет оптимизацией или узким местом?Когда лучше всего использовать CoreAnimation и когда лучше всего использовать другие API?

1 Ответ

4 голосов
/ 31 декабря 2010

Core Animation позволяет вам многое делать с минимальным количеством кода.Это делает управление 2-D слоями и их анимацией относительно простым.Поскольку анимации обрабатываются для вас, даже если они содержат сложные пути или временные кривые, вам не нужно писать код для обновления отображения каждого кадра или для расчета анимации анимации.Core Animation также прекрасно интегрируется с возможностями двумерного рисования, имеющимися в Quartz, с собственными элементами интерфейса Cocoa Touch и обработкой касания, а также с вашим кодом Objective-C в других местах вашего приложения.

Если вы используете платформукак и предполагалось, вы можете добиться очень хороших результатов.В моих тестах на моем старом iPhone первого поколения я смог одновременно анимировать 50 полупрозрачных слоев на экране со скоростью около 60 кадров в секунду.Однако это происходит с заранее заданными линейными путями для каждого слоя заранее и без прерывания анимации.

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

Еще одно потенциальное преимущество OpenGL ES заключается в том, что он довольно независим от платформы, поэтому вы можете построить рендер так, чтобы онможет быть легко перенесен с iPhone на Android, на рабочий стол и т. д.

В целом, я рекомендовал сначала обратиться к Core Animation, чтобы посмотреть, сможет ли он делать то, что вы хотите, потому что вы сможетесоздать приложение намного быстрее, таким образом.Если это не подходит, и вы собираетесь делать 2-D игру, возможно, cocos2d будет хорошим путем.Я сам не использовал фреймворк, но слышал, что он упрощает процесс работы над двумерной OpenGL ES.Только если ни один из этих подходов не подходит, вы должны перейти к OpenGL ES.

Если вам интересно, я расскажу о Core Animation и OpenGL ES в видео для моего курса на iTunes U , где вы можете просмотреть и посмотреть, что нужно для работы в любой среде.

...