2

我正在使用无法正常工作的 Gamepad API“gamepadconnected”功能。但是,“gamepaddisconnected”功能出于某种原因起作用。连接我的蓝牙控制器后,控制台中没有显示任何内容,但是,它确实显示了断开连接时显示的信息。

我在这里拥有的是非常基本和标准的:

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

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

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

4

2 回答 2

4

MDN 声明“如果在页面加载时游戏手柄已经连接,那么当用户按下按钮或移动轴时,gamepadconnected 事件将被调度到焦点页面。”。gamepadconnected因此,当您连接 pad 时,您的页面不会总是收到事件。https://developer.mozilla.org/en-US/docs/Web/API/Gamepad_API/Using_the_Gamepad_API

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

于 2017-06-25T06:51:31.753 回答
1

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

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

至于传统的操纵杆(比如我使用了 10 年的 Microsoft Sidewinder Pro USB),它们有它们自己的乐趣可以扔给你。我目前正在努力使其他合理的代码与其中的怪异一起工作,例如将 GamePad 对象中的轴属性分配给,等待它,帽子开关,在此设备上是数字数据源,而不是模拟一。当您坚持使用 GamePad API 时,请注意在 W3C 最终确定标准之前,一股兼容性问题正在向您袭来。

于 2017-07-27T04:45:04.660 回答