Accelerometer in Flash und AIR

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.

[as]
if (Accelerometer.isSupported) {
var accelerometer:Accelerometer = new Accelerometer();
accelerometer.addEventListener(AccelerometerEvent.UPDATE, onAccelerometerUpdate);
}
[/as]

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.

[as]
rect.scaleX = 0;
rect.scaleY = 0;

if (Accelerometer.isSupported) {
var accelerometer:Accelerometer = new Accelerometer();
accelerometer.addEventListener(AccelerometerEvent.UPDATE, onAccelerometerUpdate);
}

function onAccelerometerUpdate(evt:AccelerometerEvent):void {
var str:String = „x: “ + evt.accelerationX;
str += „\ny: “ + evt.accelerationY;
str += „\nz: “ + evt.accelerationZ;
acc_text.text = str + „\n“;

rect.scaleX = -evt.accelerationX;
rect.scaleY = evt.accelerationY;
}
[/as]

Hier noch ein Screenshot der Anwendung.

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

[ad]

9 Gedanken zu „Accelerometer in Flash und AIR“

  1. Super, danke für diese Infos! Begrüße es übrigens auch sehr über Flash + Android zu lesen, da ich selber auch ein Desire nutze.

  2. Ich habe gerade den Code auf dem Desire ausprobiert, funktioniert einwandfrei.

    Das Gerät habe ich seit ein paar Wochen und bin ziemlich begeistert! Besonders die Widgets find ich sehr praktisch (nutze oft den RSS reader), Surfen macht Spaß und ich nutze ein paar Soundapps, um Ideen festzuhalten (ich produziere nebenher Musik).

    Spannend sind natürlich auch besonders die Flashmöglichkeiten, da werde ich versuchen am Ball zu bleiben.

  3. Wie sieht das eigentlich in der Zukunft aus – gibt es Informationen, ob die Air runtime direkt in Android mit integriert sein wird, oder muss man die immer extra installieren?

  4. Sehr gute Frage. Ich schätze mal, dass es vom Hersteller/Provider abhängt, wie das gerade ausgeliefert wird. Genau weiß ich es aber auch nicht.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert