Масштабирование ха-приложения для сетчатки на iPad

У меня есть приложение KHA, которое отлично работает на iPad2 (1024/768px).

Когда я запускаю тот же проект на более позднем iPad Mini с 2048/1516. Мои координаты в два раза меньше, что имеет смысл.

Поэтому, когда я удваиваю все размеры моих объектов и GFX, он будет работать на iPad mini, но будет слишком большим для iPad2.

Я изучил backbuffer и renderTarget, как описано здесь: https://www.youtube.com/watch?v=OV1PTo5XSCA

В khafile также есть опция windowSize, которая, похоже, ничего не делает.

Поверхностные x и y coodinates всегда, кажется, входят в реальные экранные coodrdinates устройства.

Каков наилучший способ написать независимое от разрешения приложение?

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

1 ответ

Решение

Согласно https://github.com/Kode/Kha/wiki/Screen-Size-and-Scaling существует автоматическое масштабирование для некоторых целей. Если вам нужны другие цели, вы должны вручную масштабировать все по размеру экрана.

На странице упоминается использование этого класса для задачи: https://github.com/Kode/Kha/blob/master/Sources/kha/Scaler.hx

Также вы можете посмотреть, как это делает Wyngine: https://github.com/laxa88/wyngine/search?utf8=%E2%9C%93&q=scale & https://github.com/laxa88/wyngine/blob/master/Wyngine.hx

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

  • набор для восстановления сетчатки (например, iPad 3)
  • разрешение по умолчанию (например, iPad 2) установлено на половину размера сетчатки
  • низкое разрешение установлено для дешевых устройств Android?

При запуске вашего приложения вы проверяете размер экрана. Вы используете это, чтобы выбрать внутренний размер игры и набор графики, который наилучшим образом соответствует фактическому разрешению экрана. Внутренний размер игры, а также все позиции X/Y для выбранного набора графики можно рассчитать, применяя масштабный коэффициент наборов графики к необработанным базовым значениям.

Наконец, вы используете Scale.scale() для масштабирования вашей игры от внутреннего размера игры до устройств, таких как iPad pro 12"и широкого спектра устройств Android.

Такой подход распространен во многих игровых движках, Google должен найти вам ссылки, такие как https://v-play.net/doc/vplay-different-screen-sizes/ которые также объясняют соотношение экрана и способы их обработки.

Другие вопросы по тегам