游戏手柄:buttons 属性
Gamepad
接口的Gamepad.buttons
属性返回一个包含gamepadButton
对象的数组,这些对象表示设备上的按钮。
如果按钮未按下,数组中的每个条目为 0,如果按钮按下,则为非零值(通常为 1.0)。每个gamepadButton
对象有两个属性:pressed
和 value
。
pressed
属性是一个布尔值,指示按钮当前是否按下 (true
) 或未按下 (false
)。value
属性是一个浮点值,用于启用表示模拟按钮(例如许多现代游戏手柄上的扳机),值归一化为 0.0-1.0 范围,其中 0.0 表示未按下的按钮,1.0 表示完全按下的按钮。
值
gamepadButton
对象的数组。
示例
以下代码取自我的游戏手柄 API 按钮演示(您可以查看演示的实时版本,并在 GitHub 上找到源代码)。请注意代码分叉——在 Chrome 中,Navigator.getGamepads
需要 webkit
前缀,按钮值存储为双精度值的数组,而在 Firefox 中,Navigator.getGamepads
不需要前缀,按钮值存储为GamepadButton
对象的数组;我们需要访问的是GamepadButton.value
或GamepadButton.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 的浏览器中加载。