GamepadButton
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2017.
Интерфейс GamepadButton
определяет отдельную кнопку геймпада или другого контроллера, позволяя получить доступ к текущему состоянию различных типов кнопок, доступных на устройстве
Объект GamepadButton
возвращается путём получения любого элемента в массиве buttons
, который является свойством интерфейса Gamepad
.
Свойства
-
Значение с плавающей точкой, указывающее на текущее состояние аналоговых кнопок, таких как триггеры на многих современных геймпадах. Значение нормализованное к диапазону 0.0-1.0, где 0.0 означает, что клавиша не нажата совсем, 1.0 - нажата полностью.
-
Значение
Boolean
указывает, нажата ли кнопка (true
) или не нажата (false
).
Пример
Приведённый код взят из моего (автора статьи) демо Gamepad API button (вы можете Посмотреть демо, и посмотреть исходники на 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 = window.requestAnimationFrame(gameLoop);
}
Спецификации
Specification |
---|
Gamepad # gamepadbutton-interface |
Совместимость с браузерами
BCD tables only load in the browser