In den aktuellsten Version von AIR und des Flash Playera gibt es die neue Klasse Accelerometer. Diese ermöglicht es, den Beschleunigungssensor eines Geräts auszulesen. Im folgenden eine kurze Einführung samt Beispiel, wie dies mit ActionScript funktioniert.

Accelerometer-Demo

Zuerst ein Video eines kleinen Beispiels (Quellcode unten). Je nach Haltung des Geräts wird ein Rechteck, das zentriert auf der Bildschirmmitte platziert wurde, in die entsprechende Ausrichtung des Devices skaliert.

Accelerometer verfügbar?

Zuerst sollte man überprüfen, ob auf der aktuellen Laufzeitumgebung überhaupt ein Accelerometer verfügbar ist und auf diesen zugegriffen werden kann.

Dies geschieht mit der Eigenschaft Accelerometer.isSupported. Liefert diese Eigenschaft true zurück, kann der Beschleunigungsmesser verwendet werden.

Event-Listener am Accelerometer registrieren

Um den Beschleunigungssensor auszuwerten, erstellt man zuerst eine neue Instanz des Klasse flash.sensors.Accelerometer (verfügbar ab AIR 2 oder Flash Player 10.1).

Danach registriert man einen Event-Listener für das Event AccelerometerEvent.UPDATE.

Actionscript:
  1. if (Accelerometer.isSupported) {
  2.   var accelerometer:Accelerometer = new Accelerometer();
  3.   accelerometer.addEventListener(AccelerometerEvent.UPDATE, onAccelerometerUpdate);
  4. }

Auswerten der 3 Achsen

Das AccelerometerEvent liefert die 3 Achsen, die ausgewertet werden können.

  • accelerationX
  • accelerationY
  • accelerationZ

Ausgangslage ist das Gerät, wenn es hochkant vor einem auf dem Tisch liegt.

Die x-Achse ist dann von links nach rechts. Die y-Achse läuft von unten nach oben. Die z-Achse ist senkrecht zur Geräteoberfläche (also ob man die Vorder- oder Rückseite des Geräts sieht).

Die Einheit der Werte ist 1 g (g = 9,81 m/s hoch 2), also die Einheit der Schwerkraft/Schwerebeschleunigung. Die entstehenden Werte, wenn man das Gerät normal in der Hand hält und dreht, schwanken somit zwischen -1 und 1.

Quellcode

Der Quellcode zum obigen Video setzt lediglich ein zentriertes Rechteck mit dem Instanznamen rect und ein Textfeld voraus. Das Rechteck hat die halbe Breite und Höhe der Bildschirmauflösung.

Actionscript:
  1. rect.scaleX = 0;
  2. rect.scaleY = 0;
  3.  
  4. if (Accelerometer.isSupported) {
  5.   var accelerometer:Accelerometer = new Accelerometer();
  6.   accelerometer.addEventListener(AccelerometerEvent.UPDATE, onAccelerometerUpdate);
  7. }
  8.  
  9. function onAccelerometerUpdate(evt:AccelerometerEvent):void {
  10.     var str:String = "x: " + evt.accelerationX;
  11.     str += "\ny: " + evt.accelerationY;
  12.     str += "\nz: " + evt.accelerationZ;
  13.     acc_text.text = str + "\n";
  14.  
  15.     rect.scaleX = -evt.accelerationX;
  16.     rect.scaleY = evt.accelerationY;   
  17. }

Hier noch ein Screenshot der Anwendung.

Link: Accelerometer (Flash-Doku)
Link: Accelerometer-Eingabe (Flash-Doku)