Как поменять оси андроид геймпада?
В моем случае я использую Logitech F310 в режиме Xinput (он имеет переключатель для выбора между DirectInput и Xinput). Я написал небольшое приложение, которое считывает значения осей геймпада. Оказывается, правый аналоговый джойстик использует ось MotionEvent.AXIS_RX
а также MotionEvent.AXIS_RY
в то время как два аналоговых триггера плеча используют ось MotionEvent.AXIS_Z
а также MotionEvent.AXIS_RZ
,
Но согласно документации AXIS_Z и AXIS_RZ должны использоваться для правильного аналогового джойстика:
публичный статический финал int AXIS_RZ
Постоянная оси: Z Ось вращения события движения.
Для джойстика сообщает абсолютный угол поворота вокруг оси Z. Значение нормализуется в диапазоне от -1,0 (против часовой стрелки) до 1,0 (по часовой стрелке). На игровых площадках с двумя аналоговыми джойстиками эту ось часто интерпретируют, чтобы вместо этого сообщать абсолютную позицию Y второго джойстика.
Это проблема в играх, в которых нет вариантов переназначения кнопок и аналоговых джойстиков геймпадов. Например, GTA San Andreas считает, что два аналоговых триггера - это правильный аналоговый джойстик. Но так как нейтральное значение триггера, когда он не нажат, равно -1 вместо 0, как это было бы с аналоговым джойстиком в нейтральном состоянии, камера постоянно вращается. (в игре используется правый аналоговый джойстик)
Где сохраняется отображение оси? Это сложно в жестком коде внутри геймпада? Или это назначено в подсистеме устройства Linux? Или, может быть, в рамках Android InputDevice Framework? Если так, это может быть изменено?
Другим возможным решением может быть перехват MotionEvents между диспетчером событий и принимающим приложением и изменение значений осей. Возможно ли это или что-то подобное в Android? Может быть, даже на более низком уровне: с правами суперпользователя можно читать необработанные входные данные с устройства /dev/input/event6 (в моем случае event6 - это геймпад). Можно ли постоянно перезаписывать этот файл с настроенными значениями осей?
1 ответ
Вам нужен root-доступ. Здесь вы можете найти конфиги для разных устройств /system/usr/keylayout. Вы можете вручную создать новый конфиг для собственной поддержки нужного устройства и записать его в эту папку. Вы можете проверить коды клавиш с вашего устройства с приложением KeyTest. Также вы можете скопировать существующий конфиг и отредактировать его для своего устройства и ваших кодов клавиш.