Gamepad API" gamepadconnected"不工作

时间:2017-06-24 11:04:20

标签: javascript gamepad gamepad-api

我正在使用Gamepad API" gamepadconnected"功能不正常。然而,"游戏手柄已连接"功能因某种原因而起作用。连接我的蓝牙控制器后,控制台中没有显示任何内容,但是,它确实显示断开连接时显示的信息。

我在这里的内容非常基本和标准:

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

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

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

2 个答案:

答案 0 :(得分:3)

MDN声明"如果在加载页面时游戏手柄已经连接,则当用户按下按钮或移动轴时,游戏手柄连接事件将被分派到聚焦页面。"。因此,当您连接打击垫时,您的页面将不会始终收到{{1}}事件。 https://developer.mozilla.org/en-US/docs/Web/API/Gamepad_API/Using_the_Gamepad_API

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

答案 1 :(得分:1)

Chrome是臭名昭着的(在使用它之后肯定对我来说!)因为它,我们应该说,个人实现GamePad API。一个问题是,据我所知,它还没有支持游戏手柄连接"强大的事件,你必须轮询GamePad对象的gamePadConnected属性,以便做任何有关连接和断开连接的事情。我知道的总痛苦,但这可能反映了这个API的W3C标准仍在不断变化的事实。您还会发现存在其他问题,例如Windows上的浏览器X与Linux上的浏览器X的行为不同。

我不知道是否有人试图将这些设备插入到Android或iOS设备中(除非您计划在其上安装航班,否则可能会对使用触摸屏的设备的要求多余。 !),但我怀疑如果执行这些实验会出现更多的兼容性问题。如果您有能力潜入带有USB端口的Android智能手机,并在智能手机浏览器中修改JavaScript,您可能会发现更多热闹的问题。

至于传统操纵杆(例如我10岁的Microsoft Sidewinder Pro USB),那些人都有自己的欢闹声。我目前正在努力使其他合理的代码工作与其奇怪,例如GamePad对象中的轴属性被分配,等待它,帽子开关,在这个设备上是一个数字数据源,而不是一个模拟的。在W3C最终确定标准之前,请注意随着游戏手柄API坚持不懈的兼容性问题。