Gamepad: buttons-Eigenschaft

Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.

Die Gamepad.buttons-Eigenschaft des Gamepad Interfaces gibt ein Array von gamepadButton-Objekten zurück, die die auf dem Gerät vorhandenen Tasten darstellen.

Jeder Eintrag im Array ist 0, wenn die Taste nicht gedrückt ist, und ungleich null (typischerweise 1.0), wenn die Taste gedrückt ist. Jedes gamepadButton-Objekt hat zwei Eigenschaften: pressed und value:

  • Die pressed-Eigenschaft ist ein boolescher Wert, der angibt, ob die Taste momentan gedrückt (true) oder ungedrückt (false) ist.
  • Die value-Eigenschaft ist ein Gleitkommawert, der verwendet wird, um analoge Tasten zu repräsentieren, wie zum Beispiel die Trigger auf vielen modernen Gamepads. Die Werte sind normalisiert im Bereich von 0.0 bis 1.0, wobei 0.0 eine Taste darstellt, die nicht gedrückt ist, und 1.0 eine Taste, die vollständig gedrückt ist.

Wert

Ein Array aus gamepadButton-Objekten.

Beispiele

Der folgende Code stammt aus meinem Gamepad API Button-Demo (Sie können sich das Demo live ansehen und den Quellcode auf GitHub finden). Beachten Sie den Code-Fork: In Chrome benötigt Navigator.getGamepads ein webkit Präfix und die Tastenwerte werden als Array von Double-Werten gespeichert, während in Firefox Navigator.getGamepads kein Präfix benötigt wird und die Tastenwerte als Array von GamepadButton-Objekten gespeichert werden; es sind die GamepadButton.value oder GamepadButton.pressed Eigenschaften dieser, auf die wir zugreifen müssen, je nachdem, welche Art von Tasten sie sind. In diesem einfachen Beispiel habe ich einfach beide zugelassen.

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

Spezifikationen

Specification
Gamepad
# dom-gamepad-buttons

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch