Пригодность использования Core Animation на iOS по сравнению с использованием Cocos2D и OpenGL ES?

Я закончил учебник по игре прорыва в книге, но мяч, который является Изображение размером 20x20 пикселей пропускало кадры и двигалось не очень плавно. Так обстоит дело с симулятором, а также с iPhone 4S (настоящий). Код не использовал NSTimer (что может быть медленнее), но использовал CADisplayLink и UIImageView setFrame для анимации.

Core Animation на iOS не очень подходит для игр типа анимации разработки? Скажите, если это игра

  1. Захватчики (Space Invaders)
  2. Breakout (как игра в учебнике)
  3. Арканоид
  4. Angry Birds / Cut the Rope / Фруктовый ниндзя

Подходит ли Core Animation для игр такого типа для написания (2) выше? Для пунктов (1), (3) и (4) больше подходят Cocos2D или OpenGL ES. И производительность Cocos2D и OpenGL ES очень близка. Это правда?


person nonopolarity    schedule 19.04.2012    source источник


Ответы (2)


На Cocos2D часто обращают внимание из-за простоты программирования общей игровой логики, такой как обнаружение столкновений и анимации спрайтов, покадровый просмотр, масштабирование и другие процессы, которые довольно распространены при разработке игр, когда вы объединяете несколько анимаций, затем объединяете, упорядочивайте их, перезванивайте и т. д. Это одно из больших преимуществ двигателя.

Однако производительность - другое. Cocos предлагает пакетные узлы, которые объединяют все графические элементы в один вызов OpenGL, вместо того, чтобы «рисовать» каждый на экране отдельно в каждом кадре; это может значительно повысить производительность, особенно для больших изображений. Если бы у вас был пропуск кадров, интересно, были бы пакетные спрайты в Cocos недостающим звеном.

Я очень впечатлен Core Animation и хочу надеяться, что он сможет справиться с проблемами производительности в играх. Насколько я понимаю, CA, как и Cocos, также построен на основе OpenGL ES, поэтому я ожидаю, что удастся достичь хороших результатов в любом из них. Возможно, сделать это в Cocos проще просто потому, что он был разработан и оптимизирован для внутренней разработки игр.

person johnbakers    schedule 20.04.2012

Если у вас возникают проблемы с производительностью с 2D-приложением, это, вероятно, вызвано отсутствием понимания того, как получить наиболее эффективные результаты от CoreGraphics, в отличие от того, что исправит переход на OpenGL. 2D-игра будет отлично работать с CoreGraphics, вам просто нужно начать с правильного подхода. Во-первых, вам не следует заново рендерить весь вид при каждом обратном вызове CADisplayLink. Вместо этого настройте UIView, который содержит несколько объектов CALayer. Установите слой следующим образом: CALayer.contents = (id) cgImage, а затем позвольте системе позаботиться о его рендеринге при изменении элементов x, y или анимации. Вам просто нужно расположить элементы и определить анимацию, которая перемещает элементы. При таком подходе система будет кэшировать анимированное изображение на видеокарте за кулисами и перерисовывать с использованием операций графического процессора.

person MoDJ    schedule 15.06.2013