Accelerometer-Eingabe

Flash Player 10.1 und höher, Adobe AIR 2 und höher

Die Accelerometer-Klasse setzt Ereignisse ab, die auf einer vom Bewegungssensor des Geräts erkannten Aktivität basieren. Diese Daten repräsentieren die Position des Geräts oder die Bewegung entlang einer dreidimensionalen Achse. Wenn das Gerät bewegt wird, erkennt der Sensor diese Bewegung und gibt die Beschleunigungskoordination des Geräts zurück. Die Accelerometer-Klasse bietet Methoden zum Abfragen, ob ein Beschleunigungsmesser unterstützt wird, und zum Festlegen der Rate, mit der Beschleunigungsereignisse ausgelöst werden.

Die Achsen des Beschleunigungsmessers werden in Bezug auf die Ausrichtung der Anzeige normalisiert, nicht in Bezug auf die Ausrichtung des Geräts. Wenn die Anzeige auf dem Gerät neu ausgerichtet wird, werden auch die Achsen des Beschleunigungsmessers neu ausgerichtet. Deshalb verläuft die y-Achse immer mehr oder weniger vertikal, wenn der Benutzer das Gerät in einer normalen, aufrechten Anzeigeposition hält, unabhängig davon, in welche Richtung das Telefon gedreht wird. Wenn die automatische Ausrichtung deaktiviert ist (beispielsweise wenn der SWF-Inhalt im Browser im Vollbildmodus angezeigt wird), werden die Achsen des Beschleunigungsmessers beim Drehen des Geräts nicht neu ausgerichtet.

Überprüfen der Accelerometer-Unterstützung

Mithilfe der Accelerometer.isSupported-Eigenschaft können Sie überprüfen, ob die Laufzeitumgebung dieses Funktionsmerkmal unterstützt:

if (Accelerometer.isSupported) 
{ 
    // Set up Accelerometer event listeners and code. 
}

Die Accelerometer-Klasse und ihre Mitglieder stehen in den Laufzeitversionen zur Verfügung, die für die jeweiligen API-Einträge aufgelistet sind. Die jeweils aktuelle Umgebung zur Laufzeit bestimmt jedoch, ob dieses Funktionsmerkmal verfügbar ist. So können Sie beispielsweise Code mit den Eigenschaften der Accelerometer-Klasse für Flash Player 10.1 kompilieren, aber Sie müssen mit der Accelerometer.isSupported-Eigenschaft überprüfen, ob das Accelerometer-Funktionsmerkmal auf dem Endgerät zur Verfügung steht. Wenn Accelerometer.isSupported zur Laufzeit den Wert true hat, wird Accelerometer zurzeit unterstützt.

Erkennen von Accelerometer-Änderungen

Zur Verwendung des Sensors für den Beschleunigungsmesser instanziieren Sie ein Accelerometer-Objekt und registrieren Sie die von diesem Objekt ausgelösten update-Ereignisse. Das update-Ereignis ist ein Accelerometer-Ereignisobjekt. Das Ereignis hat vier Eigenschaften, bei denen es sich jeweils um Zahlen handelt:

  • accelerationX – Beschleunigung entlang der x-Achse, gemessen in G. Die x-Achse verläuft von der linken zur rechten Seite des Geräts, wenn es sich in der aufrechten Position befindet. (Das Gerät befindet sich in der aufrechten Position, wenn die Oberseite des Geräts nach oben zeigt.) Die Beschleunigung ist positiv, wenn das Gerät sich nach rechts bewegt.

  • accelerationY – Beschleunigung entlang der y-Achse, gemessen in G. Die y-Achse verläuft von der unteren zur oberen Seite des Gerät, wenn es sich in der aufrechten Position befindet. (Das Gerät befindet sich in der aufrechten Position, wenn die Oberseite des Geräts nach oben zeigt.) Die Beschleunigung ist positiv, wenn sich das Gerät in Relation zu dieser Achse nach oben bewegt.

  • accelerationZ – Beschleunigung entlang der z-Achse, gemessen in G. Die z-Achse verläuft senkrecht zur Oberfläche des Geräts. Die Beschleunigung ist positiv, wenn Sie das Gerät so halten, dass seine Oberseite nach oben zeigt. Die Beschleunigung ist negativ, wenn die Oberseite des Geräts zum Boden zeigt.

  • timestamp – Die Anzahl der Millisekunden seit der Initialisierung der Laufzeitumgebung bis zum Auftreten des Ereignisses.

