GamepadButton - 定义了游戏手柄或其他控制器的单个按钮

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

通过查询 Gamepad 接口的 buttons 属性返回的数组的值,可以返回 GamepadButton 对象。

注意:Firefox Gecko 28 及更高版本上面的情况;访问该属性时,Chrome 和早期版本的 Firefox 则会返回一个 double 值数组。

属性

GamepadButton.value 只读

一个双精度值,用于表示模拟按钮当前状态,例如许多现代游戏手柄上的触发器。这些值标准化为范围 0.0-1.0,其中 0.0 表示未按下的按钮,1.0 表示完全按下的按钮。

GamepadButton.pressed 只读

一个布尔值,指示按钮当前是按下(true)还是未按下(false)。

实例

以下代码取自我的 Gamepad API 按钮演示(您可以在 Github 上查看在线演示查找源代码。)注意代码在 Chrome 中,Navigator.getGamepads 需要使用 webkit 前缀,按钮值存储为 double 值数组,而在 Firefox 中,Navigator.getGamepads 不需要前缀,按钮值存储为 GamepadButton 对象的数组;我们需要访问的 GamepadButton.valueGamepadButton.pressed 属性,具体取决于它们的按钮类型。

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);
};

规范

规范 状态 备注
Gamepad
GamepadButton 的定义
工作草案 初始定义

桌面浏览器兼容性

特性 Chrome Edge Firefox Internet Explorer Opera Safari
基础支持

35

21 — 34 webkit

支持

29

24 — 28

不支持

22

15 — 21 webkit

不支持
pressed

35

21 — 34 webkit

12

29

24 — 28

不支持

22

15 — 21 webkit

不支持
value

35

21 — 34 webkit

12

29

24 — 28

不支持

22

15 — 21 webkit

不支持
touched 未知 未知 未知 未知 未知 未知

移动浏览器兼容性

特性 Android Chrome for Android Edge mobile Firefox for Android IE mobile Opera Android iOS Safari
基础支持 不支持 支持 支持 32 未知 不支持 不支持
pressed 不支持 支持 支持 32 未知 不支持 不支持
value 不支持 支持 支持 32 未知 不支持 不支持
touched 未知 未知 未知 未知 未知 未知 未知

相关链接

使用 Gamepad API