此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。
GamepadButton
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2017年3月.
* Some parts of this feature may have varying levels of support.
GamepadButton 接口定义了在一个手柄或其他控制器的唯一的一个按键,允许访问不同控制器设备可用类型的按钮的当前状态。
GamepadButton 对象是由Gamepad 接口的buttons 属性返回的可查询任意值的数组返回的。
备注:上述情况是在 Firefox Gecko 28 及以上的;Chrome 和较早版本的 Firefox 访问此属性时仍然会返回一个双精浮点值的数组。
In this article
属性
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.value 或GamepadButton.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);}规范
| Specification |
|---|
| Gamepad> # gamepadbutton-interface> |