[toc]Der vorliegende Artikel ist der zweite Bericht aus der Einführungs-Serie für Multitouch-Entwicklungsumgebungen und stellt die kommerzielle Software GestureWorks vor. Mit diesem Framework können Adobe Flash Applikationen mit Multitouch-Unterstützung erstellt werden, wobei eine breite Palette von Multitouch-Hardware unterstützt wird. Das Spektrum an unterstützten Gesten ist enorm, was sich u.a. auch in der von GestureWorks eingeführten Gesture Markup Language widerspiegelt. Im Folgenden wird eine kurze Einführung in die Plattform gegeben, einige vorgefertigte Beispiele gezeigt sowie ein kleine Anwendung selbst implementiert.
Einführung
- Framework zur Erstellung von Multitouch-Anwendungen mit Adobe Flash
- Unterstützung aller Adobe Flash-Komponenten
- Verwendung der Adobe Flash Rendering Engine
- Implementierung basiert auf Adobe ActionScript
- Anbindung beliebiger Hardware mit Windows 7 oder dem TUIO-Protokoll
- Über 100 verfügbare Gesten, assoziiert mit der Gesture Markup Language
Demo
Um vor der Vorstellung der technischen Details einen ersten Eindruck zu schaffen, demonstriert das folgende Beispielvideo die Funktionalität einer Applikation mit Flickr und Google Maps Integration:
Historie
Das Framework wird seit 2008 von dem US-Unternehmen Ideum Inc. entwickelt und steht derzeit in der Version 3.1 zur Verfügung. Es werden zwei Versionen vertrieben. Zum einen als Standard-Version für $149, welche auf fünf Gesten beschränkt ist und in jeder Anwendung ein Logo enthält, und die unbeschränkte Professional-Version für $349. Außerdem wird eine Demo-Version bereitgestellt, bei der jede Anwendung auf 30 Minuten Laufzeit eingeschränkt ist. Die Version 2 des Frameworks ist als über das Projekt Open Exhibits als Open-Source verfügbar.
Komponenten und Aufbau
Die nachfolgende Tabelle gibt einen Überblick über die technischen Eigenschaften sowie bereitgestellten Gesten und Komponenten des Frameworks:
Eigenschaft | Ausprägung bei GestureWorks |
---|---|
Programmiersprache |
|
Rendering |
|
Hardware-Anbindung |
|
Multitouch-Gesten |
|
Bereitgestellte Komponenten |
|
Installation
Bevor die Installation starten kann, muss zunächst auf der Homepage eine Version gekauft werden. Alternativ steht auf der gleichen Seite auch eine Evaluationsversion zur Verfügung.
- Die Adobe Air Laufzeitumgebung herunterladen und installieren
- Die heruntergeladene Setup-Datei für GestureWorks ausführen
- Den Installationsschritten folgen
- Zum Ende der Installation die Lizenznummer eingeben und bestätigen
- Nach der Installation öffnet sich der Windows Explorer und zeigt den Installationsordner. In diesem sind die Programm-Bibliotheken enthalten, die benötigt werden, um Multitouch-fähige Anwendungen mit Adobe Flash zu kompilieren. Es ist keine ausführbare Anwendung enthalten!
[nggtags gallery=GestureWorks+Installation]
Einrichtung von Adobe Flash
Um Anwendungen auf Basis von Adobe Flash und GestureWorks entwickeln zu können, wird die Entwicklungsumgebung Adobe Flash Professional CS5+ benötigt. Im Folgenden wird erklärt, wie diese Anwendung eingerichtet werden muss, damit Applikationen mit GestureWorks erstellt werden können.
- Dieses vorbereitete Template herunterladen und entpacken. Es enthält die Ordnerstruktur, welche für jedes neue Projekt benötigt wird.
- Anlegen eines neuen Adobe AIR Projekts unter “Datei” -> “Neu” (Adobe AIR Projekt auswählen)
- Abspeichern des Projekts unter beliebigem Namen in dem Template-Ordner
- Neue Adobe ActionScript Klasse anlegen unter “Datei” -> “Neu” (ActionScript 3.0 auswählen)
- Die neue Klasse im “src”-Ordner abspeichern unter dem Name “Main”
- ActionScript Einstellungen festlegen unter “Datei” -> “ActionScript Einstellungen
- Als Klassenname “Main” angeben
- Neuen Quellpfad “.\src” erstellen
- Bibliothekspfade hinzufügen. Alle GestureWorks-Projekte müssen mit den Bibliotheken “GestureWorksCML.swc” und “GestureWorksGML.swc” verknüpft werden. Diese Dateien befinden sich im “lib”-Ordner im Verzeichnis von GestureWorks und müssen mit dem Icon “SWC-Datei hinzufügen” je als neue Bibliothek eingefügt und aus dem GestureWorks-Ordner (C:\Users\”Name”\GestureWorks3\lib) ausgewählt werden.
- Veröffentlichungseinstellungen festlegen unter “Datei” -> “Einstellungen für Veröffentlichungen”
- Der Pfad für die Ausgabedatei (.swf) ist “.\bin\Main.swf”
- Nun kann der eigentliche Inhalt der Applikation implementiert werden. Dazu wird mit “Klassendefinition bearbeiten” von “Main” eine neue Klasse für ActionScript erstellt.
[nggtags gallery=GestureWorks+Flasheinrichtung]
Mitgelieferte Beispiele
Die Beispielanwendungen für GestureWorks sind nicht in der Installation enthalten, sondern als Tutorial und Download auf der Webseite verfügbar. Die Applikationen sind allesamt einfach gehalten und lassen sich mit der Anleitung auf der Webseite einfach nachvollziehen. Für die weitere Betrachtung werden die Applikationen in zwei Kategorien eingeteilt. Zum einen die Beispiele, welche die grundlegenden Touch-Gesten demonstrieren, und zum anderen erweiterte Anwendungen. Letztere haben einen größeren Funktionsumfang und geben einen Einblick in die reale Entwicklung.
Die derzeit auf der Homepage befindlichen Beispiele sind für die Version 2 von GestureWorks ausgelegt.
Grundlegende Beispiele
Diese Beispielanwendungen dienen vor allem zum Erlernen der grundlegenden Touchgesten. Es werden jeweils nur wenige Geste mit einfachen Objekt kombiniert, um die Funktionalität zu erlernen.
[nggtags gallery=GestureWorks+Beispielanwendung+basic]
Erweiterte Beispiele
Anwendungen in dieser Kategorie sind für fortgeschrittene Entwickler geeignet und zeigen wie man gewöhnliche Flash-Inhalte wie beispielsweise Karten oder 3D-Objekte mit Multitouch-Gesten versehen kann.
[nggtags gallery=GestureWorks+Beispielanwendung+advanced]
Minimalimplementierung
Eine Anwendung mit GestureWorks zu implementieren ist sehr einfach. Es werden nur zwei Dateien und etwas Quellcode (Adobe ActionScript 3) benötigt. Wie bei den anderen Beispielanwendungen für Multitouch-Frameworks dieser Seite soll die Beispielanwendung Bilder darstellen und mit entsprechenden Gesten (Drag, Scale, Rotate) manipulieren können. Für die Applikation wird zunächst ein neues Flash-Projekt benötigt. Dieses muss, wie bereits oben gezeigt, konfiguriert und mit dem GestureWorks-Framework verknüpft werden. Das Minimal-Beispiel steht ebenfalls als fertiger Download zur Verfügung.
Den eigentlichen Quellcode beinhaltet die “Main.as”-Datei. Diese besteht, wie bei objektorientierten Programmiersprachen üblich aus verschiedenen Bestandteilen. Zunächst werden die Grundfunktionen per Import-Anweisung eingebunden. Im Anschluss wird die Klasse von “Application” abgeleitet und die benötigten Methoden implementiert. Die Methode “initialize” enthält den Hauptbestandteil der Anwendung. Im Folgenden der vollständige Code für das Minimal Beispiel:
package{ import com.gestureworks.core.GestureWorks; import com.gestureworks.core.TouchSprite; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Loader; import flash.events.Event; import flash.net.URLRequest; public class Main extends GestureWorks{ private var loader:Loader; private var myDisplay:TouchSprite; public function Main():void{ super(); key = "KEY HIER EINFUEGEN"; } override protected function gestureworksInit():void{ trace("GestureWorks has initialized"); myDisplay = new TouchSprite(); loader = new Loader(); myDisplay.x = (stage.stageWidth) / 2; myDisplay.y = (stage.stageHeight) / 2; myDisplay.scaleX = 0.2; myDisplay.scaleY = 0.2; myDisplay.gestureTouchInertia = true; myDisplay.gestureReleaseInertia = true; myDisplay.clusterEvents = true; myDisplay.gestureEvents = true; myDisplay.transformEvents = true; myDisplay.disableNativeTransform = false; var gList:Object = new Object; gList["pivot"] = true; gList["n-drag"] = true; gList["n-rotate"] = true; gList["n-scale"] = true; myDisplay.gestureList = gList; loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderComplete); loader.load(new URLRequest("library/assets/pic.jpg")); myDisplay.addChild(loader); addChild(myDisplay); } private function loaderComplete(event:Event):void{ loader.x = 0 - (loader.width / 2); loader.y = 0 - (loader.height / 2); } }}