Покадровая анимация iOS с Quartz - PullRequest
0 голосов
/ 30 июля 2011

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

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

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

Ответы [ 2 ]

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

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

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

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

0 голосов
/ 30 июля 2011

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

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

...