Покадровая анимация iOS с Quartz

Я работаю над игрой для iPhone, в которой используется только двухмерная анимация одного объекта на основе перевода. Этот объект является подклассом UIView и отрисовывается с помощью Quartz-2D. Перевод в настоящее время выполняется NSTimer, который отмечает каждый кадр и сообщает UIView изменить свое местоположение.

Однако есть довольно сложная математика, которая стоит за определением, куда UIView должен двигаться в следующем кадре. Тестирование игры на симуляторе iOS работает нормально, но при тестировании на iPhone определенно кажется, что кадры пропускаются.

Мой вопрос таков: мой метод перевода кадра за кадром просто плохой метод? Я знаю, что OpenGL чаще используется для игр, но мне кажется позором настраивать OpenGL для такой простой анимации. Тем не менее, стоит ли это хлопот?


person pinerd314159    schedule 30.07.2011    source источник


Ответы (2)


Трудно сказать, не зная, какая сложная математика используется для расчета переводов. Использование OpenGL для этого имеет смысл только в том случае, если графический процессор действительно является узким местом. Я подозреваю, что это не так, но вы должны проверить, какие части вызывают пропуск кадров.

Как правило, UIView и CALayer реализуются поверх OpenGL, поэтому при анимации перевода UIView уже используется графический процессор.

Кстати, использование CADisplayLink вместо NSTimer, вероятно, было бы лучше для игрового цикла.

person omz    schedule 30.07.2011
comment
CADisplayLink - хорошая идея, спасибо. Что касается узкого места, я почему-то забыл о том, что на самом деле есть еще одна анимация, которая в основном представляет собой серию строк, обновляющих каждый кадр. Я понимаю, что это, что сейчас делается с помощью Quartz, вероятно, является узким местом и должно быть сделано в OpenGL. - person pinerd314159; 31.07.2011

Проблема с симулятором iPhone в том, что он имеет доступ к тем же ресурсам, что и ваш Mac. ОЗУ вашего Mac, видеокарта и т. Д. Я бы посоветовал открыть tools.app, который поставляется с iPhone SDK, и использовать шаблон CoreAnimation, чтобы посмотреть, как управляются ваши ресурсы. Вы также можете посмотреть на распределение, чтобы увидеть, не мешает ли это таран. CPU тоже может помочь.

tl; dr iPhone sim использует вашу оперативную память Mac и карту GFX. Попробуйте взглянуть на последовательность в инструментах, чтобы увидеть, есть ли задержка.

person Tim Davies    schedule 30.07.2011