GamepadButton

GamepadButton 接口定义了在一个手柄或其他控制器的唯一的一个按键,允许访问不同控制器设备可用类型的按钮的当前状态。

GamepadButton 对象是由 Gamepad 接口的 buttons 属性返回的可查询任意值的数组返回的。

备注:上述情况是在 Firefox Gecko 28 及以上的;Chrome 和较早版本的 Firefox 访问此属性时仍然会返回一个双精浮点值的数组。

属性

GamepadButton.value 只读

一个用来表示按钮当前状态的双精浮点值,比如说许多现代控制器都有的扳机键。其值被规范至范围 0.0 —1.0 之间,其中 0.0 表示按钮没有被按下,而 1.0 表示按钮被完全按下 (按到底)。

GamepadButton.pressed 只读

一个指示当前按钮是被按下 (true) 还是没有被按下 (false) 的布尔值。

示例

接下来的代码来自于我 (文作者) 的 Gamepad API 按钮示例 (你可以在线查看示例,并在 Github 上查找源代码。) 注意代码分支——在 Chrome 中Navigator.getGamepads 需要一个 webkit 前缀并且按钮值被存储为一个双精浮点值的数组,然而在 Firefox 中 Navigator.getGamepads 不需要前缀,且按钮值被存储为 GamepadButton 对象数组;其中有我们需要的 GamepadButton.valueGamepadButton.pressed 属性,这取决于他们是什么类型的按钮。在这个简单的示例中我只是允许了它们。

js
function gameLoop() {
  if (navigator.webkitGetGamepads) {
    var 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 {
    var gp = navigator.getGamepads()[0];

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

  ball.style.left = a * 2 + "px";
  ball.style.top = b * 2 + "px";

  var start = rAF(gameLoop);
}

规范

Specification
Gamepad
# gamepadbutton-interface

浏览器兼容性

BCD tables only load in the browser

参见