Акселерометр

libGDX фреймворк поддерживает работу с акселерометром, который измеряет ускорение устройства по трем осям (по крайней мере, на Android). Из этого ускорения можно получить наклон или ориентацию устройства.

Ускорение измеряется в метрах на секунду в квадрате (м/сек2). Если ось направлена ​​к центру Земли, это ускорение будет примерно 10 м/сек2. Если ось указывает в противоположном направлении, то ускорение будет -10 м/сек2.

Оси в Android устройстве могут быть настроены следующим образом:

Оси акселерометра в Android устройстве

К сожалению, эта конфигурация отличается для планшетов. Android устройства имеют так называемое понятие ориентация по умолчанию. Для телефонов, портретный режим (как в изображении выше) является ориентацией по умолчанию. Для планшетов, ландшафтный режим является ориентацией по умолчанию. Устройство с ландшафтной ориентацией по умолчанию имеет свои повороты осей так, что Y-ось направлена ​​вверх к меньшей стороне устройства и X-ось направлена вправо к более широкой стороне.

libGDX заботится об этом и представляет настройку акселерометра, как показано на изображении выше, независимо от ориентации устройства по умолчанию (положительная Z-ось направлена из экрана, положительная X-ось направлена вправо к меньшей стороне устройства, положительная Y-ось направлена вверх к широкой стороне устройства).

Проверка наличия акселерометра

Различные устройства Android имеют разные конфигурации оборудования. Проверка, имеет ли устройство акселерометр, может быть выполнена следующим образом:

boolean available = Gdx.input.isPeripheralAvailable(Peripheral.Accelerometer);

Запрос текущей/естественной ориентации

Если ваша libGDX игра должна знать о текущей ориентации устройства, то можно использовать getOrientation() метод:

int orientation = Gdx.input.getOrientation();

Этот код вернет значение 0, 90, 180 или 270, что дает вам разницу между углом текущей ориентации и естественной ориентации.

Естественной ориентацией является портретный режим (как на рисунке выше), или ландшафтный режим (в основном для планшетов). Ее можно запросить следующим образом:

Orientation nativeOrientation = Gdx.input.getNativeOrientation();

Этот код возвращает либо Orientation.Landscape или Orientation.Portrait.

Чтение показаний акселерометра

Показания акселерометра могут быть доступны в libGDX только через опрашивание.

float accelX = Gdx.input.getAccelerometerX();
float accelY = Gdx.input.getAccelerometerY();
float accelZ = Gdx.input.getAccelerometerZ();

Платформы или устройства, которые не имеют поддержки акселерометра, вернут ноль.

Смотрите игру Super Jumper для демонстрации использования акселерометра.

Матрица вращения

Если вы хотите использовать ориентацию устройства для визуализации, то работа с матрицей вращения может быть полезной. Смотрите о матрице вращения. Вы можете включить полученную матрицу непосредственно в OpenGL визуализацию:

Matrix4 matrix = new Matrix4();
Gdx.input.getRotationMatrix(matrix.val);