Вторник, 2024-03-19, 1:28 PM

Поиск
Меню
Категории раздела
Поддержи проект!
Рекомендуем


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

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

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

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

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

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

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

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

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

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

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

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);