0

在我的情况下,我在 Xinput 模式下使用 Logitech F310(它有一个开关可以在 DirectInput 和 Xinput 之间进行选择)。我写了一个小应用程序,它读取游戏手柄的轴值。事实证明,右侧模拟摇杆使用轴MotionEvent.AXIS_RXMotionEvent.AXIS_RY而两个肩部模拟触发器使用轴MotionEvent.AXIS_ZMotionEvent.AXIS_RZ

但根据文档AXIS_Z 和 AXIS_RZ 应该用于正确的模拟摇杆:

公共静态最终 int AXIS_RZ

轴常数:运动事件的 Z 旋转轴。

对于操纵杆,报告关于 Z 轴的绝对旋转角度。该值被标准化为从 -1.0(逆时针)到 1.0(顺时针)的范围。在带有两个模拟操纵杆的游戏手柄上,该轴通常被重新解释为报告第二个操纵杆的绝对 Y 位置。

这是游戏中的一个问题,它不提供重新映射游戏手柄的按钮和模拟摇杆的选项。例如 GTA San Andreas 认为这两个模拟触发器是正确的模拟摇杆。但由于触发器的中性值在未按下时为 -1 而不是 0,就像模拟摇杆处于中性状态一样,相机不断旋转。(此游戏中使用右侧模拟摇杆移动相机)

轴映射保存在哪里?它是在游戏手柄中硬编码的吗?还是在 Linux 设备子系统中分配?或者可能在 android InputDevice 框架内?如果是这样,它可以改变吗?

另一种可能的解决方案是拦截事件调度程序和接收应用程序之间的 MotionEvents 并更改轴值。在android中这或类似的可能吗?甚至可能在较低级别:通过 root 访问,可以从 /dev/input/event6 设备(在我的情况下 event6 是游戏手柄)读取原始输入数据。是否可以用调整后的轴值不断覆盖这个文件?

4

1 回答 1

1

您需要 root 访问权限。在这里您可以找到不同设备的配置 /system/usr/keylayout 您可以手动创建新配置以支持所需设备的本机支持并将其写入此文件夹。您可以使用 KeyTest 应用程序从您的设备检查密钥代码。您还可以复制现有配置并为您的设备和您的密钥代码进行编辑。

于 2016-12-09T23:11:08.463 回答