2016-10-04 9 views
3

Мой код выглядит следующим образом:Ориентация всегда приводит к портрету (Motion Controls в libgdx)

Input.Orientation orientation = Gdx.input.getNativeOrientation(); 
message = ""; 
switch (orientation) { 
    case Landscape: 
     message += "Landscape\n"; 
     break; 
    case Portrait: 
     message += "Portrait\n"; 
     break; 
    default: 
     message += "Whatever\n"; 
} 

Приведенный выше код (внутри метод отрисовки) всегда указывает на то, что устройство находится в портретном режиме, даже когда я вращать устройство! Что я делаю не так? Как я могу точно определить, находится ли устройство в режиме «Портрет» или «Пейзаж»?

ответ

4

getNativeOrientation() не возвращает текущую ориентацию устройства, он возвращает что-то вроде того, является ли экран ландшафтом или портретом, когда вы держите его должным образом (на большинстве телефонов он должен возвращать портрет, но я думаю, что на планшетах и ​​телефонах, таких как HTC ChaCha возвращает пейзаж).

Есть несколько способов, чтобы получить текущую ориентацию:

  • Рекомендуется: Используйте Gdx.input.getRotation() возвращающее вращение устройства в градусах (0, 90, 180, 270) по отношению к его родной ориентации. Используйте его с getNativeOrientation(), и вы должны иметь возможность получить правильную ориентацию для всех устройств.

Примечание: оно дает вам ориентацию текущего состояния приложения, а не ориентацию устройства как физического объекта. Поэтому, если в вашем манифесте есть android:screenOrientation="landscape", этот метод всегда будет возвращать пейзаж.

Пример использования:

int rotation = Gdx.input.getRotation(); 
if((Gdx.input.getNativeOrientation() == Input.Orientation.Portrait && (rotation == 90 || rotation == 270)) || //First case, the normal phone 
     (Gdx.input.getNativeOrientation() == Input.Orientation.Landscape && (rotation == 0 || rotation == 180))) //Second case, the landscape device 
    Gdx.app.log("Orientation", "We are in landscape!"); 
else 
    Gdx.app.log("Orientation", "We are in portrait"); 
  • Создать интерфейс на родной стороне (Android), передать его в игре.

  • Если вы используете это в качестве контроля, может быть, вы должны использовать accelerometer или gyroscope вместо