游戏手柄:buttons 属性

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,在一些或所有支持的浏览器中。

Gamepad 接口的Gamepad.buttons 属性返回一个包含gamepadButton 对象的数组,这些对象表示设备上的按钮。

如果按钮未按下,数组中的每个条目为 0,如果按钮按下,则为非零值(通常为 1.0)。每个gamepadButton 对象有两个属性:pressedvalue

  • pressed 属性是一个布尔值,指示按钮当前是否按下 (true) 或未按下 (false)。
  • value 属性是一个浮点值,用于启用表示模拟按钮(例如许多现代游戏手柄上的扳机),值归一化为 0.0-1.0 范围,其中 0.0 表示未按下的按钮,1.0 表示完全按下的按钮。

gamepadButton 对象的数组。

示例

以下代码取自我的游戏手柄 API 按钮演示(您可以查看演示的实时版本,并在 GitHub 上找到源代码)。请注意代码分叉——在 Chrome 中,Navigator.getGamepads 需要 webkit 前缀,按钮值存储为双精度值的数组,而在 Firefox 中,Navigator.getGamepads 不需要前缀,按钮值存储为GamepadButton 对象的数组;我们需要访问的是GamepadButton.valueGamepadButton.pressed 属性,具体取决于按钮的类型。在这个简单的示例中,我只是允许两者。

js
function gameLoop() {
  let a = 0;
  let b = 0;
  if (navigator.webkitGetGamepads) {
    const gp = navigator.webkitGetGamepads()[0];

    if (gp.buttons[0] === 1) {
      b--;
    } else if (gp.buttons[1] === 1) {
      a++;
    } else if (gp.buttons[2] === 1) {
      b++;
    } else if (gp.buttons[3] === 1) {
      a--;
    }
  } else {
    const gp = navigator.getGamepads()[0];

    if (gp.buttons[0].value > 0 || gp.buttons[0].pressed) {
      b--;
    } else if (gp.buttons[1].value > 0 || gp.buttons[1].pressed) {
      a++;
    } else if (gp.buttons[2].value > 0 || gp.buttons[2].pressed) {
      b++;
    } else if (gp.buttons[3].value > 0 || gp.buttons[3].pressed) {
      a--;
    }
  }

  ball.style.left = `${a * 2}px`;
  ball.style.top = `${b * 2}px`;

  const start = rAF(gameLoop);
}

规范

规范
游戏手柄
# dom-gamepad-buttons

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