Android: 2D. OpenGl или android.graphics?

Я работаю с моим другом в нашей первой игре на Android. Основная идея заключается в том, что каждый кадр игры перерисовывает всю поверхность (1 большое растровое изображение) в 2 этапа:

  1. Фон с некоторым статическим изображением (PNG) вытирает предыдущий кадр
  2. Затем он посыпается большим количеством частиц, которые производят эффект мыльных пузырей, где есть пул из приблизительно 20 растровых изображений, которые случайно собираются, чтобы создать иллюзию, что все пузырьки (между 200 и 300) все разные. Позиции пузырьков обновляются на каждом кадре (~ 50 мс), создавая эффект движения пузырьков.

Математический движок находится в C (JNI), и в настоящее время весь рисунок выполняется с использованием пакета android.graphics очень похожи (так как это был пример, который я использовал) для Lunar Lander. Это работает, но анимация несколько отрывистая, и я чувствую температуру на моем телефоне, что она очень занята. Удастся ли нам перейти на OpenGL? И в качестве бонусного вопроса: что было бы хорошим способом оптимизировать механизм рисования (вроде Lunar Lander like), который у нас есть сейчас?

Solutions Collecting From Web of "Android: 2D. OpenGl или android.graphics?"

Теперь я начал работать с OpenGL ES, я бы также использовал его для 2D-графики. Этот способ является самым гибким, и он очень быстрый (посмотрите на этот примерный код . Это о 2D-рендеринге, и там вы можете увидеть силу OpenGL.

С самого начала это не самое простое, но есть хорошие учебные пособия – например, это очень хорошо.

Не перерисовывайте весь экран каждый раз. Это и приводит к низкой частоте кадров. Используйте метод invalidate для отметки областей, которые изменили каждый фрейм.