Я пользуюсь только настольным приложением, но не мобильным.
Я экспериментирую с тем, чтобы позволить пользователю установить разрешение экрана во время выполнения. Я даю ему доступные режимы отображения, и он применяет один. Эта часть действительно работает. Проблема возникает, когда я сохраняю этот режим и пытаюсь установить этот режим отображения при следующем запуске игры.
Я использую настройки для сохранения режима, выбранного пользователем. Я не могу получить доступ к настройкам перед методом 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])
}
....
}
Чтобы подвести итог, я получаю список режимов, я выбираю из настроек то, что было установлено последним, и фильтрую список в соответствии с тем, что было в настройках. Это должно оставить один пункт в списке, и я применю его. Если по какой-либо причине список пуст, то я не устанавливаю его, или нет никаких настроек, я просто применяю текущий режим снова.
Здесь происходят странные вещи. Я проверил все числа при создании моих экранов и камер, и все они верны. Я получаю правильное разрешение, но приложение не отображается правильно. Ниже приведено несколько примеров того, что происходит.
На первом изображении вы видите границы приложения на экране. Мое приложение отображается только в нижнем углу, а остальное черное. Чтобы добиться этого эффекта, я запустил приложение с меньшим разрешением, чем у моего собственного разрешения, например 1280x1024, затем в своем методе создания я установил полноэкранный режим приложения на 1920x1080, прежде чем создавать остальную часть своего приложения. Я проверил свои камеры и мои окна просмотра, и все они имеют разрешение 1920x1080, но изображение не заполняет весь экран.
и второй.
Это то, что происходит, когда я меняю настройки. Итак, я начинаю с собственного разрешения 1920x1080, и в моем методе создания я установил его на 1280x1024, снова перед созданием остальной части моего приложения. Это дает мне черные полосы по обеим сторонам изображения, как и ожидалось от id, но приложение ОГРОМНОЕ, и только часть из них помещается в окне, остальное выходит за границы, как показано пунктирными линиями.
Так будет продолжаться все время, пока я не изменю разрешение во время работы приложения, а затем исправлю себя до конца жизни приложения.
Меня смущает этот эффект, который я получаю, и я ищу ответ на вопрос, почему или как это исправить.