Советы по поддержке нескольких экранов в 2D-игре opengl?

Вопрос о поддержке нескольких экранов был задан до смерти, но я не видел много дискуссий в отношении разработки игр (с hitboxes, проверкой столкновений и т. Д.).

В настоящее время моя игра работает в режиме совместимости, создавая очень плохие визуальные эффекты на более высоких конечных устройствах из-за масштабирования. Я ищу советы и рекомендации по тому, что сделали другие, чтобы их графика игр выглядела хорошо во всех размерах экрана.

У разработчиков есть 2 копии каждого ресурса (средняя и высокая плотность) или ресурсы с высокой плотностью, просто уменьшенные для устройств с более низкой плотностью?

В ваших расчетах используются пиксели, не зависящие от плотности?

У разработчиков есть 2 копии каждого ресурса (средняя и высокая плотность) или ресурсы с высокой плотностью, просто уменьшенные для устройств с более низкой плотностью?

Это один из способов обработки вещей, я видел следующее:

  1. Включить растровые изображения для каждого разрешения, которое вы хотите поддержать.
  2. Включите растровые изображения для максимального разрешения, которое вы хотите поддержать, и уменьшите масштаб для других разрешений.
    • Если вы используете табличный лист (т. Е. Несколько небольших растровых изображений в более крупном растровом изображении), вам нужно быть осторожным с двухлинейной фильтрацией, то есть смешением краевых пикселей со смежными активами. Если это произойдет, вы получите линии / артефакты в своих активах. Здесь обсуждается: http://developer.anscamobile.com/forum/2011/06/03/lines-between-my-tiles относительно этой проблемы.
  3. Используйте векторную графику для максимального разрешения, которое вы хотите поддержать.

При использовании метода 2. или 3. это так, как я его обрабатываю:

  • Создайте целевые объекты с размером экрана 960 x 1600.
  • 480 x 800 – шкала пополам
  • 320 x 400 – масштаб на одну треть

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

Я предпочитаю метод 3.

В настоящее время я работаю над изометрическим 2d игровым движком, который загружает активы .svg с диска, а затем «рисует их в растровое изображение» во время «загрузки» части сцены. Выполняя это, я получаю преимущества небольшого размера на диске (.svg) и более высокую производительность (растровые изображения) во время игры.

Рабочий процесс выглядит следующим образом:

  1. Анализ необходимого игрового актива для уровня
  2. Связанный с нагрузкой ресурс .vv с диска
  3. Нарисуйте содержимое .svg в растровое изображение
  4. Отбросьте загруженный .svg
  5. Повторите все активы
  6. Начальный уровень

В ваших расчетах используются пиксели, не зависящие от плотности?

Да, я использую его следующим образом:

sprite.x = new_x_position * screen_density; 

Многие разработчики включают в себя две копии ресурсов или загружают копии с высоким разрешением при первом запуске. Если они загружаются при первом запуске, то они не используют диспетчер ресурсов Android для них.