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]
Zwei passende Links noch dazu:
http://www.video-flash.de/index/ueberblick-features-flash-player-10-1/
http://www.video-flash.de/index/gestures-multitouch-flash-player-air/
Super, danke für diese Infos! Begrüße es übrigens auch sehr über Flash + Android zu lesen, da ich selber auch ein Desire nutze.
Cool. Wie lange nutzt du es schon? Wie ist dein Eindruck?
Ergänzend zum obigen Artikel:
http://www.video-flash.de/index/mobile-flash-device-central/
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.
Das mit den Soundsapps klingt interessant. Wäre für mich auch interessant. Welche genau hast du denn?
Ich habe momentan folgende Sound apps installiert:
– Electrum (drumcomputer, http://www.nikotwenty.com)
– Jasuto (modularer synthesizer, http://www.jasuto.com/home/)
– ReLoop (Sequencer, http://www.nikotwenty.com)
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?
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.