Signatur
Beschreibung
Die schreibgeschützte Eigenschaft index der Gamepad-Schnittstelle liefert eine ganze Zahl, die unter allen aktuell verbundenen Controllern eindeutig ist. Der Wert entspricht genau der Position des Geräts im Array, das navigator.getGamepads() zurückgibt.
Da Gamepad-Objekte in vielen Browsern (vor allem in Chromium) nur Momentaufnahmen sind, speichert man üblicherweise nicht das Objekt selbst, sondern nur seinen index. In jedem Frame der Spielschleife holt man dann mit navigator.getGamepads()[index] den aktuellen Zustand von Tasten und Achsen ab.
Typische Einsatzfälle sind Mehrspieler-Spiele (Spieler 1, Spieler 2 …), die Zuordnung von gamepadconnected- und gamepaddisconnected-Ereignissen zu bestimmten Spielern und das Aufräumen des eigenen Zustands, wenn ein Controller getrennt wird.
Rückgabewert
0, 1, …), die das Gerät für die Dauer seiner Verbindung eindeutig kennzeichnet.Beispiele
Index beim Verbinden auslesen
window.addEventListener('gamepadconnected', (event) => {
const { index, id } = event.gamepad;
console.log(`Gamepad #${index} verbunden: ${id}`);
});
Aktuellen Zustand pro Frame über den Index abfragen
let activeIndex = null;
window.addEventListener('gamepadconnected', (e) => {
activeIndex = e.gamepad.index;
requestAnimationFrame(loop);
});
const loop = () => {
if (activeIndex === null) return;
// Immer frisch holen – das Objekt ist oft nur eine Momentaufnahme
const pad = navigator.getGamepads()[activeIndex];
if (pad) {
const [x, y] = pad.axes;
if (pad.buttons[0].pressed) console.log('A gedrückt', x.toFixed(2), y.toFixed(2));
}
requestAnimationFrame(loop);
};
Spieler-Zuordnung in einem Mehrspieler-Spiel
const players = new Map(); // index -> Spielername
window.addEventListener('gamepadconnected', ({ gamepad }) => {
const name = `Spieler ${players.size + 1}`;
players.set(gamepad.index, name);
console.log(`${name} nutzt Controller ${gamepad.index}`);
});
window.addEventListener('gamepaddisconnected', ({ gamepad }) => {
console.log(`${players.get(gamepad.index)} hat die Verbindung verloren`);
players.delete(gamepad.index);
});
// Wichtig · Fallstricke
- Nicht dauerhaft: Der Index ist nur während der Verbindung eindeutig. Nach dem Trennen kann ein anderer (oder derselbe) Controller den frei gewordenen Index erhalten. Zum Wiedererkennen eines bestimmten Geräts eignet sich eher
Gamepad.id, das aber bei baugleichen Controllern identisch sein kann. - Lücken im Array:
navigator.getGamepads()kann an getrennten Positionennullenthalten (Chromium liefert zudem immer ein Array fester Länge). Vor dem Zugriff also stets aufnullprüfen. - Momentaufnahmen: In Chromium ändern sich gespeicherte
Gamepad-Objekte nicht – speichere denindexund frage den Zustand jedes Frame neu ab. - Kompatibilität/Sicherheit: Die Gamepad-API steht nur in sicheren Kontexten (HTTPS) zur Verfügung und kann per Permissions-Policy
gamepadeingeschränkt werden. Geräte werden oft erst nach einer ersten Tasteneingabe gemeldet.