0

我想在 xbox one 控制器上收听按钮按下事件,但似乎对此的许多解决方案都是实验性的并且正在开发中。我发现的大多数显示如何从游戏手柄接收输入的示例都使用轮询方法来重复检查游戏手柄的事件,但对于我的应用程序来说,我可以记录按钮按下的确切时间是至关重要的,而我没有想要在扫描游戏手柄之间错过按钮按下。

我可以使用 Firefox 或 Chrome,但我还没有在这两种浏览器中使用以下解决方案:

Firefox:根据此页面https://www.chromestatus.com/feature/5989275208253440#,“游戏手柄按钮和轴事件在 Firefox 中实现在 flag 后面dom.gamepad.non_standard_events.enabled”。我已在 Firefox 中启用此功能,但收听状态更改事件(如https://www.smashingmagazine.com/2015/11/gamepad-api-in-web-games/所述)仍然无效。

Chrome:这个 github 页面https://github.com/MozillaReality/gamepad-plus/blob/master/README.md看起来它可以扩展 Gamepad API,所以我也可以在 Chrome 中监听按钮按下事件,但是当我尝试使用npm run build我得到错误node_modules_missing并且构建失败将JavaScript编译为独立模块。

我很感激有关如何启用.addEventListener('gamepadbuttondown'... 在这些浏览器中的任何一个中工作的建议。

4

1 回答 1

0

感谢 Christopher Van Wiemeersch 在https://codepen.io/cvan/pen/aOzgGE上的一个 codepen 示例,我在 Firefox 中找到了解决方案。

首先,我打开一个 Firefox 浏览器(版本 73.0.1)并输入about:configURL。然后我切换dom.gamepad.non_standard_events.enabled到true。

然后我使用了 Christopher's codepen 中的以下函数/侦听器:

var gamepadConnected = function (e) {
  console.log('Gamepad connected at index %d: %s. %d buttons, %d axes.',
    e.gamepad.index, e.gamepad.id, e.gamepad.buttons.length, e.gamepad.axes.length);
};

var gamepadDisconnected = function (e) {
  console.log('Gamepad removed at index %d: %s.', e.gamepad.index, e.gamepad.id);
};


var gamepadButtonDown = function (e) {
  console.log('Gamepad button down at index %d: %s. Button: %d.',
    e.gamepad.index, e.gamepad.id, e.button);
};

var gamepadButtonUp = function (e) {
  console.log('Gamepad button up at index %d: %s. Button: %d.',
    e.gamepad.index, e.gamepad.id, e.button);
};
window.addEventListener('gamepadconnected', gamepadConnected);
window.addEventListener('gamepaddisconnected', gamepadDisconnected);

window.addEventListener('gamepadbuttondown', gamepadButtonDown);
window.addEventListener('gamepadbuttonup', gamepadButtonUp);

然后,当按下按钮时,我使用var timestamp = new Date().getTime().

于 2020-03-04T15:56:11.793 回答