Signatur
Beschreibung
Die Eigenschaft pressed eines GamepadButton-Objekts zeigt an, ob die Taste gerade gedrückt ist. Die Tasten eines Controllers bekommt man über das Array gamepad.buttons, das man wiederum über navigator.getGamepads() erhält.
Bei digitalen Tasten (A/B/X/Y, Schultertasten, Steuerkreuz) entspricht pressed einfach dem Zustand der Taste. Bei analogen Tasten wie den Triggern (Index 6 und 7 im Standard-Mapping) gibt es zusätzlich GamepadButton.value mit einem Wert zwischen 0.0 und 1.0. Ab welcher Schwelle pressed auf true springt, hängt vom Browser bzw. Gerät ab.
Die Gamepad API arbeitet mit Polling: Es gibt kein Ereignis für einzelne Tastendrücke. Man fragt den Zustand deshalb in jedem Frame ab, typischerweise in einer Schleife mit requestAnimationFrame(). Wenn man den Zustand des vorherigen Frames speichert, kann man Flanken erkennen, also den Moment, in dem eine Taste gerade gedrückt oder gerade losgelassen wird.
Rückgabewert
true, wenn die Taste gerade gedrückt ist, sonst false. Die Eigenschaft ist schreibgeschützt.Beispiele
Zustand der A-Taste abfragen
window.addEventListener('gamepadconnected', (event) => {
const pad = navigator.getGamepads()[event.gamepad.index];
// Index 0 = untere Aktionstaste (A bzw. Kreuz) im Standard-Mapping
console.log('A gedrückt:', pad.buttons[0].pressed);
});
Spielschleife mit Erkennung von Drücken und Loslassen
let previous = [];
const loop = () => {
// Zustand jedes Frame neu abfragen, da die Objekte Momentaufnahmen sein können
const pad = navigator.getGamepads().find(Boolean);
if (pad) {
pad.buttons.forEach((button, i) => {
const wasPressed = previous[i] ?? false;
if (button.pressed && !wasPressed) console.log(`Taste ${i} gedrückt`);
if (!button.pressed && wasPressed) console.log(`Taste ${i} losgelassen`);
});
previous = pad.buttons.map((b) => b.pressed);
}
requestAnimationFrame(loop);
};
requestAnimationFrame(loop);
Analogen Trigger mit eigener Schwelle auswerten
const isFiring = (pad) => {
const trigger = pad.buttons[7]; // rechter Trigger (RT/R2)
// pressed hängt vom Browser ab; mit value lässt sich die Schwelle selbst festlegen
return trigger.pressed || trigger.value > 0.3;
};
const pad = navigator.getGamepads().find(Boolean);
if (pad) console.log('Feuern:', isFiring(pad));
// Wichtig · Fallstricke
- Momentaufnahme: In Chrome sind die
Gamepad-Objekte Schnappschüsse. Man mussnavigator.getGamepads()deshalb in jedem Frame neu aufrufen. Wer eine alte Referenz aufbewahrt, sieht einen veraltetenpressed-Wert. - Kein Tasten-Ereignis: Einen Tastendruck erkennt man nur durch Polling.
gamepadconnectedundgamepaddisconnectedmelden lediglich, ob ein Controller verbunden oder getrennt wurde. - Aktivierung durch den Nutzer: Viele Browser melden einen Controller erst, wenn auf ihm eine Taste gedrückt wurde. Vorher liefert
getGamepads()leere Einträge (null). - Mapping: Die Indizes sind nur dann verlässlich, wenn
gamepad.mapping === 'standard'ist. Bei anderen Controllern kann die Belegung abweichen. - Sicherer Kontext: Neuere Browser stellen die Gamepad API nur über HTTPS bereit. Außerdem kann eine Permissions Policy (
gamepad) den Zugriff in iframes sperren. - Soll eine Taste nur berührt, aber nicht gedrückt werden (bei manchen Controllern möglich), ist
GamepadButton.toucheddie passende Eigenschaft.