首页 > 解决方案 > 我可以设置 JavaScript 以立即开始轮询连接的游戏手柄吗?

问题描述

正如 Mozilla Docs for the JavaScript GamePad API中所记录的那样,浏览器只有在用户以某种方式与手柄交互(即按下按钮或移动轴)时才真正开始从游戏手柄捕获事件。然后浏览器将以忽略第一个事件为代价开始捕获事件。

有没有办法防止这种情况发生,以至于游戏手柄的第一个事件也被捕获?是否也可以在任何交互之前获取游戏手柄的状态以捕获将推动初始网页组织的“起始状态/配置”?

标签: javascriptbrowserdom-eventshidgamepad

解决方案


您如何阅读游戏手柄状态?我不确定您所说的“以忽略第一个事件为代价”是什么意思。Gamepad API 不会为按钮或轴输入生成事件,您必须轮询 navigator.getGamepads() 以获取新数据。

您可以通过注册 gamepadconnected 侦听器来获取游戏手柄首次暴露于页面时的初始状态。gamepadconnected 事件有一个保存当前游戏手柄状态的游戏手柄属性:

window.addEventListener('gamepadconnected', e => {
  // e.gamepad is the current state when the gamepad was connected.
  console.log(e.gamepad.buttons[0].value);
});

推荐阅读