我可以设置JavaScript以立即开始轮询连接的游戏手柄吗?

问题描述

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

是否有一种方法可以防止这种情况的发生,使得游戏手柄的第一个事件也被捕获?在进行任何交互以捕获将推动初始网页组织的“开始状态/配置”之前,是否还可以抢占游戏手柄的状态?

解决方法

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

通过注册连接了游戏手柄的侦听器,可以在游戏手柄首次暴露于页面时获得初始状态。 gamepadconnected事件具有一个gamepad属性,该属性保存当前游戏板的状态:

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