Start · Sprachen · JavaScript · Referenz · GamepadPose.angularAcceleration

GamepadPose.angularAcceleration

Eigenschaft

Schreibgeschützte Eigenschaft, die die Winkelbeschleunigung eines Gamepads als <code>Float32Array</code> mit drei Werten (x, y, z) liefert oder <code>null</code>, wenn keine Daten vorliegen.

seit JavaScript Experimentell: Gamepad Extensions (nur Firefox hin Kategorie: webapi

Signatur

GamepadPose.angularAcceleration

Beschreibung

GamepadPose.angularAcceleration gibt die aktuelle Winkelbeschleunigung eines Controllers als dreiteiligen Vektor [x, y, z] zurück. Er beschreibt, wie schnell sich die Drehgeschwindigkeit um die jeweilige Achse ändert. MDN gibt die Einheit mit „Meter pro Sekunde zum Quadrat“ an. Laut Spezifikation der Gamepad Extensions handelt es sich aber um eine Winkelgröße in Radiant pro Sekunde zum Quadrat (rad/s²).

Auf das GamepadPose-Objekt greifst du über gamepad.pose zu. Das Gamepad-Objekt kommt aus navigator.getGamepads(). Typische Einsatzfälle sind VR-Controller und bewegungsempfindliche Eingabegeräte. Dort hilft der Wert, Drehbewegungen vorauszuberechnen (Prädiktion), um Latenz auszugleichen, oder schnelle Schwenkgesten zu erkennen.

Die Eigenschaft ist null, wenn das Gerät keine Winkelbeschleunigung meldet. Prüfe deshalb vorher pose.hasOrientation und den Wert selbst. Gamepad-Zustände liest du am besten in jedem Frame neu aus, zum Beispiel in einer requestAnimationFrame-Schleife. In manchen Browsern sind die gelieferten Objekte nämlich Momentaufnahmen.

Rückgabewert

Typ
Float32Array | null
Beschreibung
Ein Float32Array mit drei Werten [x, y, z] für die Winkelbeschleunigung in rad/s², oder null, wenn das Gerät keine Daten liefert.

Beispiele

Winkelbeschleunigung des ersten Controllers auslesen

const [gamepad] = navigator.getGamepads().filter(Boolean);

if (gamepad?.pose?.angularAcceleration) {
  const [x, y, z] = gamepad.pose.angularAcceleration;
  console.log(`Winkelbeschleunigung: x=${x.toFixed(2)} y=${y.toFixed(2)} z=${z.toFixed(2)} rad/s²`);
} else {
  console.log('Keine Winkelbeschleunigung verfügbar');
}
Winkelbeschleunigung: x=0.12 y=-1.40 z=0.03 rad/s²

Schnelle Schwenkgeste in der Render-Schleife erkennen

const SCHWELLE = 30; // rad/s²

const loop = () => {
  for (const pad of navigator.getGamepads()) {
    const acc = pad?.pose?.angularAcceleration;
    if (!acc) continue;

    const betrag = Math.hypot(acc[0], acc[1], acc[2]);
    if (betrag > SCHWELLE) {
      console.log(`Schwenkgeste an Controller ${pad.index} (${betrag.toFixed(1)} rad/s²)`);
    }
  }
  requestAnimationFrame(loop);
};

window.addEventListener('gamepadconnected', () => requestAnimationFrame(loop), { once: true });
Schwenkgeste an Controller 0 (42.7 rad/s²)

Winkelgeschwindigkeit für Prädiktion vorausberechnen

// Winkelgeschwindigkeit in dt Sekunden abschätzen: ω' = ω + α · dt
const predictAngularVelocity = (pose, dt) => {
  const w = pose.angularVelocity;
  const a = pose.angularAcceleration;
  if (!w) return null;
  if (!a) return Array.from(w);
  return Array.from(w, (wert, i) => wert + a[i] * dt);
};

const pad = navigator.getGamepads().find(p => p?.pose);
if (pad) {
  console.log(predictAngularVelocity(pad.pose, 0.016));
}
[0.51, -0.22, 0.04]

// Wichtig · Fallstricke

  • Kompatibilität: Die Eigenschaft gehört zu den experimentellen Gamepad Extensions und wurde mit WebVR eingeführt. In Firefox steht sie nur hinter dem Flag dom.gamepad.extensions.enabled zur Verfügung, Chrome und Safari unterstützen sie nicht. In produktivem Code solltest du sie nicht verwenden. Für VR/AR nutzt du besser die WebXR Device API (XRPose.angularVelocity, XRInputSource).
  • Einheit: Die Angabe „m/s²“ in älteren Dokumentationen ist irreführend. Es handelt sich um eine Winkelbeschleunigung in rad/s².
  • Nullwerte: Der Wert kann null sein, auch wenn gamepad.pose existiert. Prüfe ihn immer, bevor du ihn destrukturierst.
  • Sichere Umgebung: Die Gamepad API kann auf einen sicheren Kontext (HTTPS) und in iframes auf die Permissions Policy gamepad beschränkt sein.
  • Viele Controller liefern verrauschte Beschleunigungswerte. Glätte sie vor der Gestenerkennung, zum Beispiel mit einem gleitenden Mittelwert.