我遇到了一个问题,无法让游戏手柄正常工作。Windows 的输入设备系统总是让我感到困惑,但经过一番研究,我总结出了以下内容:
- XInput 是 DirectX 中用于游戏手柄输入的最新/最广泛使用的 API
- DirectInput 是一个较旧的 API,不太流行/使用(因为 XInput 更容易且设置更快)
- XInput 仅支持 Xbox 控制器(Xbox 360 和 Xbox One)
- DirectInput 支持所有类型的输入设备,包括通用的 HID 兼容游戏手柄和 Xbox 控制器(尽管功能不如 XInput 那么多,但如耳机支持)
我的问题涉及获取蓝牙游戏手柄(亚马逊 Fire TV 游戏控制器) 才能在 Windows 游戏上使用。显然,由于它不是 Xbox 360 控制器,因此要让它在仅支持 XInput 的游戏上运行,需要采取变通方法。这个项目似乎几乎完美地完成了这个任务,因为它使所有输入设备能够模拟 Xbox360 输入,从而使它们与 XInput 兼容。
但是,我遇到了一些问题,我不知道这是谁的错,也不知道该如何解决。一个问题是 L/R 触发器根本无法检测到。进入“设备和打印机”菜单并单击我的控制器的“游戏控制器设置”,我可以通过这个熟悉的屏幕测试输入:
按下扳机键不会产生任何反应。此外,如果你注意到,有 15 个输入按钮。这是正确的,因为我正在测试的控制器确实有 15 个按钮,但其中 4 个按钮是媒体按钮,它们可以自行控制操作系统。例如,按下控制器上的主页按钮将打开我的互联网浏览器并带我进入我的主页。按下其他媒体按钮似乎没有任何作用。
我的问题是:
我该如何让触发器工作?这是驱动程序问题吗?我以为符合 HID 标准的设备应该可以正常工作。如果 Windows 检测到所有 15 个按钮、两个模拟摇杆和一个方向键,为什么它无法检测到两个触发器?符合 HID 标准的游戏手柄不支持模拟触发器吗?或者这是控制器本身或 Windows 游戏手柄驱动程序的错误/问题?
我如何控制设备上的 4 个媒体按钮?游戏手柄上有一个可以打开互联网浏览器的按钮,这很没用,也很烦人。
如果确实需要自定义驱动程序,是否可以自己编写一个,而无需与制造商联系或获得制造商的帮助?
谢谢!
答案1
您对 directInput 与 Xinput 的区别的理解是正确的,尽管有人可能会认为 directInput api 允许更多样化的控制。如果您有一个注册为 directInput 设备的控制器,并且您的游戏只接受 Xinput,我建议使用 x360ce (@http://www.x360ce.com/)。这会将 directInput 转换为游戏的 Xinput,同时屏蔽控制器的实际输入。只需在游戏目录中运行 x360ce.exe 并按照 x360ce 网站的说明进行操作即可。不幸的是,它并不兼容所有游戏,也可能与您的控制器不兼容。不过值得一试,只是之后一定要给 x360ce 的开发人员留下反馈。希望这对您有所帮助!
答案2
我知道原始海报早已消失,但我仍想补充一点。
Fire Gamepad 以及大量最初为与 Android 系统交互而构建的通用蓝牙游戏手柄的主要问题是,Windows 端的 DirectInput 驱动程序无法准确表示手柄输入。请参阅这里举个例子
我认为通用 Windows 驱动程序仅包含所需的 6 个模拟轴中的 4 个(对于 Nyko Playpad,每个触发器都采用一个轴)。缺少一个可以与 HTML5 Gamepad API 之类的原始 API 进行接口的工具(例如 Gamepad 测试人员),x360ce 和类似的设备将无法完成这项工作,因为它们从 DirectInput 实例中获取控制器的视图。