Libgdx, установка полного разрешения экрана во время выполнения заставляет приложение рендериться на неправильный размер - PullRequest
1 голос
/ 25 мая 2019

Я пользуюсь только настольным приложением, но не мобильным.

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

Я использую настройки для сохранения режима, выбранного пользователем. Я не могу получить доступ к настройкам перед методом Create в моем классе Game или в объекте DesktopLauncher, где вы обычно настраиваете файл конфигурации и передаете его в приложение. Так что мой DesktopLauncher выглядит следующим образом.

val config = Lwjgl3ApplicationConfiguration()
config.setFullscreenMode(Lwjgl3ApplicationConfiguration.getDisplayMode())
Lwjgl3Application(MainGame(), config)

Я использую текущее разрешение экрана при создании приложения. Затем в моем методе Create в моем классе MainGame я получаю режим, который они устанавливают, из настроек, и я устанавливаю его так ...

override fun create() {
    var modes = Gdx.graphics.displayModes.toList()
    val mode = Gdx.graphics.displayMode   

    val preference: Preferences = Gdx.app.getPreferences("screenPreference")
    val screenWidth = preference.getInteger("width", mode.width)
    val screenHeight = preference.getInteger("height", mode.height)
    val refreshRate = preference.getInteger("refreshRate", mode.refreshRate)

    modes = modes.filter { it.width == screenWidth }
    modes = modes.filter { it.height == screenHeight }
    modes = modes.filter { it.refreshRate == refreshRate }

    if (modes.isNotEmpty()) {
        Gdx.graphics.setFullscreenMode(modes[0])
    }
    ....
}

Чтобы подвести итог, я получаю список режимов, я выбираю из настроек то, что было установлено последним, и фильтрую список в соответствии с тем, что было в настройках. Это должно оставить один пункт в списке, и я применю его. Если по какой-либо причине список пуст, то я не устанавливаю его, или нет никаких настроек, я просто применяю текущий режим снова.

Здесь происходят странные вещи. Я проверил все числа при создании моих экранов и камер, и все они верны. Я получаю правильное разрешение, но приложение не отображается правильно. Ниже приведено несколько примеров того, что происходит.

small to large

На первом изображении вы видите границы приложения на экране. Мое приложение отображается только в нижнем углу, а остальное черное. Чтобы добиться этого эффекта, я запустил приложение с меньшим разрешением, чем у моего собственного разрешения, например 1280x1024, затем в своем методе создания я установил полноэкранный режим приложения на 1920x1080, прежде чем создавать остальную часть своего приложения. Я проверил свои камеры и мои окна просмотра, и все они имеют разрешение 1920x1080, но изображение не заполняет весь экран.

и второй.

enter image description here

Это то, что происходит, когда я меняю настройки. Итак, я начинаю с собственного разрешения 1920x1080, и в моем методе создания я установил его на 1280x1024, снова перед созданием остальной части моего приложения. Это дает мне черные полосы по обеим сторонам изображения, как и ожидалось от id, но приложение ОГРОМНОЕ, и только часть из них помещается в окне, остальное выходит за границы, как показано пунктирными линиями.

Так будет продолжаться все время, пока я не изменю разрешение во время работы приложения, а затем исправлю себя до конца жизни приложения.

Меня смущает этот эффект, который я получаю, и я ищу ответ на вопрос, почему или как это исправить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...