如何切换Android游戏手柄的轴?

时间:2014-05-28 18:04:14

标签: android gamepad gamepad-api

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

但根据Documentation AXIS_Z和AXIS_RZ应该用于正确的模拟棒:

  

public static final int AXIS_RZ

     

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

     

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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