Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

Это не самая легкая вещь для начала, но есть хорошие учебные пособия - например, это очень хорошо.

Ответ 2

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