Start · Sprachen · JavaScript · Referenz · Gamepad.index

Gamepad.index

Eigenschaft

Schreibgeschützte Ganzzahl, die ein aktuell verbundenes Gamepad eindeutig kennzeichnet und seiner Position im Array von <code>navigator.getGamepads()</code> entspricht.

seit JavaScript Baseline: alle modernen Browser (Chrome 21+, Firef Kategorie: webapi

Signatur

Gamepad.index

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

Typ
number
Beschreibung
Nicht-negative Ganzzahl (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}`);
});
Gamepad #0 verbunden: Xbox 360 Controller (XInput STANDARD GAMEPAD)

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);
};
A gedrückt 0.12 -0.87

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);
});
Spieler 1 nutzt Controller 0 Spieler 2 nutzt Controller 1 Spieler 1 hat die Verbindung verloren

// 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 Positionen null enthalten (Chromium liefert zudem immer ein Array fester Länge). Vor dem Zugriff also stets auf null prüfen.
  • Momentaufnahmen: In Chromium ändern sich gespeicherte Gamepad-Objekte nicht – speichere den index und 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 gamepad eingeschränkt werden. Geräte werden oft erst nach einer ersten Tasteneingabe gemeldet.