游戏手柄 API "gamepadconnected" 不工作

Gamepad API "gamepadconnected" not working

我正在使用无法正常工作的游戏手柄 API "gamepadconnected" 功能。但是,"gamepaddisconnected" 函数出于某种原因起作用。连接我的蓝牙控制器后,控制台中没有显示任何内容,但是,它会显示断开连接时显示的信息。

我这里的是非常基础和标准的:

window.addEventListener("gamepadconnected", function(e) {
  console.log("Controller connected");
});

window.addEventListener("gamepaddisconnected", function(e) {
  console.log("Controller disconnected");
});

我在这里错过了什么?哪里出错了?我确保第一个焦点页面是带有上面脚本的页面。感谢您的帮助。

MDN 指出 "If a gamepad is already connected when the page loaded, the gamepadconnected event is dispatched to the focused page when the user presses a button or moves an axis."。因此,当您连接 pad 时,您的页面不会总是收到 gamepadconnected 事件。 https://developer.mozilla.org/en-US/docs/Web/API/Gamepad_API/Using_the_Gamepad_API

所以最好例如让用户按下一个按钮来启动您的应用程序。当有多个游戏手柄连接到计算机并且您的应用程序必须知道使用哪一个时,这也很有用。

Chrome 臭名昭著(在使用它之后对我来说肯定是这样!),我们可以说,它是 GamePad API 的 个人 实现。一个问题是,据我所知,它还没有可靠地支持 "gamepadconnected" 事件,你必须轮询 GamePad 对象的 gamePadConnected 属性 才能做任何明智的事情连接和断开。我知道这很痛苦,但这可能反映了这个 API 的 W3C 标准仍在不断变化的事实。您还会发现还有其他问题,例如 Windows 上的浏览​​器 X 与 Linux.

上的浏览​​器 X 表现不同

我不知道是否有人尝试过将这些设备插入 Android 或 iOS 设备(除非您打算转机,否则对带触摸屏的设备的要求可能是多余的sim to there!),但我怀疑如果进行这些实验,将会出现更多的兼容性问题。如果您有能力使用带有 USB 端口的 Android 智能手机,并在智能手机浏览器中修改 JavaScript,您可能会发现更多有趣的问题。

至于老式操纵杆(比如我的 10 年前的 Microsoft Sidewinder Pro USB),它们有自己的欢闹之处。我目前正在努力使其他合理的代码与其怪异一起工作,例如 GamePad 对象中的轴 属性 被分配给,等待它,帽子开关,在这个设备上是一个数字数据源,不是模拟的。当您坚持使用 GamePad API,直到 W3C 最终确定标准时,请注意兼容性问题的浪潮正向您袭来。