Signatur
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
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');
}
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 });
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));
}
// 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.enabledzur 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
nullsein, auch wenngamepad.poseexistiert. 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
gamepadbeschränkt sein. - Viele Controller liefern verrauschte Beschleunigungswerte. Glätte sie vor der Gestenerkennung, zum Beispiel mit einem gleitenden Mittelwert.