1 g ist die Standardbeschleunigung aufgrund der Schwerkraft, ungefähr 9,8 m/s2..

Im Folgenden sehen Sie ein einfaches Beispiel zur Anzeige von Daten des Beschleunigungsmessers in einem Textfeld:

var accl:Accelerometer; 
if (Accelerometer.isSupported) 
{ 
    accl = new Accelerometer(); 
    accl.addEventListener(AccelerometerEvent.UPDATE, updateHandler); 
} 
else 
{ 
    accTextField.text = "Accelerometer feature not supported"; 
} 
function updateHandler(evt:AccelerometerEvent):void 
{ 
    accTextField.text = "acceleration X: " + evt.accelerationX.toString() + "\n" 
            + "acceleration Y: " + evt.accelerationY.toString() + "\n" 
            + "acceleration Z: " + evt.accelerationZ.toString() 
}

Bevor Sie diesen Code verwenden können, müssen Sie das accTextField-Textfeld erstellen und der Anzeigeliste hinzufügen.

Sie können das gewünschte Zeitintervall für Ereignisse des Beschleunigungsmessers anpassen, indem Sie die setRequestedUpdateInterval()-Methode für das Accelerometer-Objekt aufrufen. Diese Methode akzeptiert einen Parameter, interval. Dies ist das angeforderte Aktualisierungsintervall in Millisekunden:

var accl:Accelerometer; 
accl = new Accelerometer(); 
accl.setRequestedUpdateInterval(1000);

Die tatsächliche Zeitspanne zwischen Aktualisierungen des Beschleunigungsmessers kann größer oder kleiner als dieser Wert sein. Änderungen am Aktualisierungsintervall betreffen alle registrierten Listener. Wenn Sie die setRequestedUpdateInterval()-Methode nicht aufrufen, werden die Aktualisierungen in der Anwendung gemäß dem Standardintervall des Geräts durchgeführt.

Die Accelerometer-Daten sind nicht hundertprozentig genau. Sie können einen gleitenden Mittelwert der neuesten Daten verwenden, um Ungenauigkeiten auszugleichen. Im folgenden Beispiel werden beispielsweise kürzlich erhaltene Daten des Beschleunigungsmessers bei den aktuellen Daten berücksichtigt, um ein gerundetes Ergebnis zu erhalten:

var accl:Accelerometer; 
var rollingX:Number = 0; 
var rollingY:Number = 0; 
var rollingZ:Number = 0; 
const FACTOR:Number = 0.25; 
 
if (Accelerometer.isSupported) 
{ 
    accl = new Accelerometer(); 
    accl.setRequestedUpdateInterval(200); 
    accl.addEventListener(AccelerometerEvent.UPDATE, updateHandler); 
} 
else 
{ 
    accTextField.text = "Accelerometer feature not supported"; 
} 
function updateHandler(event:AccelerometerEvent):void 
{ 
    accelRollingAvg(event); 
    accTextField.text = rollingX + "\n" +  rollingY + "\n" + rollingZ + "\n"; 
} 
 
function accelRollingAvg(event:AccelerometerEvent):void 
{ 
    rollingX = (event.accelerationX * FACTOR) + (rollingX * (1 - FACTOR)); 
    rollingY = (event.accelerationY * FACTOR) + (rollingY * (1 - FACTOR)); 
    rollingZ = (event.accelerationZ * FACTOR) + (rollingZ * (1 - FACTOR)); 
}

Ein solcher gleitender Mittelwert wird jedoch nur bei einem kurzen Aktualisierungsintervall des Beschleunigungsmessers empfohlen.