Я делаю игру LibGDX (1.9.9), которая должна быть исправлена в ландшафтном режиме, но когда я запускаю ее на некоторых устройствах, она отображается в портретном режиме.
У меня протестировал его на нескольких физических и виртуальных устройствах в диапазоне от Android 4 до 11, а также на симуляторе iPhone через RoboVM (2.3.9). Это происходит на виртуальном планшете android (Android 11) и симуляторе iPhone. Он пару раз застревал в портретном режиме на физическом устройстве, но мне не удалось воспроизвести его. Я не мог понять, почему это могло быть.
У меня есть ландшафт (android: screenOrientation = "landscape"), установленный в android манифесте.
Gdx.input .getRotation () возвращает 90, когда он правильно установлен в альбомной ориентации, но 0, когда в портретной ориентации, поэтому, возможно, я могу попробовать проверить, равно ли он 0, и динамически изменить поворот, но я не смог узнать, как это сделать. .
Я пробовал обходной путь, где я проверяю, меньше ли ширина экрана высоты экрана, и поворачиваю камеру на 90 градусов, если это правда, чтобы поместить ее в альбомную ориентацию вручную, но это приводит к искажению камеры таким образом. показано ниже, хотя я знаю, что правильно изменил соотношение сторон для поворота.
Как камера искажается при попытке повернуть в альбомную ориентацию
Я использую OrthographicCamera без любые окна просмотра.
// Screen dimensions
width = ((float) Gdx.graphics.getWidth() / (float) Gdx.graphics.getHeight()) * GameSpecs.WORLD_HEIGHT;
height = GameSpecs.WORLD_HEIGHT;
System.out.println("width: " + width);
System.out.println("height: " + height);
System.out.println("orientation: " + Gdx.input.getNativeOrientation());
System.out.println("rotation: " + Gdx.input.getRotation());
// If showing portrait and needs to be rotated
rotateForProperLayout = width < height;
if (rotateForProperLayout) {
height = ((float) Gdx.graphics.getHeight() / (float) Gdx.graphics.getWidth()) * GameSpecs.WORLD_HEIGHT;
width = GameSpecs.WORLD_HEIGHT;
}
cam = new OrthographicCamera(width, height);
// Rotate camera to be in landscape
if (rotateForProperLayout) {
cam.rotate(-90);
}
cam.translate(cam.viewportWidth / 2f, cam.viewportHeight / 2f);
cam.update();
Мой Android Манифест ...
<?xml version="1.0" encoding="utf-8"?>