Sie sind auf Seite 1von 190

1.

Grundlegende Sprachelemente
Die Geschichte von Flash und ActionScript
Die Geschichte Grundstzliche Neuigkeiten in ActionScript 3 gegenber AS2 Die Flash-Plattform und die Multiscreen-Herausforderung o Die Zukunft von Flash

Flash Professional /ActionScript: die Schnittstelle


Skripte in Frames der Zeitleiste Dokumentklasse

Grundlegenden Elemente der Sprache


Variablen und Konstanten o Deklaration und erlaubte Namen o Gltigkeitsbereiche von Variablen Datentypen o Definition und besondere Datentypen o Voreingestellte Werte fr Variablen o Strikter und Standard-Modus des Compilers: Typenkonflikte o Kompatible Datentypen und Casting Operatoren o Definition o Beispiele fr ausgewhlte Operatoren Programmablaufstrukturen o Beispiele fr die wichtigste Strukturen

Weitere Elemente der Sprache


(Globale) Funktionen o Die Klasse Function o Methoden und Eigenschaften der Klasse Function Ereignisse Klassen und Objekte und deren Eigenschaften und Methoden.

Zwei Klassen der obersten Ebene


String o o o Array o o Deklaration Methoden Stringvergleich Deklaration Methoden

Die Geschichte von Flash und ActionScript


1996 kreiert die Firma FutureWave das vektor- und Zeitachsen orientierte Animationsprogramm FutureSplash-Animator. Die erstellten Animationen knnen mit Hilfe eines Plug-In im InternetBrowser betrachtet werden. Im selben Jahr wird FutureWave von Macromedia (damals Macromind) bernommen.

1997 erscheinen Flash 1 und 2. Flash 2 ist mehr als ein Animationsprogramm; es erlaubt die Erstellung einfacher interaktiver Schaltflchen. Auerdem ist die Steuerung der Zeitleiste mittels sog. Aktionen ohne Programmierung mglich. Medien >> Flash 2 untersttzt Bitmap-Grafiken.

1998 erscheint Flash 3. Die Aktionen sind erweitert worden und sind nicht nur auf Schaltflchen sondern auch auf einzelne Filmsequenzen (sog. MovieClips) anwendbar. Eine Programmiersprache ist nach wie vor nicht integriert. Damals war Director 6 mit der mchtigen Programmiersprache Lingo als Entwicklungswerkzeug fr Multimedia-Anwendungen konkurrenzlos.
Persnliche Anmerkung: ab diesem Jahr habe ich Director-Schulungen durchgefhrt.

1999 erscheint Flash 4. Die Aktionen wurden zu der einfachen Programmiersprache ActionScript mit Variablen und Kontrollstrukturen weiterentwickelt. Ein richtiges Editieren der Sprache ist aber noch nicht mglich. Die Skripts werden ber Formulare zusammengeklickt. Medien >> Flash 4 untersttzt MP3.
Persnliche Anmerkung: in diesem Jahr habe ich mich fr die Nutzung von Flash zur Einbindung von Sound und Animationen in den Modulen der Virtuellen Fachhochschule (Lbeck) entschieden..

2000 erscheint Flash 5. Aus ActionScipt ist eine echte Programmiersprache (Skriptsprache) geworden, die sich an dem ECMA-262 orientiert (European Computer Manufactures Association) und zum ersten Mal richtig editiert werden kann. AS ist Prototyp orientiert (AS1). 2002 erscheint Flash MX (Version 6) mit weiterem Ausbau von ActionScript. Medien >> Zum ersten Mal ist Flash videofhig und erobert die letzte Bastion von Director.
Persnliche Anmerkung: in diesem Jahr habe ich die Flash/AS-Schulungen gestartet. Persnliche Anmerkung: Flash MX ersetzt 2003 Director/Lingo in der Ausbildung der HTW

Die Geschichte von Flash und ActionScript: Fortsetzung


2004 erscheint Flash MX 2004 (Version 7) mit einer gnzlich revidierten Sprache: Einfhrung von typisierten Variablen und echten Klassen. Die nderungen in ActionScript sind so schwerwiegend, dass Macromedia von AS2 spricht.

2005: Macromedia und Adobe fusionieren. Die Version 8 von Flash kommt auf den Markt. Flash 8 bietet weitere grafische Effekte und einige zustzliche Klassen. In der Struktur des Tool und der Sprache hat sich nichts Wesentliches gendert.

2007 erscheint Flash Version CS3 mit einer neuen Sprache: ActionScript 3 als eigenstndige Programmiersprache fr Multimedia Anwendungen (im Internet und auf dem Desktop) und fr Rich Internet Applications. AS3, Flash CS3 und der Flash-Player 9 sind komplexer, schneller, mchtiger.

2008 erscheint Flash CS4. Die wesentlichen Eigenschaften der Sprache haben sich nicht gendert. Danach folgen CS5 und CS5.5. Die Version CS 6 ist fr die erste Hlfte 2012 angekndigt.

Grundstzliche Neuigkeiten in ActionScript 3 gegenber AS2


Mit ActionScript 3 lst sich die Sprache von Flash und kann als eigenstndige Programmiersprache verstanden werden, die in verschiedenen Programmierumgebungen eingesetzt werden kann.

Die fertigen AS-Programme sind seit der neuen Version AS3 in 2 unterschiedlichen Umgebungen lauffhig - sog. Flash Runtime Environments

Mit dieser grundlegenden Neuigkeit zwangslufig verbunden ist die Tatsache, dass AS3 auf einer transparenten, vollstndigen und neuen Klassenstruktur aufbaut, die sich so weit es geht von den Objekten in der Flash-Entwicklungsumgebung unabhngig macht.

TIPP: Unter dem Menpunkt [Datei > Einstellungen fr Verffentlichungen] kann die AS-Version vor Beginn der Entwicklung gewhlt werden:AS1, 2 und 3 stehen zur Wahl.

Die Flash-Plattform und die Multiscreen-Herausforderung


DOC-Datei zeigen Die Flash-Plattform besteht aus verschiedenen Komponenten:

Clients
Flash-Player: in Browser (nur Desktop): o als Plug-In fr Web-Browser und als Stand-Alone Player

AIR = Adobe Integrated Runtime: o fhrt AS/Flash-Anwendungen auf dem lokalen Rechner (ohne Browser) o und bietet die Mglichkeit, Operationen mit dem Betriebssystem und der Festplatte des Rechners durchzufhren o Adobe AIR ist auch die Laufzeitumgebung fr mobile Apps (Interpretierte Apps) Entwicklungstools von Adobe Flash Catalyst: fr Gestalter Flash Builder: fr Programmierer Flash Professional: fr Multimedia-Entwickler (Gestaltung und Programmierung) Entwicklungstools von anderen Herstellern Flash Develop: von Flashdevelop.org FDT: von Powerflasher.com Server-Lsungen fr Streaming und Real time-Kommunikation Flash Mediaserver-Familie Live Cycle Open-Source Framework fr standardisierte Komponenten Flex

Die Multiscreen-Herausforderung: Die Zukunft von Flash


Browser-Anwendungen auf dem Desktop: der Browser-Player wird weiter entwickelt. Schwerpunkt sind hochwertige Spiele und Web-Specials, die mit HTML 5 noch nicht, auch nicht mittelfristig, realisierbar sind.

Apps auf dem Desktop: Es ist zu erwarten, dass multimediale Anwendungen auf dem Desktop mit Zugriff auf Netzdaten langfristig mit Flash und AIR mglich sein werden.

Mobile Browser-Anwendungen: zurzeit nur auf Android mglich; schon kurzfristig ist der Ersatz durch HTML5 zu erwarten.

Mobile Apps: Flash wird langfristig von Adobe als Tool fr Cross-Plattform-Entwicklung (interpretiert fr Android und Blackberry, ggf. auch fr Windows Phone, generiert fr iOs)

Interaktives Fernsehen gehrt auch zu den Zielplattformen von Flash.

Flash Professional und ActionScript 3: die Schnittstelle Flash und ActionScript


Es gibt im Prinzip zwei Stellen, in denen in einer Flash-Anwendung (.fla, .swf) ActionScriptProgramme eingebunden werden knnen:

Es kann eine AS-Klasse in Flash als sog. Dokumentklasse in einer Datei eingebunden werden, so dass die Flash-Anwendung als Ganzes als Instanz der AS-Klasse verstanden werden kann.

Es knnen AS-Skripte in Bildern der Flash-Zeitleiste (sog. Frames) geschrieben werden. TIPP: Der Editor dafr wird mit der Taste [F9] geffnet.

Mehr zu Dokumentklasse
Seit AS3 ist es mglich, eine eigene Klassendatei (Endung .as) zu schreiben und in der FlashEntwicklungsumgebung als Dokumentklasse der Flash-Datei einzutragen: [ Datei>Einstellungen fr Verffentlichungen>Flash>ActionScript 3.0 Einstellungen>Dokumentklasse ] TIPP: Die Dokumentklasse muss als Subklasse der Klasse Sprite, wenn keine Skripte in Frames der Zeitleiste vorgesehen sind oder als Subklasse der Klasse MovieClip, wenn Skripte in Frames der Zeitleiste vorgesehen sind, definiert werden. Dazu spter mehr. Wenn in einer Flash-Datei (Endung .swf) keine Dokumentklasse eingebunden ist, erzeugt Flash beim Start automatisch eine (leere) Dokumentklasse, die der Flash-Datei entspricht. Es ist darber hinaus mglich, eine Klassendatei zu schreiben und zu starten, die ganz ohne FlashDatei ausgefhrt wird.

Skripte in Frames bzw. Bilder der Zeitleiste Allgemeines


Durch Doppelklicken auf das Frame in der Zeitleiste bei gedrckter ALT-Taste oder einfach mit [F9] ffnet sich der Skripteditor fr die Zeitleiste.

Die Skripte in einem Frame der Zeitleiste werden ausgefhrt, wenn der Abspielkopf in das Frame eintritt und bevor der Inhalt des Frames auf dem Bildschirm dargestellt wird. In AS3 knnen Skripte in Frames der Zeitleiste als Methoden der Dokumentklasse verstanden werden.

TIPP: Obwohl es nicht notwendig ist, ist es sehr empfehlenswert eine eigene Ebene in der Zeitleiste fr Skripte zu erstellen und diese Ebene entsprechend zu benennen. Typisch unter ActionScript-Entwicklern ist die Bezeichnung Aktionen. >> Beispiel > FrameSkripte.fla In den ersten drei Frames der Zeitleiste sind Skripte untergebracht, die eine Meldung im Ausgabefenster zeigen.

Tipp fr Kenner von AS2: Keine Skripte in Instanzen Allgemeines


Skripte in MovieClip- und Schaltflchen-Instanzen werden in AS3 im Gegensatz zu den Vorgnger Sprachen AS1 und AS2 - nicht mehr untersttzt.

Das heit Movie-Clip- und Schaltflchen-Instanzen mssen innerhalb von Flash in Frame-Skripte in der Zeitleiste gesteuert werden. Oder man verzichtet ganz darauf und programmiert nur noch Objekt orientiert.

TIPP: Das war mit AS2 bereits mglich und ohne hin zu empfehlen. Auf diese Art und Weise wird der Quellcode zentralisiert und lsst sich besser pflegen.

Grundlegende Elemente der Sprache ActionScript berblick


In ActionScript stehen grundlegende Sprachelemente zur Verfgung: Variablen und Konstanten Datentypen Operatoren Programmablaufstrukturen

Weitere Sprachelemente: Globale Funktionen Ereignisse Klassen (und deren Eigenschaften und Methoden)

Zwei Klassen der Obersten Ebene: Array String

10

Variablen und Konstanten Variablen und Konstanten: Deklaration


Variablen werden mit dem Schlsselwort var deklariert. Anschlieend wird der Datentyp festgelegt. Der Wert kann auch direkt bestimmt werden, muss aber nicht.

var meinev1: Typ; var meinve2: Typ = Wert;


Will man den Datentyp einer Variablen nicht festlegen, kann man dies mit folgender Syntax tun:

var meinev3: *;
Man sollte mit dieser Mglichkeit aber sehr sorgfltig umgehen, da nicht typisierte Variablen eine Quelle von Fehlern sein knnen.

Darber hinaus stehen seit AS3 Konstanten zur Verfgung, die wie folgt deklariert werden:

const meineKonst: Typ = Wert;

Erlaubte Namen
... bestehen aus Buchstaben, Zahlen und Strich fr Unterstreichungen ... mssen mit einem Buchstaben oder Unterstreichung anfangen ... Gro- und Kleinbuchstaben werden unterschieden (in AS1 war das noch nicht der Fall).

>> Beispiele > Gltige Namen: Breite, _Breite, Breite_Ball, Breite1 Ungltige Namen: -Breite, Breite-Ball, Breite Ball, 1Breite Dynamische Variablen-Namen
Mit ActionScript ist es mglich, Variablennamen dynamisch zu bilden.

>> Beispiel > dynamische-namen.fla Im Frame 1 ist folgende For-Scheife mit dynamischen Variablen-Namen: for(var i = 1; i<11; i++) { aktZahl = this["zahl"+i]; trace("Aktuelle Zahl ist " + aktZahl + "."); }

11

Gtlichkeitsbereich von Variablen (Scope) Lokale Variablen


Variablen, die innerhalb einer Funktion bzw. Methode mit var definiert werden, sind nur innerhalb der Funktion bzw. Methode gltig. Sie sind lokal.

Zeitleistenvariablen
Variablen, die in einem Eventhandler der Zeitleiste definiert werden, sind fr alle Skripte der Zeitleiste gltig. Sie sind technisch betrachtet Eigenschaften der Zeitleiste.

Variablen in Klassendefinitionen
Variablen in Klassendefinitionen sind: Lokale Variablen innerhalb einer Methode Instanzvariablen, die den Zustand einer Instanz speichern; diese knnen sein, je nach Zugnglichkeit: o public: Variable gltig in- und auerhalb eines Package o internal (neu in AS3): Variable gltig nur innerhalb des eigenen Package (Voreinstellung) o protected (neu in AS3): Variable gltig nur fr die Klasse und deren Subklassen o private: Variable gltig nur innerhalb der Klassendefinition. Statische Variablen der Klasse; der Gltigkeitsbereich kann ebenfalls mit den Modifizierer public, internal, protected, private reguliert werden.

Globale Variablen?
AS2: Variablen, die als Eigenschaft des globalen Objektes definiert werden, sind global. Das globale Objekt ist in der Eigenschaft _global gespeichert. TIPP: Da sie nicht mit var initialisiert werden, knnen sie auch nicht typisiert werden. AS3: Die Eigenschaft _global existiert nicht mehr. Es gibt keine globalen Variablen mehr. Eigenschaften bzw. Variablen der Dokumentklasse sind aber in der ganzen Anwendung gltig.

12

Datentypen: Begriffserklrung und besondere Datentypen Begrifferklrung


In ActionScript 3 ist das Wort Datentyp praktisch eine andere Bezeichnung fr Klasse. Die drei grundlegenden Datentypen in AS3 sind: Object, Null und void. o Object beinhaltet alle Instanzen aller Klassen. Anders ausgedrckt: Object ist die Basis-Klasse aller Klassen. o Null: hat nur den Wert null o void: hat nur den Wert undefined [Moock 07, S. 138].

Darber hinaus stellt jede Klasse, ob eingebaut oder selbst definiert, einen Datentyp dar.

13

Voreingestellte Werte fr Variablen Voreingestellte Werte fr Variablen


Wenn eine Variable ohne Typ und ohne Wert deklariert wird, dann hat sie den Wert undefined. Undefined ist der einzige Wert des Datentyps void.

>> Beispiel > var meineVar:*; // meineVar ist gleich undefined


Wenn eine Variable mit Typ aber ohne Wert deklariert wird, bekommt sie einen voreingestellten Wert je nach Typ:

o o o o

Boolen: false int:0 uint:0 Number:NaN o Alle anderen Typen null (null ist der einzige Wert des Datentyps Null)
Das heit Null (mit dem Wert null) und void (mit dem Wert undefined) bedeuten beide die Abwesenheit von Daten. Im ersten Fall fr bestimmte Datentypen, im zweiten Fall, wenn auch der Datentyp unbekannt ist.

14

Strikter und Standard-Modus des Compilers: Typenkonflikte


Wenn Werte in eine Variable anderer Typus geschrieben werden sollen, spricht man von Typenkonflikt.

Typenkonflikte werden vom Compiler im strikten Modus (Voreinstellung) [Moock 07, S.141] gemeldet, wenn das Programm versucht, Daten in einem nicht kompatiblen Datentyp zu schreiben. TIPP: Sie sollten immer den strikten Modus einstellen. Dies erreichen Sie wie folgt: [Datei > Einstellungen fr Verffentlichungen > ActionScript 3 Einstellungen > Fehler > Strikter Modus]

Ist der strikte Modus ausgeschaltet, werden solche Typenkonflikte vom Compiler nicht gemeldet. ActionScript ist nicht statisch typisiert (in Gegensatz zu C z.B.) sondern dynamisch typisiert. D.h. eine Typenprfung geschieht auf jedem Fall zur Laufzeit.

In der Laufzeit wird, falls Typenkonflikte in Code geblieben sind, versucht, den Wert in den angestrebten Datentyp nach bestimmten Regeln zu konvertieren (coercion) [Moock 07, S.151]. o Sind die Datentypen kompatibel, wird stillschweigend konvertiert. o Sind die Datentypen nicht kompatibel, so ist die Konvertierung nur bei den sog. primitiven Datentypen erfolgreich: String, Boolean, Number, int und uint. o Kann die Konversion nicht stattfinden, wird ein Run-Time-Error ausgegeben und die Ausfhrung bricht ab.

>> Beispiel > var meinBus:Bus = new Bus(); var meineZahl: Number = 10; meineZahl = meinBus // Strikter Modus: Typenkonflikt wird gemeldet // Standard Modus: meineZahl hat den Wert NaN

15

Kompatible Datentypen Kompatible Datentypen


Der Subtyp eines Typs (entsprechend der Sublasse einer Klasse) ist mit dem Typ (seinem Supertyp) kompatibel, da der Subtyp alle Instanzvariablen und Methoden des Supertyps erbt.

Das bedeutet in der Praxis, dass eine Instanz des Subtyps wie eine Instanz des Supertyps im Programm behandelt werden kann.

>> Beispiel > Typ Auto hat die Methode fahren().Typ Bus erbt von Auto und hat die Methode mitNehmen(Fahrgast) Folgendes Programm ist korrekt: var meinBus:Bus = new Bus (); meinBus.fahren() Folgendes Programm ist nicht korrekt: var meinAuto:Auto = new Auto(); meinAuto.mitNehmen (meinFahrgast);

16

Casting Casting innerhalb einer Klassenhierarchie


Casting bedeutet einer Variablen einen anderen Typ zuordnen. NeuerTyp(Variable). Es ist nur innerhalb einer Klassenhierarchie mglich, also bei kompatiblen Datentypen. Casting ist keine Typ-Konversion. Es ist nur eine Information fr den Compiler, die Variable so zu behandeln, als ob sie diesen Datentyp htte.

TIPP: Lesen Sie alles zum Casting in [Moock 2007, S. 146 und ff.] insbesondere zu Upcasting und Downcasting.

Casting bei primitiven Datentypen Bei primitiven Datentypen kann man Casting nicht nur innerhalb einer Klassenhierarchie sondern auch bei fremden Datentypen anwenden, um Datenkonflikte zu vermeiden: >> Beispiel > var fahrenheit:uint = uint(inputField.text);

17

Operatoren Definiton
Ein Operator ist ein Schlsselwort, das Daten zusammenfgt oder verndert.

>> Beipsiel > 5*6


Operatoren haben folgende gemeinsame Merkmale:

Operatoren nutzen Daten (Operanden), um daraus ein Ergebnis zu berechnen. Es gibt Operatoren, die nur eine bestimmte Anzahl von Operanden annehmen >> Beispiel > typeOf(meinMovie); Andere kommen mit unterschiedlicher Anzahl von Operanden zurecht.

Operatoren knnen miteinander kombiniert werden, um komplexere Ausdrcke zu bilden. >> Beipsiel > (Math.Pi * radius * radius) (width * heigth)

Vollstndige Liste der Operatoren


Die vollstndige Liste der Operatoren befindet sich unter: Referenzhandbuch > Sprachelemente > Operatoren

TIPP: Ausdrcke wie delete, typeOf,instanceOf sind keine Funktionen sondern Operatoren.
TIPP: In ActionScript 3 sind eine Reihe neuer Operatoren zur Handhabung von XML-Dateien eingefgt worden, mit denen wir uns spter beschftigen werden. ActionsScript 3 implementiert den ECMAScript for XML-Standard (E4X)

18

Wichtigste Operatoren
Zuweisungsoperator Numerische Operatoren Vergleichs- und Gleichheitsoperatoren Stringoperatoren Logische Operatoren Bitweise Operatoren

Zuweisung und zusammengesetzte Zuweisung


Der Zuweisungsopertor (=) wird von rechts nach links ausgefhrt.

>> Beispiel > a=b=c=5; //a, b, und c sind gleich 5.


Der Zuweisungsoperator kann mit arithmetischen Operatoren kombiniert werden.

>> Beispiel > var a: uint= 10; a += 5; // Das Ergebnis ist 15.

19

Numerische bzw. arithmetische Operatoren - Einzelheiten


Addition: + 5+7 Inkrement: ++ i++ (nachgelagert) ++i (vorgelagert) Subtraktion: 5-7 Dekrement: -i-- (nachgelagert) --i (vorgelagert) Multiplikation: * 5*7 Division: / 5/7. Das Ergebnis der Division kann eine Gleitkommazahl sein, auch wenn die Operanden es nicht sind. TIPP: Falls Sie eine ganze Zahl brauchen, benutzen Sie die Math-Methode Math.round(Wert). Sie rundet kaufmnnisch ab oder auf. In ActionScript 3 gibt es zustzlich die globale Funktion int(), die den Datentyp konvertiert und die Nachkommastellen einfach abschneidet. Modulo: % 5%2 Gibt der Rest der Division

>> Beispiel > var a:int=4; if (a % 2 == 0) { trace (a + " ist eine gerade Zahl"); } else { trace (a + " ist ungerade"); } >> Beispiel > var j:int; for (var i:int=0; i<10; 0) { j = i++; trace (j); } //gibt 0 bis 9 aus >> Beispiel > for (var i:int =0; i<10; i++) { trace (++i); // die ungeraden Zahlen erscheinen } for (var i:int =0; i<10; i++) { trace (i++); // die geraden Zahlen erscheinen }
20

Gleichheitsoperatoren bzw. Vergleichsoperatoren Gleichheit == und Ungleichheit !=


Zu Bercksichtigen:

NaN==NaN ist nicht wahr null==undefined ist wahr


Zeichenketten werden case-sensitive verglichen Wenn Variablen fr Komplexe Datentypen stehen, ist das Ergebnis des Vergleichs mit == nur dann true, wenn die Operanden dasselbe Objekt referenzieren. >> Beispiel var Array1: Array =[1,2,3]; var Array2: Array =[1,2,3]; var Array3: Array =Array2; trace(Array1==Array2);// ergibt FALSE trace(Array2==Array3);// ergibt TRUE

Weitere Vergleichsoperatoren
Grer als: > Kleiner als: < Grer, gleich: >= Kleiner, gleich: <=

TIPP: Wenn Zeichen und nicht Zahlen verglichen werden, werden sie nach dem ASCII-Wert verglichen

21

Logische Operatoren

ODER: || >> Beispiel: trace(true || false); // ergibt true UND: && >> Beispiel: trace(true && false); // ergibt false Nein: ! >> Beispiel: trace(!true); // ergibt false Bedingt: Bedingung ? ausdruck1 : ausdruck2 Bedingung: Ein Ausdruck, der einen Booleschen Wert ergibt (in der Regel einen Vergleichsausdruck), wie z. B. x < y. ausdruck1, ausdruck2: Werte eines beliebigen Typs. weist Flash an, die Bedingung auszuwerten. Wenn die Bedingung true ist, wird ausdruck1 ausgefhrt, ist die Bedingung false, dann wird ausdruck2 ausgefhrt. >> Beispiel > var a:int = 5; var b:int = 10; var Ergebnis:int; Ergebnis = (a < b) ? a: b; trace (Ergebnis); // ergibt 5 Ergebnis = (a > b) ? a: b; trace (Ergebnis); // ergibt 10 >> Beispiel > trace ( (true)? 1:2); // ergibt 1 (true)

22

Programmablaufstrukturen: Bedingungen und Schleifen berblick


Folgende Programmablaufstrukturen stehen zur Verfgung:

if ... else swicht ...case for while do while


TIPP: Diese Strukturen wurden erst in Flash 4 eingefhrt (1999), daher spricht man erst seit Flash 4 von Programmiersprache. In Flash 4 konnte man allerdings die Skripte nicht frei editieren.

23

If If: Syntax
if (Bedingung) { Anweisungen } else if (Bedingung) {Anweisungen } else { Anweisungen }

if (userantwort==richtigeantwort) { trace( Richtig); // weitere Anweisungen; } else if (useramtwort==halbrichtig) { trace( Teilewiese richtig); // weitere Anweisungen; } else { trace(Falsch); // weitere Anweisungen; } >> Beispiel > if-else.fla Eventbehandlung ist im Frame 1 der Zeitleiste programmiert: Der Eingabetext heit antwortFeld Skript mit if-else ist in Frame 2 der Zeitleiste programmiert: Der Dynamische Text heit meldung

24

Switch Syntax
switch (Asudruck) { case Wert 1: Anweisungen; break; case Wertn: Anweisungen; break; default: Anweisungen }
Es ist wichtig break nicht zu vergessen, sonst wird der Rest der switch-Anweisung auch noch ausgefhrt.

>> Beispiel > switch.fla

Alle Skripte sind Frameskripte Im Frame 1 sind die Variablen und Konstanten deklariert und die Eventbehandlung realisiert. Im Frame 2 ist die switch-Anweisung programmiert. TIPPS: Die ColorTransform-Klasse wird bentigt, um die Farbe in der Laufzeit zu ndern Die Anweisung gotoAndPlay(2) ist notwendig damit die nderung auf dem Bildschirm sichtbar wird.

25

while und do while While


while (Bedingung) { Anweisungen }

>> Beispiel > while.fla Skript ist im Bild 1 der Zeitleiste >> Beispiel > while-teiler.fla Event-Behandlung im Bild 1 der Zeitleiste While-Schleife im Bild 2. Dieses Beispiel arbeitet mit dem Euklidischen Algorithmus, um den grten gemeinsamen Teiler zweier Zahlen herauszufinden. do-while
Zuerst werden die Anweisungen ausgefhrt und erst danach die Bedingung geprft:

do { Anweisungen while (Bedingung) } do-while Wird benutzt, wenn man sichern mchte, dass der Inhalt der Schleife mindestens
einmal ausgefhrt wird.

>> Beispiel > do-while.fla Das Beispiel zeigt den Unterschied zwischen while und do-while

26

for For-Syntax
for (ErsterWert; Bedingung; Update) { Anweisungen; }
Die Schritte des Updates knnen selbstndig bestimmt werden: z.B. i=i+2

>> Beispiel (AS3) > for.fla Skript ist im Bild 1 der Zeitleiste implementiert:
Schleife 1: Die Zahlen in einem Array werden addiert Schleife 2: Die Zahlen in einem Array werden ausgegeben.

27

for ... in und for each ... in

for In und for each in (neu ab AS3)

for ..in-Schleifen werden benutzt, um die dynamischen Eigenschaften eines Objektes bzw.
die Elemente in einem Array aufzulisten bzw. zu steuern.

Feste Eigenschaften, z. B. Variablen und Methoden, die in einer Klasse definiert sind, werden nicht verarbeitet. Verwenden Sie die Funktion describeType(), um eine Liste der festen Eigenschaften anzuzeigen.

>> Beispiel > for-in.fla Skript ist im Frame 2 der Zeitleiste, dort befinden sich eine for in und eine for each in-Schleife.

TIPP fr AS2: In einer for-in-Schleife werden nicht alle Eigenschaften aufgelistet. Welche genau aufgelistet werden schauen Sie am besten in der Hilfe nach. [Hilfe > ActionScript 2.0 Referenzhandbuch > Elemente der ActionScript-Sprache > Anweisungen > for in]

28

Break und Continue in einer For-Schleife Break und Continue


Mit break kann man eine for-Schleife frhzeitig unterbrechen Mit continue wird eine for-Schleife fr einen Wert unterbrochen und danach fortgesetzt.

>> Beispiel> Break-Continue.fla Es gibt nur ein Bild der Zeitleiste in dem die Schleife platziert ist. Hinweis: Zuerst laufen lassen und dann beide auskommentierte Zeilen in Code nacheinander aktivieren.

29

Weitere Sprachelemente: Funktionen, Ereignisse, Klassen Funktionen: Einfhrung


Es gibt in AS eingebaute globale Funktionen, darber hinaus kann man eigene Funktionen programmieren. Um eine Funktion zu programmieren, wird das Schlsselwort function benutzt. Im Gegensatz zu Methoden (von Instanzen oder statische) werden Funktionen unabhngig von Instanzen oder Klassen ausgefhrt. Sie werden definiert entweder: o innerhalb einer Methode oder einer Funktion (Hilfsfunktion) o in einem konkreten Package (Funktionen auf Paket-Ebene) o in einem unbenannten Package (globale Funktionen) Die eingebauten Funktionen sind ebenfalls global oder Package-Funktionen

Eingebaute globale Funktionen


Es gibt in AS3 nur wenige eingebaute globale Funktionen. TIPP: Zu finden sind sie unter [Referenzhandbuch > Sprachelemente > Globale Funktionen]. Die meist genutzte globale Funktion durfte trace sein.

Eingebaute Package-Funktionen
Es gibt unter den Flash-Klassen, mit denen wir uns spter beschftigen werden, 3 Pakete, die eingebaute Funktionen anbieten:

o flash.net o flash.system: nur die Funktion fscommand o flash.utils: z.B. setInterval und clearInterval und getTimer

>> Beispiel > globale-funktion.fla Dieses Beispiel arbeitet mit der Funktion navigatetoURL(), die mit einem Objekt der Klasse URLRequest arbeitet, selbst aber eine Funktion im Paket flash.net ist, die keiner Klasse zugeordnet ist: es handelt sich um eine Funktion auf PaketEbene. Die Aktion ist im Frame 1 der Zeitleiste zu finden.

30

Funktionen definieren: die Grundlagen Syntax


Typische Definition einer Funktion mit dem Schlsselwort function:

function meineFunktion (p1:Typ, p2:Typ, ... pn:Typ):RTyp { anweisungen; return meinWert; }

Rckgabewert
Der Rckgabewert einer Funktion wird mit dem Schlsselwort return eingefhrt. Nach dieser Zeile (die nicht unbedingt notwendig ist) wird keine Zeile mehr ausgefhrt. Wenn eine Funktion keinen Wert zurckgibt (return wurde nicht benutzt) gibt sie undefined zurck. Der Datentyp fr den Rckgabewert muss void sein.

function meineFunktion (p1:Typ, p2:Typ, ... pn:Typ):void { anweisungen; return meinWert; }

>> Beispiel > computer-gesundheit.fla Die Funktion gibt keinen Wert zurck. Eventlistener und Funktion im Frame 1 der Hauptzeitleiste definiert. >> Beispiel > factorial.fla Funktion ist im Bild 1 der Hauptzeitleiste. Dort befindet sich auch die Eventbehandlung mit einem Listener fr die Schaltflche rechnen Variablen in Funktionen
Variablen, die innerhalb einer Funktion mit var definiert werden sind lokal.

>> Beispiel > diverse-funktionen.fla. Skript im Bild 1 der Zeitleiste

31

Funktionen definieren: weiterfhrende Themen Parameter einer Funktion


Einfache Datentypen: Wird eine Variable x einer Funktion als Parameter bergeben, so wird nur deren Wert bernommen ("call by value"). Die Funktion legt eine Kopie der Variablen an. Eine nderung des Parameters im Funktionsrumpf hat keine Auswirkung auf die Variable x.

>> Beispiel > diverse-funktionen.fla. Skript im Bild 2 der Zeitleiste


Komplexe Datentypen: Wird ein Objekt als Parameter bergeben, so bernimmt die Funktion NICHT den Wert, sondern lediglich eine Referenz auf das Objekt ("call by reference"). Die Funktion arbeitet dann mit dem Original (anstatt mit einer Kopie). Das hat eine erhebliche Konsequenz: NDERUNGEN INNERHALB DER FUNKTION WIRKEN SICH AUCH AUF DAS OBJEKT AUSSERHALB DER FUNKTION AUS! (Daher ist eine Rckgabe mit return nicht notwendig)

>> Beispiel > diverse-funktionen.fla. Skript im Bild 3 der Zeitleiste. Hinweis: im Bild 4 der Zeitleiste wird gezeigt, wie Eigenschaften fr Funktionen definiert werden knnen. Tipp: Funktionen als Parameter
Funktionen knnen auch als Parameter anderer Funktionen fungieren:

function1(function2)
Die erste Funktion bekommt als Parameter nicht die Funktion selbst sondern eine Referenz (call by reference). Funktionen sind Objekte und damit komplexe Datentypen.

>> Beispiel > function doCommand (command) { command() } doCommand (stop);

>> Beispiel > funktion-als-parameter.fla Die aufrufende Funktion und die Funktionen, die als Parameter gelten, werden in Bild 1 der Zeitleiste definiert. Hinweis: Die Eingabefelder auf der Bhne verhalten sich entsprechend.

32

Die Klasse Function Die Klasse Function und ihre Methoden


Sowohl benutzerdefinierte als auch eingebaute Funktionen in ActionScript werden durch Instanzen der Klasse Function reprsentiert. Wenn eine Funktion definiert wird, erstellt Flash automatisch ein Objekt der Klasse Function. Die Objekte mssen also nicht explizit mit Hilfe des Konstruktors erstellt werden. apply und call sind Methoden der Klasse Function. Damit knnen Funktionen ausgefhrt werden. Beide Methoden sind interessant, weil damit auch Methoden ausgefhrt werden knnen und zwar fr Objekte, die diese Methoden nicht besitzen.

Die Eigenschaft Arguments


Wenn eine Funktion aufgerufen wird, erstellt Flash automatisch ebenfalls ein Objekt der Klasse Arguments. Diese Objekte mssen also nicht explizit mit Hilfe des Konstruktors erstellt werden. Das Arguments-Objekt ist ein Array mit den Werten, die als Parameter an eine beliebige Funktion bergeben wurden. Praktisch gesehen stellt Flash innerhalb einer Funktion eine lokale Variable zur Verfgung mit dem Namen arguments, mit der auf das Objekt zurckgegriffen werden kann.

Die Objekte der Klasse Arguments haben folgende Eigenschaften:

length: Anzahl der Parameter callee: aufgerufene Funktion

Wozu dient Arguments?


Das Objekt Arguments erlaubt Funktionen mit einer nicht festgelegten Anzahl von Parameter. >> Beispiel > Summe.fla

Die Eigenschaft callee


Die Eigenschaft callee erlaubt die Erzeugung von rekursiven Funktionen. TIPP: Rekursive Funktionen sind aber auch ohne callee-Eigenschaft mglich. In der FlashDokumentation wird die Variante mit callee als anonym die andere als benannt angegeben.

>> Beispiel > Rekursive-Funktion.fla Beide Funktionen (mit und ohne callee) sind im ersten Bild definiert und werden jeweils von der gelben und blauen Taste aufgerufen)

Variable Anzahl von Parametern ab ActionScript 3


Das Objekt Arguments erlaubt Funktionen mit einer nicht festgelegten Anzahl von Parametern. In ActionScript 3 funktioniert diese Technik nach wie vor. 33

Neu: ... -Parameter (Rest)


Mit ActionScript 3.0 wurde eine neue Parameterdeklaration mit der Bezeichnung ... Parameter (Rest) eingefhrt. Mit diesem Parameter knnen Sie einen Array-Parameter angeben, der mit einer beliebigen Anzahl von durch Komma getrennten Argumenten arbeitet. Der Parameter kann jeden Namen annehmen, der kein reserviertes Wort ist. Diese Parameterdeklaration muss der letzte angegebene Parameter sein. Wenn Sie diesen Parameter verwenden, steht das Objekt arguments nicht mehr zur Verfgung. Obwohl der ... -Parameter (Rest) die gleichen Funktionsmerkmale wie das arguments-Array und die arguments.length-Eigenschaft zur Verfgung stellt, verfgt er nicht ber die Funktionsmerkmale, die mit arguments.callee bereitgestellt werden. Bevor Sie den ... -Parameter (Rest) einsetzen, sollten Sie sicherstellen, dass Sie arguments.callee nicht bentigen. TIPP: Der ... -Parameter (Rest) kann zusammen mit anderen Parametern verwendet werden, muss jedoch der letzte angegebene Parameter sein.

>> Beispiel > Summe.fla

34

Ereignisse Einfhrung
In AS3 unterscheidet man zwei grundlegende Typen von Ereignissen: o Eingebaute Ereignisse (built-in events): sie entsprechen nderungen in der runtimeUmgebung, o Selbstdefinierte Ereignisse (custom events): sie entsprechen nderungen im Zustand der Anwendung.

Auer fr Skripte in Frames der Zeitleiste (die genauso wie in AS2 geschrieben werden) wird die Ereignisbehandlung in AS3 grundstzlich mittels Listener durchgefhrt.

Das gilt fr Instanzen aller AS-Klassen, die auf Ereignisse reagieren. AS-Klassen, die auf Ereignisse reagieren, erben von der Klasse EventDispatcher.

Technische Hintergrnde
Wenn etwas geschieht, erzeugt der Compiler ein Event-Objekt, d.h. eine Instanz der Klasse Event oder einer ihren Subklassen. TIPP: Das Ereignis hat in AS3 einen Namen. Dieser Name ist als Konstante der Event-Klasse (oder deren Subklassen) implementiert.

Die Event-Instanz wird an die verschiedenen Instanzen der Anwendung gereicht (Event dispatch). Der Compiler berprft, ob diese mit einer Listener-Funktion fr das Event verbunden sind. Merke: Die Verbindung geschieht mit Hilfe der Methode addEventListener() der Klasse EventDispatcher.

Ist dies der Fall, ist das Ziel des Events (target) erreicht. Die Funktion wird ausgefhrt und in der Regel der Weg des Events beendet. TIPP: Die Event-Funktion bekommt als Parameter den Event berreicht. So wei die Funktion auf welches Event sie reagiert.

Mehr ber Ereignisbehandlung erfahren Sie in der nchsten Vorlesung.

35

Klassen und Objekte und deren Eigenschaften und Methoden Eingebaute Klassen
Die Programmiersprache AS stellt eine Reihe von Klassen zur Verfgung, die die Entwicklung multimedialer interaktiver Anwendungen untersttzen sollen. AS unterscheidet drei Sorten eingebauter Klassen: Oberste Klassen fla-Klassen fl-Klassen Oberste Klassen wie beispielsweise Date, Math und XML, oder die Sprachelemente, die auf ECMAScript basieren gelten allgemein (nicht ausschlielich fr den Flash Player). Sie erben direkt von Object und sind oft in keinem Package eingebaut.

Fl-Klassen sind fertige Komponenten, komplexere Bausteine wie ein Video-Player oder ein Pulldown-Men, die auf fla-Klassen aufbauen. Im Semester werden wir uns hauptschlich mit den grundlegenden Flash-Klassen auf denen jede Flash-Anwendung aufbaut: die fla-Klassen beschftigen.

Selbst definierte Klassen


Ab ActionScript 2 ist die Sprache von Flash eine richtige Objekt orientierte Programmiersprache geworden.

Klassen werden in separate Text-Dateien mit der Endung .as gespeichert. Datei, Klasse und Konstruktor mssen denselben Namen haben.

AS3 bietet das Schlsselwort class fr Klassendefinitionen. Ist die Klasse in einem Package integriert, wird das Schlsselwort package gefolgt vom Namen des Packages vorangestellt. >> Beispiel > package zoo { class VirtualZoo { } }
TIPP: Das Package-Schlsselwort ist immer notwendig, auch wenn die Klasse nicht zu einem Package gehrt. Dann wird einfach kein Name angegeben. Eigenschaften einer Klasse werden mit dem bekannten Schlsselwort var, Methoden mit dem Schlsselwort function definiert. Die wichtigsten Begriffe zu Objekt orientierter Programmierung in AS sind Gegenstand vom Kapitel 3 dieser Vorlesung.

36

Zwei Klassen der obersten Ebene: String und Array berblick: Klassen der obersten Ebene
Einen berblick ber alle Klassen der obersten Ebene befindet sich unter [Hilfe > ActionScript 3.0 Komponenten Referenzhandbuch > Alle Pakete > Oberste Klassen]

Einige Beispiele neben String und Array sind Boolean, Function, Math, Number, int, uitn, XML und XMLList.

Wir beschftigen uns in diesem Kapitel mit den zwei Klassen String und Array.

Angabe von Strings (Zeichenketten)


Zeichenketten knnen mit doppelten oder mit einfachen Einfhrungszeichen eingeleitet werden.

Sollen diese Zeichen selbst dargestellt werden, dann werden sie einfach mit einem BackslashZeichen eingefhrt.

>> Beispiel > zeichenkette-angabe.fla Skript ist im Frame 1 der Zeitleiste.

37

Mit Zeichenketten arbeiten (Methoden der Klasse String)


Typische Aufgaben mit Zeichenketten: Zeichenketten verbinden Zeichenketten transformieren Teilstrings finden und erzeugen Stringvergleich

Zeichenketten verbinden
Zeichenketten knnen zusammengefhrt werden mit dem Operator + oder mit der Methode

concat().

>> Beispiel > Kette1 = Das + ist; Kette1.concat( ein Beispiel) ergibt Das ist ein Beispiel) Zeichenketten transformieren
In Grossbuchstaben: meinstring.toUpperCase() In Kleinbuschtaben: meinstring.toLowerCase() In ein Array mit Teilstrings transformieren :

meinString.split("trennzeichen")

>> Beispiel > Kette1=Das ist ein Beispiel Kette1.split( ) ergibt [Das,ist,ein,Beispiel] Teilstrings finden und erzeugen Einen Teilstring finden und die Position (ab 0) zurckgeben.
meinString.indexOf(teilstring)

Gibt -1 zurck falls der Teilstring nicht gefunden wird. >> Beispiel > Teilstring.fla Skript ist im Bild 1 der Zeitleiste. Das Beispiel arbeitet nur mit TRACE.
Einen Teilstring erzeugen: meinstring.slice(anfang,ende) >> Beispiel > Teilstring.fla Skript ist im Bild 1 der Zeitleiste. Das Beispiel

arbeitet nur mit TRACE.


Land = Mexiko Land.slice(1,3) gibt ex zurck.

38

Stringvergleich Stringvergleich
Auf Gleichheit prfen: == Auf Ungleichheit prfen: !=

Regulre Ausdrcke seit AS3


Regulre Ausdrcke sind Muster, die Sie in Such- und Ersetzungsvorgngen in Strings verwenden knnen. Die Klasse String hat seit AS3 weitere Methoden erhalten, die eine Arbeit mit regulren Ausdrucken ermglichen: o macht() o replace() o search() Darber hinaus gibt es in AS3 die neue Klasse RegExp (Oberste Ebene) fr regulre Ausdrucke.

39

Arrays Einfhrung
Array ist in ActionScript eine Klasse der obersten Ebene. Arrays werden in verschiedenen Sprachen unterschiedlich behandelt. Besonderheiten von Arrays in AS: o Arrays knnen unterschiedliche Datentypen beinhalten o Die Gre muss nicht fixiert werden, sie verndert sich, wenn neue Elemente hinzukommen bzw. welche gelscht werden. o Wird versucht ein Element zu lesen, das auerhalb des Arrays liegt, wird der Wert undefined zurckgegeben. TIPP: Anders in C, die in so einem Fall alles durcheinander bringt (C gives you plenty of rope with wich to hang yourself[Moock 07, S.118])

Ein Objekt der Klasse Array erstellen


Zum Erstellen eines neuen Array-Objekts wird der Konstruktor verwendet

var obst:Array = new Array (Aprikosen, Birnen, Orangen)


oder den Array-Zugriffsoperator

var obst:Array Obst = [Aprikosen, Birnen, Orangen]


Mit dem Zugriffsoperator kann man auch in Arrays lesen und schreiben obst[0] = Apfel (Aprikosen wird ersetzt) obstStueck3 = obst[2]

TIPP: Indem Arrays als Elemente eines Arrays gespeichert werden, knnen mehrdimensionale Arrays in ActionScript genutzt werden Eigenschaft und Methoden der Klasse Array
Es gibt nur eine Lese-Schreib-Eigenschaft: length.

Die Methoden sind zahlreich und erlauben die Handhabung von Arrays (siehe nchste Seite).

40

Mit Arrays arbeiten (Methoden der Klasse Array) In Arrays schreiben


Mit dem Array-Zugriffsoperator Mit der Methode push, die am Ende des Arrays schreibt Mit der Methode unshift, die am Anfang des Arrays schreibt

>> Beispiel > arbeit-mit-arrays.fla Im Bild 2 Aktionen, die im Array schreiben Aus Arrays lesen
Mit dem Array Zugriffsoperator Mit der Methode pop, die das letzte Element liest und lscht Mit der Methode shift, die das erste Element liest und lscht

>> Beispiel > arbeit-mit-arrays.fla Im Bild 3 Aktionen, die aus dem Array schreiben In Arrays lschen
Wie gesehen pop und shift lesen nicht nur, sie lschen auch Mit der Methode splice kann man eine frei bestimmbare Anzahl von Elementen an einem frei bestimmbaren Platz lschen (brigens auch schreiben)

>> Beispiel > arbeit-mit-arrays.fla Im Bild 4 Aktionen, die aus dem Array schreiben Arrays verbinden und teilen
Man kann Arrays verbinden mit der Methode concat (variable Anzahl von Parametern). Man kann Teilarrays trennen mit der Methode slice

>> Beispiel > arbeit-mit-arrays-2.fla Im Bild 1 wird concat benutzt Im Bild 2 wird slice benutzt Arrays Sortieren
Mit der Methode sort() kann man Arrays alphanumerisch sortieren Mit der Methode sortOn() kann man sog. Indizierte Arrays nach vorgegebenen Feldern sortieren. Das Feld oder die Felder ist der erste Parameter Jedes Element eines indizierten Arrays hat die Form:

{eigenschaft1:wert1, eigenschaft2:wert2 } Als zweiter Parameter fr sortOn() kann man eine Option hinzufgen.

>> Beispiel > arbeit-mit-arrays-3.fla Skript im Bild 1 der Hauptzeitleiste.

Prof. Dr. Teresa Merino / Medieninformatik / Entwicklungswerkzeuge fr Interaktive Internet-Anwendungen / Flash und ActionScript

41

2. Das Ereignismodell
Event-Behandlung: Grundlegendes
Einfhrung - Eingebaute und selbst definierte Events Technische Hintergrnde Schritte fr die Event Behandlung o Ereignisname und Ereignistyp feststellen o Ereignis-Funktion schreiben (Event Listener) o Ereignis registrieren (Ereignis und Instanz) verbinden

berblick ber die in AS eingebauten Ereignisse


Grundlegende Ereignisse o Nutzer-Ereignisse: Maus-,Tastatur-, Touch und Gesten-Ereignisse, o Display-Ereignisse: Sie geschehen, wenn Instanzen auf dem Bildschirm gezeigt oder gelscht werden. o Zeitereignisse: Ereignisse, die durch das Vergehen der Zeit ausgelst werden. o Netz-Ereignisse: Sie werden durch Netzoperationen ausgelst. Weitere Ereignisse o Ereignisse zur Fehlerbehandlung o Gerte-Ereignisse: fr die Einbindung von Kamera und Mikrofon

Eventbehandlung in der Praxis


Mausereignisse fr Schaltflchen (SimpleButton) Mausereignisse fr MovieClips Tastaturereignisse Zeitereignisse

Fortgeschrittene Themen rund um Events


Ziel eines Events Event Listener Prioritt Event Listener und Speicherverwaltung: Garbage Collection Ereignisse in der Display-Hierarchie

Eigene Ereignisse definieren (custom events)


Die Klasse, die den Event implementiert. Die Klasse, die den Event auslst. Die Nutzung des neuen Event in einer Anwendung.

42

Event-Behandlung: Grundlegendes Einfhrung


Wir lernen in diesem Kapitel die grundlegenden Aspekte der Ereignisbehandlung und folgen dabei unter anderem den Ausfhrungen von Colin Moock in seinem Buch Essential ActionScript 3.0.

In AS3 unterscheidet man zwei grundlegende Typen von Ereignissen: o Eingebaute Ereignisse (built-in events): Sie entsprechen nderungen in der runtimeUmgebung (vom System oder vom Nutzer ausgelst). o Selbstdefinierte Ereignisse (custom events): Sie entsprechen nderungen im Zustand der Anwendung.

Auer fr Skripte in Frames der Zeitleiste wird die Ereignisbehandlung in AS3 grundstzlich mittels Listener durchgefhrt. Das gilt nicht nur fr Schaltflchen-Instanzen (Klasse: SimpleButton) und Instanzen der MovieClip-Klasse, sondern auch fr Instanzen aller AS-Klassen, die auf Ereignisse reagieren.

Technische Hintergrnde
Wenn etwas geschieht, erzeugt der Compiler ein Event-Objekt, d.h. eine Instanz der Klasse Event oder einer ihren Subklassen. TIPP: Das Ereignis hat in AS3 einen Namen. Dieser Name ist als Konstante der Event-Klasse (oder deren Subklassen) implementiert.

Die Event-Instanz wird an die verschiedenen Instanzen der Anwendung gereicht (Event dispatch). Der Compiler berprft, ob diese mit einer Listener-Funktion fr den Event verbunden sind. Merke: Die Verbindung geschieht mit Hilfe der Methode addEventListener() der Klasse EventDispatcher. Das hat zur Folge: nur Subklassen von EventDispatcher knnen auf Ereignisse reagieren.

Ist dies der Fall, ist das Ziel des Events (target) erreicht. Die Funktion wird ausgefhrt und in der Regel der Weg des Events beendet. TIPP: Die Event-Funktion bekommt als Parameter das Ereignis berreicht. So wei die Funktion auf welches Ereignis sie reagiert.

43

Schritte fr die Event Behandlung


Folgende Schritte sind notwendig:

1. Mit Hilfe der AS-Dokumentation feststellen, ob die gewhlte Instanz der Anwendung, z.B. eine Schaltflche, auf das gewnschte Ereignis reagieren kann und wie das Ereignis heit (Ereignisname). Damit ist die Feststellung des Ereignistyps verbunden. Beide (Name und Typ) werden fr die Event-Behandlung bentigt.

2. Event Listener schreiben. Der EL ist eine Funktion. Sie bekommt automatisch das Ereignisobjekt als Parameter bergeben und damit eine Reihe von Informationen, die fr die Event-Behandlung notwendig sein knnen. 3. Mit der Methode addEventListener() der Klasse EventDispatcher werden Instanz der Anwendung und Event Listener verbunden (anders ausgedrckt: der Listener wird registriert).

Dann muss man nur noch warten bis das Ereignis ausgelst wird.

44

Praktische Implementierung eines Listener in AS3: die erste drei Schritte 1. Schritt: Name und Typ des Events ermitteln
Als erstes mssen Sie den genauen Eventtyp und Eventnamen in AS3 ermitteln. Event-Objekte sind als Konstanten der Eventklasse oder einer ihrer Subklassen implementiert.

Wir suchen z.B. nach dem Event, das ausgelst wird, wenn der Nutzer auf die Maustaste drckt. Dafr schauen wir unter [Hilfe>ActionScript 3>Komponenten Referenzhandbuch>Alle Pakete>Flash.Events>Mouse Event>ffentliche Konstanten] Dort finden wir den Event CLICK. Er ist vom Typ MouseEvent.

Eine zweite Mglichkeit nach dem Event-Namen und nach dem Typ zu suchen ist von der Instanz der Anwendung auszugehen. Wir wollen z.B., dass eine Schaltflche auf einen Mausdruck reagiert. Dafr suchen wir in: [Hilfe>ActionScript 3>Komponenten Referenzhandbuch>Alle Klassen>Simple Button>Ereignisse>Vererbte Ereignisse] Dort finden wir den Event CLICK. Wir knnen nachschauen und feststellen, dass er vom Typ MouseEvent ist.

2. Schritt: Listener-Funktion fr die Event-Behandlung schreiben


Die praktische Implementierung von Listener in AS3 ist denkbar einfach.

Ein Listener ist nichts anderes als eine Funktion (Eventhandler), die ausgefhrt wird, wenn ein bestimmtes Ereignis geschieht.

Der zweite Schritt bei der Implementierung besteht darin, diese Funktion zu schreiben. Wichtig ist, dass die Event-Instanz der Funktion als Parameter bergeben wird. function listenerName (eventName:EventTyp):void { Anweisungen fr die Eventbehandlung; }

> Beispiel >> function clickHandler (e:MouseEvent):void { Anweisungen fr die Eventbehandlung; }


Merke: Der Name der Funktion und des Parameters zur bergabe des Event-Objekts sind frei gewhlt.

45

Praktische Implementierung eines Listener in AS3: letzter Schritt 3. Schritt: Listener-Funktion fr die Event-Behandlung mit der Instanz verbinden (registrieren)
Zum Schluss muss die Listener-Funktion mit der Instanz der Anwendung mittels der Methode addEventListner() verbunden werden: instanzName.addEventListener (event, listenerName);

> Beispiel >> meineTaste.addEventListener (MouseEvent.CLICK, clickHandler);

addEventListener() ist eine Methode der Klasse EventDispatcher und hat zwei
notwendige Parameter: den Event (wir brauchen den vollstndigen Ereignisnamen in AS, z.B. MouseEvent.CLICK) und den Eventhandler bzw. Funktion (Listener).

Das bewirkt: Wenn das Ereignis event ausgelst wird, und die Instanz InstanzName erreicht, reagiert diese mit der Ausfhrung der Funktion listenerName.

TIPP: Nicht mehr bentigte Listener sollten mit der Methode removeEventListener() von der Instanz wieder getrennt und so aus der Event-Liste gelscht werden, sonst verweilen sie in Speicher und knnen zu Problemen fhren.

46

berblick ber die in AS eingebauten Ereignisse Einfhrung


Einen berblick ber die in AS3 implementierten Events bekommen Sie in der Flash-Hilfe im Buch ActionScript 3.0 Komponenten unter [alle Pakette > flash.events].

Fr welche Klassen bestimmte Events implementiert sind, knnen Sie in der Dokumentation der Klasse nachschauen. Sie mssen nur den Namen der Klasse kennen oder wissen, in welchem Paket sie implementiert ist.

berblick
Zum besseren berblick knnen wir die eingebauten Ereignisse begrifflich in folgende Kategorien aufteilen:

Grundlegende Ereignisse o Nutzer-Ereignisse: Maus- und Tastaturereignisse o Display-Ereignisse: Sie geschehen, wenn Instanzen auf dem Bildschirm gezeigt oder gelscht werden. o Zeitereignisse: Ereignisse, die durch das bloe Vergehen der Zeit ausgelst werden. o Netz-Ereignisse: Sie werden durch Netzoperationen ausgelst.

Weiterfhrende Ereignisse o Ereignisse zur Fehlerbehandlung o Gerte-Ereignisse: fr die Einbindung von Kamera und Mikrofon

Wie es in diesem Kapitel weiter geht


Was wir nicht behandeln Die fl-Events fr fertige Flash-Komponenten behandeln wir nicht. Die Ereignisse zur Fehlerbehandlung und die Gerte-Ereignisse behandeln wir nicht.

Was wir behandeln Wir gewinnen erste Erkenntnisse ber die hier genannten grundlegenden Ereignisse. Wir schauen uns einige praktische Beispiele an und zwar zu Mausereignissen, Tastaturereignissen und Timerereignissen. Spter in der Vorlesung werden im Kontext weitere Event Listener fr Display-Ereignisse und fr Netz-Ereignisse gezeigt.

47

berblick ber die Nutzer- und ber die Display-Ereignisse Nutzer-Ereignisse


Sie sind als ffentliche Konstanten fr Display-Objekte in folgenden Klassen implementiert: MouseEvent Diese Klasse implementiert alle Ereignisse, die durch Nutzung der Maus ausgelst werden. TouchEvent Mit der TouchEvent-Klasse knnen Sie Ereignisse auf Gerten verarbeiten, die den Benutzerkontakt mit dem Gert erkennen (z. B. ein Finger auf einem Touchscreen). GestureEvent Mit der GestureEvent-Klasse knnen Sie Mehrfingerereignisse bei Gerten mit Erkennung komplexer Benutzergesten (z. B. Berhren eines Touchscreens mit zwei Fingern) verarbeiten. KeyboardEvent Diese Klasse implementiert Ereignisse, die durch Nutzung der Tastatur ausgelst werden. FocusEvent Diese Klasse implementiert Ereignisse, die sich auf den Erhalt bzw. Verlust des Focusses beziehen und durch Nutzung der Tastatur oder der Maus ausgelst werden knnen. TextEvent Diese Klasse implementiert die Ereignisse LINK und TEXT_INPUT.

Display-Ereignisse
Sie sind direkt in der Klasse Event implementiert und werden ausgelst, wenn sich nderungen im Display bzw. in der Display-Liste ereignen. Darber hinaus muss in diesem Zusammenhang die Klasse FullscreenEvent erwhnt werden. Sie implementiert nur ein Ereignis. Der Flash Player lst ein FullScreenEventObjekt aus, wenn der Vollbildmodus fr die Bhne aktiviert bzw. deaktiviert wird.

Mit den Display-Klassen und deren Ereignissen werden wir uns spter im Kontext beschftigen.

48

berblick ber die Zeit- und ber die Netz-Ereignisse Zeitereignisse


Netzereignisse und Zeitereignisse sind teilweise verwandt, da die Zeit ein entschiedener Faktor in Netzvorgngen ist. Zeitereignisse sind als ffentliche Konstanten in folgenden Klassen implementiert: TimerEvent Diese Klasse implementiert Ereignisse fr Instanzen der Klasse Timer. Sie erlaubt damit die Ausfhrung von Funktionen in bestimmten Zeit-Intervalen hnlich wie die globale Funktion setInterval() aus AS2. ProgressEvent Diese Klasse implementiert Ereignisse fr die Steuerung von Download-Vorgngen

Netzereignisse
Sie werden bei Netzwerkoperationen ausgelst. Sind unter anderem als Konstante folgender Klassen implementiert: Event Manche wichtigen Ereignisse bei Netzwerkoperationen sind direkt in der Klasse Event implementiert z.B. INIT und COMPLETE. DataEvent DataEvents werden ausgelst, wenn Textdaten aus einer URL komplett herunter geladen wurden. HTTPStatusEvent Diese Klasse implementiert den Event HTTP_STATUS. Dieses Ereignis speichert den Zustand einer http-Verbindung. NetStatusEvent Flash sendet NetStatusEvent-Objekte, wenn ein NetConnection-, NetStream- oder SharedObjectObjekt seinen Status meldet.

49

Praktische Beispiele fr Maus-Ereignisse Maus-Ereignisse fr Schaltflchen-Instanzen >> Beispiel > button-ereignisse.fla Das Skript ist im ersten Frame der Zeitleiste Alle Mouse-Ereignisse sind fr die Schaltflche Button1 implementiert. Da einige Ereignisse mit anderen inkompatibel sind, sind einige Listener durch Kommentierung ausgeschaltet. Maus-Ereignisse fr MovieClip-Instanzen
>> Beispiel > movieclip-mouse-ereignisse.fla

Die Eventbehandlung ist in Frame 2 der Zeitleiste in Form von drei Listener-Funktionen implementiert:

1)

Die Erste fr das Ereignis MouseEvent.MOUSE_DOWN startet mittels play() die Animation im MovieClip. die Zweite fr das Ereignis MouseEvent.MOUSE_MOVE bewegt die Clip-Instanz mit dem Mauszeiger. TIPP: Dieser Listener wurde nicht mit der Clip-Instanz verbunden sondern mit der Bhne (gespeichert in der neuen AS-Eigenschaft stage) TIPP: Die Bewegung findet nur statt, wenn die Maustaste geklickt gehalten wird. Das kann sehr bequem mit der Konstante buttonDown, die eine Eigenschaft der Klasse MouseEvent ist, programmiert werden. Die Dritte fr das Ereignis MouseEvent.MOUSE_UP hlt die Animation im MovieClip an.

2)

3)

50

Praktisches Beispiel fr Tastatur-Ereignisse Die Klassen Keyboard und Keyboard-Event


Mit diesen beiden Klassen kann man auf einfache Weise die Tastatur-Steuerung in einer FlashAnwendung programmieren. Die Klasse Keyboard entspricht in etwa die Klasse Key aus ActionScript 2 Die Klasse KeyboardEvent gehrt zu den neuen Event-Klassen in ActionScript 3.

Eigenschaften der Keyboard-Klasse


Die Keyboard-Klasse bietet eine Reihe statischer Eigenschaften (Konstanten), die den Tastencodewert der verschiedenen Tasten beinhalten und damit die Programmierung einer Tastatursteuerung ermglichen. Die Liste der Konstanten finden Sie unter: [Hilfe>ActionScript3>KomponentenReferenzhandbuch>Alle Klassen>Keyboard>Eigenschaften]

TIPP: Mit der Eigenschaft keyCode der KeyboardEvent-Klasse lsst sich feststellen, welche Taste als letzte gedrckt wurde.

TIPP: Damit ein Objekt Keyboard-Ereignisse empfngt, muss es den Focus bekommen. Dies kann man mit der Eigenschaft focus der Klasse Stage einstellen.

>> Beispiel > key-Ereignisse.fla Die Funktionalitt ist in Frame 2 der Hauptzeitleiste programmiert. Die ersten zwei Zeilen sorgen dafr, dass das gewnschte Objekt (scheibe1) den Focus bekommt aber kein hsslicher gelber Rahmen um das Bild erscheint. Der Eventlistener fr den Event KEY_DOWN prft, welche Taste gedrckt wurde und handelt entsprechend.

51

Praktisches Beispiel fr Zeit-Ereignisse Beispiel >> Beispiel > zeitausgabe-mit-timer.fla Im Frame 1 sind die Hilfsfunktionen zeitAusgeben() und nullSchreiben() implementiert. In Frame 2 ist die eigentliche Funktionalitt mit einem Timer-Objekt realisiert. Zuerst wird die Instanz der Klasse Timer erstellt und mit der Methode start() gestartet. Die zwei Parameter im Konstruktor bedeuten: Abstand der Timer-Ereignisse in Millisekunden, Wiederholung der Timer-Ereignisse (0 bedeutet ohne Ende wiederholen) Der Eventlistener timerHandler() wird mit dem Timerobjekt fr das Ereignis Timer registriert. Der Eventlistener wird implementiert: er ruft die Funktion zeitAusgabe() auf. Mittels CLICK auf die Stop-Taste kann die Zeitausgabe gestoppt werden.

52

Ziel eines Events Ziel eines Events


Das Ziel eines Events, das heit die Instanz, die vom Event erreicht wird, ist in der Eigenschaft bzw. Instanzvariablen target gespeichert, die alle Event-Klassen von der Klasse Event erben.

Dadurch kann das Ziel des Events innerhalb der Eventlistener-Funktion gesteuert werden.

>> Beispiel (Quelle: moock.org./eas3/examples) > FileLoader.fla, FileLoader-Daten.txt, FileLoader.as FileLoader.fla: Die Datei ist leer, lediglich die Klasse FileLoader ist als Dokumentklasse unter [Einstellungen fr Verffentlichungen > AS3] eingetragen. FileLoader-Daten.txt: Hier ist einfach ein Text gespeichert. Klasse FileLoader.as: o Notwendige Packages werden importiert o Die Dokumentklasse erstellt im Konstruktor einen Feldtext und eine URLLoader-Instanz o Im Konstruktor wird auch der Eventlistener fr das Event COMPLETE registriert. o Die Methode completeListener ist ein EventListener, hier wird die Eigenschaft target benutzt, um die es jetzt geht. Unterschied zwischen target und currentTarget
Fr Display-Klassen unterscheidet AS zwischen target (das eigentliche Ziel des Ereignisses) und currentTarget (sein mit dem Listener registrierten Container)

>> Beispiel > target-currentTarget.fla In der Bibliothek (ffnen mit [F11]) befindet sich der MovieClip Maus_mc. Der Clip beinhaltet das Bild Maus_bmp und die Schaltflche Scheibe. Im Frame 1 ist die Eventbehandlung fr Maus_mit_Scheibe programmiert. Wenn der Nutzer die klickt unterscheidet das Programm zwischen target und currentTarget.

53

Prioritt bei der Event-Behandlung Bedeutung und Handhabung


Wenn mehrere Event-Listener fr dasselbe Ereignis mit einer Instanz der Anwendung verbunden sind, werden sie normalerweise in der Reihenfolge der Registrierung ausgefhrt.

Die Reihenfolge der Ausfhrung kann allerdings durch Setzung des optionalen Parameters priority in der Methode addEventListener() gendert werden. Je hher die Zahl um so eher wird die Funktion ausgefhrt.

>> Beispiel (Quelle: moock.org./eas3/examples) > Priority-Demo.fla, Priotriy.as Die Flash-Datei ist leer, es wird nur die Klasse Priority als Dokumentklasse in den Einstellungen fr Verffentlichungen angegeben. Die Klasse demonstriert auf einfache Weise die Nutzung des Parameters priority. berblick ber alle Parameter der Methode addEventListener() addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void

1. Pflicht: Kompletter Name des Events mit Angabe der Klasse und der Konstanten 2. Pflicht: Name der Eventlistener-Funktion 3. Optional: Legt fest, in welcher Phase des Ereignisses der Listener arbeitet. Damit haben wir uns noch nicht beschftigt. 4. Optional: Prioritt fr die Ausfhrung. Je hher der Wert um so frher wird die Funktion ausgefhrt 5. Optional: Legt fest, ob der Verweis auf den Listener stark oder schwach ist. Ein starker Verweis (Voreinstellung) verhindert, dass der Listener von einem Garbage Collector entfernt wird. Ein schwacher Verweis hingegen nicht. Ist der Listener nicht mehr im Gebrauch, wird er nach einer Zeit aus dem Speicher entfernt.

54

Event Listener und Speicherverwaltung Event Listener und Speicherverwaltung


Wenn eine Instanz der Anwendung einen Event Listener registriert, wird dieser in einem internen Array namens listener list gespeichert. Der Event Listener bleibt in der listener list und ist aktiv, bis er mit der Methode removeEventListener() der EventDispatcher-Klasse wieder gelscht wird. Wird der Listener nicht mit removeEventListener() aus der Liste entfernt, bleibt er auch dann aktiv, wenn die Instanz, die den Listener registriert, gelscht wurde. Deswegen sollten Sie, wenn Sie Instanzen lschen (=null setzen) dafr sorgen, dass alle Listener vorher entfernt werden.

>> Beispiel > zeitausgabe-mit-timer.fla Programm laufen lassen und auf die Schaltflche STOP drcken, die Zeitausgabe stoppt. FrameSkript im Frame 2 ffnen. Dort wird mit removeEventListener die Listenerfunktion entfernt und erst danach das Timerobjekt uhr gelscht. Test: Entfernung des Listener auskommentieren und Programm laufen lassen, die Zeitausgabe kann so nicht gestoppt werden, weil der Listener weiter ausgefhrt wird, auch dann, wenn das Objekt gelscht wurde.

TIPP: Nur wenn Sie einen schwachen Verweis eingestellt haben, wird der gestrandete Listener vom Garbage Collector automatisch gelscht; allerdings nur dann, wenn der Speicher so knapp geworden ist, dass der Garbage Collector aktiviert wird.

55

TIPP: Garbage Collection Wie funktioniert die Garbage Collection


Wenn Instanzen in AS nicht oder nicht mehr zugnglich sind (z.B. weil die Variable, die sie beinhaltete, einen anderen Wert bekommt) werden sie fr die Garbage Collection frei gegeben und aus dem Speicher entfernt.

Die Entfernung geschieht aber nicht unmittelbar sondern in sog. garbage collection cycles. Ein solcher Zyklus startet, wenn der benutzte Speicher sich dem Verfgbaren nhrt. Dies kann vom Programmierer nicht beeinflusst werden.

>> Beispiel (Quelle: moock.org./eas3/examples) > GarbageCollectionDemo.fla, GarbageCollection.as

Im Konstruktor der Klasse GarbageCollection werden ein Timerobjekt fr die Erstellung von Textfeldern und ein Sprite fr die Ausgabe im Ausgabefenster erstellt.

Das Spriteobjekt ist nicht referenziert und daher fr die Garbage Collection frei gegeben. Allerdings wird das Objekt erst gelscht, wenn der Speicher voll genug ist.

56

Ereignisse und die Display-Hierarchie


Wenn in Flash ein Ereignis ausgelst wird, erreicht es nicht nur sein Ziel sondern auch alle Vorfahren in der Display-Hierarchie.

Das Auslsen und Senden (Dispatch) der Ereignisse geschieht fr Display-Objekte in drei Phasen: o o o

Capture: Vorfahren werden benachrichtigt Target: Das eigentliche Ziel wird benachrichtigt Bubbling: die Vorfahren werden darber benachrichtigt, dass das Ereignis beim Ziel richtig angekommen ist.

Mit diesem Thema beschftigen wir uns spter, wenn wir Kenntnisse ber die Display-Hierarchie selbst gewonnen haben.

57

Eigene Events definieren (custom events) Voranmerkung


Wir werden diese Technik anhand eines Beispiels von Colin Moock (Quelle: moock.org./eas3/examples) kennen lernen. Das Beispiel ist hier zum besseren Verstndnis etwas vereinfacht. In diesem Beispiel geht es darum, ein neues Schalter-Ereignis mit einer eigenen Event-Subklasse zu implementieren.

Die Klasse, die das neue Event implementiert


Als erstes bentigen wir eine Klasse, die das neue Event implementiert: ToggleEvent. Die neue Event-Klasse muss die Klasse Event oder ggf. eine ihrer Subklassen erweitern. Der Event-Name wird als statische Konstante der Klasse implementiert und ist vom Typ String. Der Name der Konstante wird vereinbarungsgem gro geschrieben, der Inhalt der Konstanten ist eine Zeichenkette.

>> Beispiel > ToggleEvent.as Das Event ist als Konstante TOGGLE definiert. Im Konstruktor wird der Konstruktor der Superklasse (die Klasse Event) aufgerufen, zustzlich bekommt die neue Klasse die Instanz-Variable isOn. Die Klasse, die das Event auslst und behandeln kann
Als zweites bentigen wir eine Klasse, die das neue Event auslst: ToggleSwitch Diese Klasse lst das Event mit Hilfe der Methode dispachtEvent() der Klasse EventDispatcher aus und muss daher die Klasse EventDispatcher oder eine ihrer Subklassen implementieren (in diesem Fall Sprite). Wichtig ist, dass nur die Instanz, die das Event auslst, dieses auch mit einem Listener behandeln kann.

>> Beispiel > ToggleSwitch.as In dem Konstruktor wird der Wert der isOn Variablen auf false gesetzt (als Voreinstellung). Die Methode toggle() ndert den Wert des Schalters und lst das TOGGLE-Event aus.

58

Eigene Events definieren (custom events): Fortsetzung Nutzung des neuen Event in einer Anwendung
In diesem Beispiel werden die neuen Klassen ToggleEvent, die das Event implementiert, und ToggleSwitch, die das Event auslst und behandeln kann, wiederum in einer Klasse genutzt: ToggleApp. Im Konstruktor der Klasse ToggleApp wird eine Instanz der Klasse ToggleSwitch erzeugt und die Eventbehandlung dafr implementiert. Die Eventlistener-Funktion gibt lediglich eine Meldung im Ausgabefenster aus mit der Information, ob der Schalter ein- oder ausgeschaltet wird. Das neue Event wird letzten Endes durch die Schaltflche Schalter1 mit Hilfe des Events MouseEvent.CLICK ausgelst. Dies ist typisch fr selbst definierte Events: die Auslsung geschieht mittelbar ber die Auslsung eines eingebauten Events. TIPP: Die Schaltflche befindet sich auf der Bhne in der Datei ToggleApp-Demo.fla

>> Beispiele: ToggleApp.as und ToggleApp-Demo.fla In ToggleApp.as wird eine Instanz der Klasse ToggleSwitch erstellt, mit einem Listener fr das Event TOGGLE verbunden und die Listener-Funktion implementiert. Die Methode toggle der Instanz toggleSwitch wird durch Click auf die Schaltflche Schalter1 ausgefhrt und damit das Event TOGGLE ausgelst. In ToggleApp-Demo.fla befindet sich auf der Bhne die Schaltflche Schalter1, darber hinaus ist die Datei ToggleApp.as als Dokumentklasse eingegeben. Die Schaltflche Schalter1 wird in der Klasse ToggleAp benutzt. Das ist nicht sehr sauber.
Prof. Dr. Teresa Merino / Medieninformatik / Entwicklungswerkzeuge fr Multimedia-Anwendungen / Flash und ActionScript

3. Klassen definieren
Einfhrung
OOP und funktionelle Programmierung mit ActionScript Eine besondere Klasse: die Dokumentklasse

Klassendefinition in der Praxis: Virtueller Zoo


Ein bisschen Theorie: Klassen, Verzeichnisstruktur und Packages Package und Verzeichnisstruktur im Beispiel Virtual Zoo Definition der ersten Klassen des Virtuellen Zoos Modifizierer fr Klassen

59

Die Konstruktor-Funktion
Theorie und praktische Beispiele Objekte erstellen mit dem Operator new() TIPP: Schlsselwort import

Eigenschaften bzw. Instanzvariablen


Theorie: Syntax und Modifizierer Praktisches Beispiel im virtuellen Zoo

Methoden und Argumente


Theorie o Syntax o Modifizierer fr Methoden o Signatur einer Methode Argumente in der Praxis (Beispiel Virtueller Zoo) Methoden in der Praxis (Beispiel Virtueller Zoo)

AS-Klassen und die Flash-Anwendung


Die Anwendung und die Dokumentklasse Besonderheiten der Dokumentklasse Skripte in der Zeitleiste TIPP: Der Klassenpfad

Abschlussbeispiel: der Virtuelle Zoo Weiterfhrende Themen: Wichtige Infos zur Vererbung
Klassen erweitern und Methoden berschreiben Das Schlsselwort super Interfaces

60

Einfhrung OOP und funktionelle Programmierung mit ActionScript


AS3 ist eine Programmiersprache, die die Objektorientierte Programmierung, die in AS1 nur rudimentr integriert ist und in AS2 eine Option neben der funktionellen Programmierung darstellt, in den Mittelpunkt stellt.

Die Erstellung eines AS3-Programms beginnt mit einer Design-Phase, in der Klassen definiert und gestaltet werden, die die Programmfunktionalitt umsetzen sollen.

Nach der Designphase werden die Klassen programmiert. Klassen werden in Dateien mit der Endung .as gespeichert. Datei, Klasse und Konstruktor der Klasse mssen denselben Namen tragen. TIPP: Vereinbarungsgem fngt dieser Name mit einem Grobuchstaben an.

Wenn man mit Flash als Entwicklungsumgebung arbeitet, bentigt man darber hinaus mindestens eine Flash-Datei (Endung fla), in die die Klassen kompiliert werden (Endung swf oder exe). Das ist die Datei, die im Browser (swf) oder auf dem Desktop (exe) ausgefhrt wird.

Eine rein funktionelle Programmierung oder eine gemischte Vorgehensweise sind allerdings mit ActionScript und Flash nach wie vor mglich und sogar fr kleinere Anwendungen oder Animationen empfehlenswert.

Eine besondere Klasse: die Dokumentklasse


Eine besondere Klasse ist die Hauptklasse, in Flash Dokumentklasse genannt. Sie bietet den Startpunkt (program point of entry) fr die Anwendung. Seit der Sprachversion AS3 ist es mglich eine solche Dokumentklasse zu erstellen.

Die Dokumentklasse wird als solche in die Flash-Datei an eine bestimmte Stelle eingegeben (Einstellungen fr Verffentlichung). Die Flash-Anwendung ist dann eine Instanz dieser Klasse. Wenn die Flash-Datei gestartet wird, wird die Instanz der Dokumentklasse ausgefhrt.

Wird eine solche Klasse nicht vom Programmierer erstellt (z.B. weil der Programmierer sich fr die funktionelle Programmierung entschieden hat), erzeugt Flash bei der Kompilierung der swfDatei automatisch eine Dokumentklasse.

Klassendefinition in der Praxis: Virtuelles Zoo Beispiel Virtual Zoo


Dieses Kapitel folgt im Wesentlichen den Ausfhrungen von Colin Moock in seinem Buch Essential ActionScript 3.0.

61

Hier werden die Grundlange der OOP mit AS anhand einer beispielhaften Anwendung Virtual Zoo erlutert. Quelle der Beispiel-Dateien ist moock.org./eas3/examples.

Ein bisschen Theorie: Klassen, Verzeichnisstruktur und Packages


Unsere Beispiel-Anwendung ist ein virtueller Zoo. Die Hauptklasse oder Dokumentklasse heit VirtualZoo. Die zugehrige Datei heit VirtualZoo.as, genau wie die Klasse.

Bevor die Dokumentklasse oder berhaupt die Dateien fr die Anwendung erstellt werden, muss man sich Gedanken ber die Verzeichnisstruktur machen: wo genau werden die verschiedene Dateien gespeichert?

Um die Klassen einer Anwendung besser strukturieren und das Programm besser pflegen zu knnen, benutzt man in AS sog. Packages. Verzeichnisstruktur und Packages entsprechen sich gegenseitig; sie sind sozusagen zwei Seiten derselben Medaille.

Ein Package wird mit dem Schlsselwort package definiert:

package nameDesPackage { // Hier die Klassendefinition }


Der AS-Kompiler sucht eine Klasse, die zu einem Package gehrt, in einem Verzeichnis, das denselben Namen hat wie das Package und zwar relativ zum Verzeichnis, wo die Kompilation stattfindet (wo sich die fla-Datei befindet).

TIPP: Packages sind schon seit AS2 mglich aber nicht Pflicht. Seit AS3 ist das Schlsselwort package vor einer Klassendefinition Pflicht.

62

Package und Verzeichnisstruktur im Beispiel Virtual Zoo Package und Verzeichnisstruktur des virtuellen Zoos
Wir knnen unsere Klasse VirtualZoo in ein Package namens zoo packen. Der Name des Packages muss in der Verzeichnisstruktur enthalten sein. Darber hinaus empfiehlt es sich ein source von einem deploy-Verzeichnis zu unterscheiden, damit Quellen und kompilierte Dateien auseinander gehalten werden knnen.

Im folgenden Verzeichnis wird die Dokumentklasse gespeichert:

virtualzoo \ source \ zoo \ VirtualZoo.as


TIPP: Wollen Sie nicht mit Packages arbeiten und alle Klassen und fla-Dateien im selben Verzeichnis speichern, mssen Sie das Schlsselwort package OHNE Bezeichnung eines Konkreten Packages angeben.

Konventionen fr die Namensgebung von Packages


Vereinbarungsgem wird der Name eines Package klein geschrieben (der Name einer Klasse dagegen gro).

Es gilt noch folgende Konvention fr die Namensgebung: Der Name eines Package beginnt bei professionellen Anwendungen oft mit dem Domain-Namen des Herstellers, gefolgt von einer Bezeichnung fr eine Klassengruppe, zum Beispiel:

de.merino.bezeichnungKlassenGruppe.
Das hat den Vorteil, dass der Name des Package unverwechselbar ist und damit die Klassen in xBeliebiegen Anwendungen wieder verwendbar sind, ohne dass es Namenkonflikte gibt.

Letzteres implementieren wir aber der Einfachheit halber in unser erstes Beispiel nicht.

63

Definition der ersten Klassen des Virtuellen Zoos Definition der Dokumentklasse
ActionScript bietet das Schlsselwort class fr Klassendefinitionen. Das Schlsselwort package gefolgt vom Namen des Packages wird vorangestellt. >> Beispiel > package zoo { class VirtualZoo { } }
Zur Erinnerung: Die Klassen-Definition wird in einer Datei mit der Endung as gespeichert, die so heit, wie die Klasse.

TIPP: Der vollstndige Name der Klasse nach dieser Definition beinhaltet den Namen des Package und ist zoo.VirtualZoo

Eine zweite Klassendefinition


Unsere Beispiel-Anwendung wird mit einer zweiten Klasse VirtualPet ergnzt.

>> Beispiel > package zoo { class VirtualPet { } }

Diese Definition wird in der gleichnamigen Datei im Verzeichnis zoo gespeichert. Der vollstndige Name der Klasse ist zoo.VirtualPet.

64

Modifizierer fr Klassen Theorie: Modifizierer fr Klassen in ActionScript


ActionScript 3 kennt folgende Modifizierer (access control modifiers) fr Klassendefinitionen (sie werden dem Schlsselwort class vorangestellt):

public: die Klasse ist auch auerhalb des Package zugnglich. Wichtig! Die Hauptklasse einer Anwendung muss public sein. internal: die Klasse ist nur fr Klassen innerhalb desselben Package zugnglich.

Wird kein Modifizierer angegeben, ist die Klasse internal (Voreinstellung)

Darber hinaus gibt es den Modifizierer dynamic fr dynamische Klassen. Ausserdem gibt es den Modifizierer final: final-Klassen knnen nicht redefiniert werden (overriding). Dazu spter mehr.

Ergnzung der Klassen-Defintionen im Virtuellen Zoo


Die Dokumentklasse wird mit dem Modifizierer public, die VirtualPet-Klasse mit dem Modifizierer internal ergnzt.

>> Beispiel > package zoo { public class VirtualZoo { } }

package zoo { internal class VirtualPet { } }


65

66

Die Konstruktor-Funktion Theorie zum Konstruktor


Eine Klasse bentigt zunchst einmal einen Konstruktor, damit es im Programm mglich ist, Instanzen der Klasse zu erzeugen. Der Konstruktor oder die Konstruktor-Methode wird mit dem Schlsselwort function definiert und muss denselben Namen haben wie die Klasse. Sie ist technisch gesehen eine Funktion.

In der Konstruktorfunktion ist eine Typ-Angabe fr den Rckgabewert nicht notwendig bzw. sogar nicht erlaubt. Merke: Die Konstruktorfunktion gibt eigentlich ein Objekt der Klasse zurck!

Wenn der Programmierer keine Konstruktorfunktion schreibt, fgt der Compiler automatisch eine leere Konstruktorfunktion ein. Es empfiehlt sich jedoch, jede Klasse mit einer Konstruktorfunktion zu versehen.

Auch Funktionen knnen wie Klassen mit Modifizierern versehen werden. Die KonstruktorFunktion ist seit AS3 immer public. Man muss den Modifizierer nicht explizit angeben, es ist aber guter Stil, es zu tun.

Die Konstruktor-Funktionen der Klassen im Virtuellen Zoo


Nun knnen beide Klassen mit einem zunchst einmal leeren Konstruktor ergnzt werden.

>> Beispiel >

package zoo { public class VirtualZoo {

public function VirtualZoo () {}

} }

package zoo { internal class VirtualPet {


67

public function VirtualPet () {}

} }

68

Objekte erstellen Theorie


Objekte bzw. Instanzen werden mit dem Operator new erstellt, gefolgt vom Namen der Klasse aus denen das Objekt erstellt wird, zzgl. evtl. notwendiger Parameter. TIPP: fr bestimmte eingebaute Klassen (z.B. Number, String, Boolean, Array, Object, Function, XML) kann man auch Objekte erstellen mit der sog. Literal Syntax. Also einfach indem das Objekt aufgeschrieben wird. Beispiele: o 25.5 o Hallo o {farbe:blau, form:kugel}

Objekt erstellen im virtuellen Zoo


Im Konstruktor der Dokummentklasse VirtualZoo soll ein Objekt der Klasse VirtualPet erstellt werden.

> Beispiel >> package zoo { public class VirtualZoo { public function VirtualZoo () { new VirtualPet(); } } }

TIPP: Der vollstndige Name der Klasse ist zoo.VirtualPet; die vollstndige Befehlszeile wre also: new zoo.VirtualPet(); Wir knnen aber bei Aufruf des Konstruktors von VirtualPet die Angabe des Packages weglassen, weil sich beide Klassen im selben Package befinden.

TIPP: Nutzung von Klassen aus anderen Packages (import)

Wenn zwei Klassen nicht im selben Package sind und aber zusammenarbeiten sollen, ist beim Aufruf der Klassen der vollstndige Name der Klasse notwendig. Um dem Code leserlicher zu machen, kann man zu Begin einer Klassendefiniton mit dem Schlsselwort import eine Klasse oder ein ganzes Package importieren.

>> Beisipiel > package zoo { import flash.media.sound public class VirtualZoo {
69

public function VirtualZoo () { new Sound(); } } }

Eigenschaften einer Klasse Theorie


Eigenschaften oder Instanz-Variablen sind Variablen einer Klasse, in denen im Prinzip der Zustand der einzelnen Objekte bzw. Instanzen gespeichert wird. Sie werden mit dem Schlsselwort var bzw. ggf. const deklariert.

Es gibt weiterhin Variablen, in denen der Zustand der Klasse als ganzes gespeichert wird. Es sind statische Eigenschaften.

Es gibt folgende Modifizierer fr Variablen bzw. Konstanten innerhalb von Klassendefinitionen: o public: Variable zugnglich in- und auerhalb des Package o internal (neu ab AS3): Variable gltig nur innerhalb des Package (Voreinstellung) o protected (neu ab AS3): Variable gltig nur fr die Klasse und deren Subklassen o private: Variable zugnglich nur innerhalb der Klassendefinition. o Auerdem knnen Variablen static sein. Damit speichern sie Werte fr die Klasse insgesamt.

Eigenschaften in unserem virtuellen Zoo


Die Tiere (VirtualPet) sollen einen Namen bekommen knnen, der in der Instanz-Variablen petName gespeichert werden soll. Diese Variable ist im Package gltig.

>> Beispiel > package zoo { internal class VirtualPet { internal var petName:String = Unnamed Pet

public function VirtualPet () {} } }

TIPP: Wenn Sie nicht sicher sind, welcher Modifizierer passt, nutzen Sie private.

70

Methoden und Argumente Theorie


Methoden werden mit dem Schlsselwort function erstellt, sie sind technisch gesehen Funktionen.

Methoden knnen, wie jede andere Funktion, Argumente in Form von Parametern annehmen und Rckgabewerte zurckgeben. Hier ist immer der Datentyp anzugeben.

Das gilt entsprechend fr die Konstruktor-Funktion, mit dem Unterschied, dass fr den Konstruktor kein Rckgabewert angegeben wird.

Methoden knnen genau wie Eigenschaften folgende Modifizierer bekommen: o public: zugnglich in- und auerhalb des Package o internal (Voreinstellung): im Package zugnglich o protected: in der Klasse und deren Subklassen zugnglich o private: nur in der Klasse zugnglich

Darber hinaus knnen Methoden mit folgenden Modifizierern versehen werden:

o static o final: Diese Methoden knnen nicht redefiniert werden (overriding)


TIPP: Wird kein Modifizierer angegeben, ist die Methode private. Es ist aber guter Stil, den Modifzierer explizit anzugeben.

TIPP: In OOP-Sprachen bilden die public Eigenschaften und Methoden einer Klasse das Interface der Klasse zur Auenwelt oder API (Applicaton Programming Interface).

Signatur einer Methode


Die sog. Signatur einer Methode ist der Name der Methode gefolgt von den Namen der Parameter. In AS3 beinhaltet die Signatur auch die Angaben der Datentypen fr die Parameter und fr den Rckgabewert.

71

Argumente in der Praxis Argumente im virtuellen Zoo


Wir wollen der Konstruktor-Funktion fr den VirtualPet den Namen des Tiers als Argument bergeben, so dass beim Erstellen der Instanz diese einen Namen bekommt:

>> Beispiel > package zoo { internal class VirtualPet { internal var petName:String = Unnamed Pet

public function VirtualPet (name:String) { petName = name; } } }

Entsprechend muss sich der Konstruktor der Klasse VirtualZoo ndern, denn dort wird eine Instanz der Klasse VirtualPet erstellt.

>> Beispiel > package zoo { public class VirtualZoo {

public function VirtualZoo () { new VirtualPet (Stan); } } }

Auerdem soll diese Instanz in einer Instanz-Variablen der Klasse VirtualZoo gespeichert werden. Somit haben wir problemlos Zugang dazu:

72

package zoo { public class VirtualZoo { private var pet:VirtualPet;

public function VirtualZoo () { pet = new VirtualPet (Stan); } } }

73

Methoden in der Praxis Methoden in der Klasse VirtualPet


Wir wollen die Klasse VirtualPet mit zwei public-Methoden versehen: eat () und getAge().

eat(numberOfCalories) benutzt die Instanz-Variable currentCalories und


rechnet sie hoch mit den aktuell geschluckten Kalorien

getAge() gibt das Alter des Tiers zurck indem sie die aktuelle Zeit mit der Zeit bei Geburt
des Tiers vergleicht. Die Geburtszeit muss in einer Instanzvariablen gespeichert werden.

>> Beispiel > VirtualPet.as package zoo { internal class VirtualPet { private var petName:String; private var currentCalories:int = 0; private var creationTime:Date;

public function VirtualPet (name:String) { creationTime = new Date(); petName = name; }

public function eat(numberOfCalories:int): void { currentCalories += numberOfCalories; }

public function getAge (): Number { var currentTime: Date = new Date();
var age: Number = currentTime.time creationTime.time;

74

return age } }

Fertig!
Die ActionScript-Klassen VirtualZoo und VirtualPet sind (so gut wie) fertig. Der virtuelle Zoo erstellt ein Tier namens Stan und speichert es in die Instanzvariable pet. Das virtuelle Tier hat einen Namen, einen Geburtsdatum (bzw. eine Geburtszeit) und kann fressen (Methode eat()). Auerdem ist es mglich, das Alter des Tieres zu erfahren (Methode getAge()) ABER: wie arbeiten die Klassen mit der Flash-Anwendung zusammen?

75

AS-Klassen und die Flash-Anwendung: die Dokumentklasse Die Anwendung und die Dokumentklasse
Die Hauptklasse oder Dokumentklasse einer mit AS programmierten OO-Anwendung muss als solche in die Flash-Datei eingegeben werden.

Das funktioniert ber: [ Einstellungen fr Verffentlichungen > Flash > ActionScript-Version > AS3 > Einstellungen > Dokumentklasse ]

Hier muss der vollstndige Name der Klasse angegeben werden, also mit den Paketnamen (falls vorhanden) aber OHNE Endung (ohne .as)

>> Beispiel > zoo.VirtualZoo

Besonderheiten der Dokumentklasse


Wenn die Flash-Datei gestartet wird, wird eine Instanz der Dokumentklasse erzeugt. Genaue genommen gilt: die Falsh-Datei (die luft) IST die Instanz der Dokumentklasse.

Deswegen muss die Dokumentklasse einer Flash-Anwendung als Subklasse von MovieClip oder von Sprite definiert werden (mit dem Schlsselwort extends, dazu gleich mehr). Als MovieClip nur dann, wenn Sie Frameskripte benutzen wollen (alle Regeln dazu in [Moock 07, S. 828]).

Entsprechend mssen wir unseren VirtualZoo wie folgt ergnzen:

package zoo { import flash.display.MovieClip;

public class VirtualZoo extends MovieClip { private var pet:VirtualPet;

public function VirtualZoo () { pet = new VirtualPet ("Stan"); } }


76

77

AS-Klassen und die Flash-Anwendung: Skripte in der Zeitleiste Skripte in der Zeitleiste
Man kann in Flash OOP-Programmierung mit der Programmierung der Zeitleiste kombinieren.

In Skripte der Zeitleiste knnen die Methoden der Dokumentklasse aufgerufen werden, da die Anwendung und damit die Zeitleiste nicht anderes sind als die Instanz der Dokumentklasse, die beim starten der Anwendung erzeugt wird.

In Skripte der Zeitleiste knnen Methoden anderer Klassen entsprechend aufgerufen werden.

>> Beispiel > VirtualZoo.fla In Frame 2 ist ein Skript, hier werden die Methoden getAge() und eat() der Klasse VirtualPet aufgerufen. Beide Methoden sind public und bilden die API der VirtualPet-Klasse. Auerdem wird die Instanzvariable pet der Klasse VirtualZoo genutzt. MERKE: Die Instanzvariable pet ist im Gegensatz zu den Methoden getAge() und eat() private also nur innerhalb der Klasse gltig. Sie kann in Frameskript genutzt werden, weil die Anwendung identisch mit der Instanz der Klasse VirtualZoo ist.
TIPP: Wenn OO-Programmierung zusammen mit Frame-Skripten zum Einsatz kommen und nur dann importiert der Compiler die fr die Frame-Skripte notwendigen Klassen nicht automatisch, diese mssen mit import-Anweisungen im Frame-Skript explizit importiert werden.

>> Beispiel > import flash.events.MouseEvent; import flash.display.SimpleButton;

TIPP: Der Klassenpfad


Befinden sich die Klassen in einem anderen Verzeichnis als die Flash-Datei (.fla bzw. .swf) muss in den Einstellungen fr AS der Klassenpfad angegeben werden; natrlich ohne die Unterverzeichnisse, die den Paketnamen entsprechen.

>> Beispiel > ./classes

Der Klassenpfad war ein wichtiges Werkzeug in AS2, da man auch ohne Pakete arbeiten konnte. In AS3 sollte man immer die Klassen in Paketen organisieren. Daher ist die Bedeutung des Klassenpfads relativiert. 78

Abschlussbeispiel: der Virtuelle Zoo


>> Beispiel (Quelle: moock.org./eas3/examples) > VirtualZoo.as, VitualPet.as, VirtualZoo.fla

VirtualZoo.as: Tipp: Die Klasse erweitert die Klasse MovieClip und muss sie vorher importieren. VirtualPet.as: Die Klasse hat drei private Eigenschaften und zwei public-Methoden. Merke: Diese Methoden knnen dann in der FlashAnwendung genutzt werden. VirtualZoo.fla: Einstellungen fr Verffentlichungen: Hier sind die Dokumentklasse und der Klassen-Pfad angegeben. Frame-Skript in Frame 2: Hier werden die Methode getAge() und eat() der Klasse VirtualPet aufgerufen. Zugang zur Instanz der Klasse VirtualPet haben wir ber die Instanzvariable pet der Klasse VirtualZoo Frame-Skript in Frame 2: Um die Schaltflchen und das Event zu nutzen mssen die entsprechende Klassen: flash.display.SimpleButton und flash.events.MouseEvent importiert werden.

79

Weiterfhrende Themen: wichtige Infos zur Vererbung Klassen erweitern und Methoden berschreiben
Um die Subklasse einer Basisklasse zu erstellen bzw. die Basisklasse zu erweitern, benutzt man das Schlsselwort extends.

Subklassen knnen die Methoden ihrer Superklassen benutzen (use), sie knnen auch ihre Superklassen erweitern (extension). Das ist in anderen Programmiersprachen auch so.

Wenn Methoden redefiniert werden sollen (technisch: overriding), muss man das Schlsselwort override benutzen (das ist neu ab AS3).

>> Beispiel >

public class B extends A { // override the superclasss method m() override public function m () { trace (Bs m() was called); } }
TIPP: Der Modifizierer muss fr beide Methoden gleich sein. In diesem Beispiel sind beide Methoden public.

TIPP: In AS3 knnen nur Instanz-Methoden redefiniert werden. Die Redefinition (overriding) funktioniert nicht fr Instanz-Variablen und auch nicht fr Statische Methoden und Statische Variablen.

Das Schlsselwort super


Die Methoden der Super- oder Basisklasse knnen in der Subklasse mit dem Schlsselwort super aufgerufen werden. Auerdem MUSS der Konstruktor der Superklasse im Konstruktor der Subklasse mittels super aufgerufen werden und zwar in der ersten Zeile. Gibt der Programmierer den Aufruf nicht explizit ein, wird er stillschweigend vom Compiler hinzugefgt.

>> Beispiel >

public class B extends A { public function B () {


80

// Invoke superClasss constructor method super (); } }

81

Interfaces
In ActionScript ist mehrfache Vererbung nicht mglich. Allerdings kann eine Klasse von einer Klasse erben und eine (andere) Schnittstelle implementieren.

Schnittstellen ermglichen es, die Programmentwicklung flexibler und effizienter zu gestalten. Sie knnen als eine Art Richtlinie verstanden werden: Sie deklarieren Methoden (inkl. ber- und Rckgabeparameter), ber die eine Klasse verfgen muss, kmmern sich jedoch nicht um die Definition. Das heit umgekehrt: Einer Klasse, die eine Schnittstelle implementiert, obliegt es selbst, auf welche Weise sie die bentigte Funktionalitt bereitstellt.

>> Beispiel > Einen praktischen Fall fr Schnittstellen lernen Sie in der Praktikumsaufgabe Zeitzonenwecker kennen

333Prof. Dr. Teresa Merino / Medieninformatik / Entwicklungswerkzeuge fr Multimedia-Anwendungen / Flash und ActionScript

4. Die Display-Hierarchie: Containers


Die alten und die neuen Display-Klassen
Display-Klassen bis Flash Player 8 (AS2, 2007): Die neuen Display-Klassen ab AS3: o berblick o Die Kern-Display-Klassen

Die drei Basis-Klassen der Display-Hierarchie


DisplayObject InteractiveObject (Subklasse von DisplayObject) DisplayObjectContainer (Subklasse von InteractiveObject)

Die Basis-Klasse DisplayObject und ihre Subklassen


Sie stellt die Funktionalitt fr alle grafischen Objekte zur Verfgung. Konkrete Subklassen: o MorphShape und StaticText (nur Flash) o Shape o Bitmap o Video

Die Basis-Klasse InteractiveObject und ihre Subklassen


Alle Klassen, die von InteractiveObject erben, sind in der Lage auf Maus- und Tastatur-Ereignisse zu reagieren. Konkrete Subklassen: o SimpleButton 82

o Textfield Texte mit AS zeigen und in der Laufzeit formatieren

Die Basis-Klasse DisplayObjectContainer und ihre Subklassen


DisplayObjectContainer implementiert die Funktionalitt aller Klassen, deren Instanzen als Container fr die anderen Display-Objekte (Shapes, Bitmaps, Videos, SimpleButtons und TextFields) fungieren. Alle grafischen Objekte werden in einem Container gezeigt. Die Container knnen beliebig verschachtelt werden.

83

Konkrete Subklassen: o o o o Stage Sprite MovieClip (als Subklasse von Sprite) Loader

Grafische Objekte auf dem Bildschirm zeigen in der Praxis


Schritte zum zeigen grafischer Objekten Die Display-Liste Die Wurzel der Display-Liste OOP und die Display-Liste Exkurs fr AS2-Kenner: Die Eigenschaft root

Container und Tiefen


Einfhrung Tiefen gezielt angeben Tiefen nachtrglich ndern

Objekte lschen Container-Ereignisse

84

Einfhrung: die alten und die neuen Display-Klassen Display-Klassen bis Flash Player 8 (AS2, 2007)
Flash/AS ist ein Entwicklungswerkzeug fr multimediale interaktive Anwendungen; eine der wichtigsten Aufgaben von Flash/AS ist daher die Darstellung und Steuerung von Medien (Bild, Text, Video) auf dem Bildschirm.

Bis Flash Player 8 standen dafr folgende Klassen zur Verfgung: o TextField Eine Klasse, die die Darstellung und Programmierung von dynamischen und Eingabentext ermglicht. Sie ist seit Version 5 (2000) dabei. o BitmapData Eine Klasse zur Darstellung und Steuerung von Pixel-Grafiken in Flash-Anwendungen. Sie ist seit Version 8 (2005) Teil der Sprache. o Video (mit NetConnection und NetStream) Drei Klassen zur Darstellung von externen Videofilmen in Flash-Anwendungen. Sie gehren seit Version 7 (2004) zum System. Die Videofilme mssen im Flash-Videoformat (flv) gespeichert sein. o Button Eine Klasse, die einfache interaktive Schaltflchen ermglicht. Historisch gesehen bedeutend (Buttons waren die ersten programmierbaren Elemente in Flash schon in der Version 2 von 1997) haben sie immer mehr Aufgaben an die MovieClips abgegeben und an Bedeutung verloren. o MovieClip Die wichtigste grafische Klasse bis Flash Player 8. Die MovieClip-Klasse ist ein Container fr grafische Objekte und Animationen.

85

Die neuen Display-Klassen seit AS3 berblick


In AS3 sind die Display-Klassen berarbeitet und die ganze Klassen-Struktur transparenter gestaltet worden. Dabei haben MovieClips ihre privilegierte Stellung verloren.

Abbildung: Die Display-Hierarchie (Quelle [Moock 07, S. 459])

TIPP: Die meisten Display-Klassen in AS3 finden Sie in der Dokumentation im Package

flash.display.
Colin Moock schlgt vor, die Display-Klassen in zwei Kategorien zu trennen [Moock 07, S.458]: o Klassen, die fr die direkte Darstellung von Medien auf dem Bildschirm sorgen, z.B. Bitmap oder TextField (core display classes) o Klassen, die untersttzende Information oder Funktionalitt liefern, z.B. Blendmode oder CapStyle (supporting display classes)

Die Kern-Display-Klassen
Die Kern-Display-Klassen sind in einer Hierarchie mit drei Hauptstrhnen arrangiert: o o o

Display bzw. Darstellung: Die Basisklasse heit DisplayObject und erbt von EventDistpacher, die ihrerseits direkt von Object erbt. Interaktivitt: Die Basisklasse heit InteraktiveObject und erbt von DisplayObject. Container bzw. Beinhaltung: Die Basisklasse heit DisplayObjectContainer und erbt von InteraktiveObject

86

Die drei Basis-Klassen der neuen Display-Hierarchie Die drei Basis-Klassen der Display-Hierarchie

DisplayObject, InteractiveObject und DisplayObjectContainer


sind die drei Basis-Klassen in der Display-Hierarchie.

Sie werden nicht von Programmierern genutzt, sondern implementieren grundlegende Funktionalitt, die von den anderen Display-Klassen geerbt wird.

Laut Colin Moock knnen sie als Abstrakte Klassen verstanden werden, allerdings gibt es in AS3 keinen echten Abstrakten Klassen.

Wie es in diesem Kapitel weiter geht: Wir beschftigen uns mit diesen drei Basis-Klassen und deren Subklassen. Wir beginnen mit DisplayObject.

TIPP: Der Normalfall bei etwas komplexeren AS-Anwendungen wird es sein, dass der Programmierer nicht nur die AS-Display-Klassen benutzt, sondern diese mit eigenen Klassen erweitert. Zum Beispiel er programmiert Textfelder mit besonderem Erscheinungsbild und besonderer Funktionalitt, die die Klasse TextField erweitern.

87

Die Basis-Klasse DisplayObject Grundlagen


DisplayObject ist die Basis-Klasse fr alle Display-Klassen, d.h. fr alle Klassen die grafische Objekte auf dem Bildschirm darstellen.

DisplayObject erbt von der Klasse EventDispatcher. Damit ist gesichert, dass grafische Objekte (z.B. Schaltflchen oder Texten) auf Ereignisse reagieren knnen. EventDispatcher erbt ihrerseits direkt von der Klasse Object. DisplayObject vererbt grundlegende Eigenschaften von grafischen Objekten wie z.B. x, y, width, height, rotation etc. Sie vererbt auch komplexer Eigenschaften und natrlich auch Methoden.

Beispiele fr Eigenschaften von DisplayObject


Die Anwendung von Filtern, Transformationen und Masken geschieht mit Hilfe der Eigenschaften filters, transform und mask. Wert der Eigenschaft ist jeweils ein Objekte mit den gewnschten Einstellungen. >> Beispiel fr die Eigenschaft transform > switch.fla Funktionalitt im Frame 1 und 2 der Zeitleiste Frame 2 implementiert die Eventbehandlung und ist jetzt noch nicht interessant. Hier kann man aber erkennen, wie die Variable farbe ihren Wert bekommt, was spter wichtig ist. Frame 1 implementiert die switch-Anweisung; dort wird mit der Eigenschaft transform.colorTransform gearbeitet. Darin wird jeweils ein Objekt der Klasse ColorTransform gespeichert.

Die Skalierung von Objekten geschieht mit Hilfe der Eigenschaften scaleX, scaleY und scale9Grid. >> Beispiel > grid9.fla Die Funktionalitt ist im Frame 1 der Zeitleiste. Die Eigenschaft scale9Grid definiert eine Rechteck innerhalb des grafischen Objektes. Die Skalierung findet nur innerhalb des Rechtecks statt. Der Rahmen wird nicht skaliert. Wenn die Grid-Eigenschaft nicht gesetzt wre, wrde alles proportional skaliert.

88

Methoden von DisplayObject Beispiel fr Kollisionserkennung


DisplayObject stellt Funktionalitt zur Verfgung, die alle grafischen Objekte gemeinsam haben. Zum Beispiel:

Kollisionserkennung mit den Methoden hittestObject() und hitTestPoint() >> Beispiel > hittestObject.fla. In Frame 1 werden drei Kreise als Instanz der Klasse Shape erzeugt und auf dem Bildschirm gezeigt. Der dritte Kreis wird in einem Sprite gezeigt, damit er beweglich gemacht werden kann. Hier befindet sich auch die Eventbehandlung fr den 3. Kreis In Frame 2 wird die Kollision berprft und ggf. eine Meldung im Ausgabefenster gezeigt

89

Konkrete Subklassen von DisplayObject


Als Subklassen von DisplayObject sind 5 Klassen implementiert, die keine weiteren Subklassen haben. In diesem Sinne nennt sie Colin Moock konkrete Klassen: o MorphShape, StaticText (Flash) o Shape, Bitmap, Video (AS) Diese fnf Klassen haben gemeinsam, dass ihre Instanzen keine Eventbehandlung erlauben. TIPP: Dies knnte sich theoretisch in der Zukunft ndern, da diese Klassen von DisplayObject erben, die ihrerseits die Klasse EventDispatcher erweitert.

MorphShape und StaticText


Die Klasen MorphShape und StaticText stellen Tweens bzw. Statischen Text dar. Die Instanziierung kann nur interaktiv mit Flash erfolgen, sie wird nicht mit AS programmiert.

Shape, Bitmap und Video


Die Klassen Shape, Bitmap und Video stellen respektiv Vectorgrafiken, Pixelgrafiken und Streaming Video dar. Instanzen knnen mit Flash interaktiv oder aber auch mit AS in der Laufzeit erzeugt werden.

>> Beispiel > Shape.fla Der Quellcode ist ausfhrlich auskommentiert. Funktionalitt ist im Frame 1 der Hauptzeitleiste. Es wird eine Instanz der Klasse Shape erstellt. Rahmen und Fllung werden mit Hilfe der Eigenschaft graphics gezeichnet. Hier ist ein Objekt der Klasse Graphics gespeichert, die die Methoden zum zeichnen und malen implementiert. Zum Schluss wird mit der Methode drawRect der graphics-Instanz die Figur gezeichnet. ACHTUNG! Damit die Figur (Instanz der Klasse Shape) auf dem Bildschirm zu sehen ist, muss sie einem Container-Obejkt mit addChild zugefgt werden. Dazu spter mehr!

>> Spter in der Vorlesung werden im Kontext Beispiele fr Bitmap und Video gezeigt.

90

Die Basis-Klasse InteractiveObject


Von der Klasse DisplayObject erben nicht nur die fnf angegebenen konkreten Klassen sondern auch die abstrakte Klasse InteractivObject.

InteractiveObject erweitert die Klasse DisplayObject und ist ihrerseits die Basis-Klasse fr zwei konkrete Klassen: o SimpleButton o Textfield

Diese Klassen, die von InteractiveObject erben, sind in der Lage, auf Maus- und TastaturEreignisse zu reagieren.

91

Konkrete Subklassen von InteractiveObject: SimpleButton SimpleButton


SimpleButton ist eine Klasse zur Erstellung von interaktiven Schaltflchen. Instanzen der Klasse SimpleButton knnen mit AS einfach mit Hilfe des Operators new in der Laufzeit erzeugt werden.

>> Beispiel (Quelle: moock.org./eas3/examples) > CustomSimpleButton-Demo.fla, CustomSimpleButton.as, ButtonDisplayState.as CustomSimpleButton-Demo o Funktionalitt ist im ersten Frame programmiert o Es werden zwei Schaltflchen erzeugt, eine mit der AS-Klasse simpleButton und eine mit der selbstdefinierten Klasse CustomSimpleButton o Die Event-Behandlung geschieht mit einem Listener Klasse CustomSimpleButton o Sie erweitert die Klasse SimpleButton. o Im Konstruktor wird eine Instanz der Superklasse erzeugt. Klasse ButtonDisplayState o Mit Hilfe dieser Klasse werden die verschiedenen Zustnde des Button als Rechtecke gezeichnet und in den entsprechenden Eigenschaften der Klasse gespeichert (Instanzvariablen)

92

Konkrete Subklassen von InteractiveObject: TextField Die Klasse TextField


Fr die Erstellung von Eingabe- und dynamischen Textfeldern stellt AS die Klasse Textfield zur Verfgung. Textfelder haben Eigenschaften, die ihr Erscheinungsbild bestimmen. Zum Beispiel knnen Sie mit der Eigenschaft TextField.text den Textinhalt bestimmen. Die TextField Klasse hat die Eigenschaft type. Textfelder knnen vom Typ TextFieldType.DYNAMIC oder TextFieldType.INPUT sein. Mit Dynamic werden dynamische Texte realisiert mit Input Eingabetexte. Als Subklasse von InteractiveObject sind Textfelder in der Lage, auf Ereignisse zu reagieren. Dazu spter mehr im Kapitel Interaktivitt

Dynamische Texte erstellen und in der Laufzeit formatieren


Texte knnen in der Laufzeit erstellt oder aus externen Quellen (Dateien oder eine Datenbank) importiert werden. Sie knnen in der Laufzeit formatiert werden und zwar mit drei Techniken: o Mit der Textformat-Klasse o Mit HTML-Tags o Mit CSS (dafr stellt AS die StyleSheet-Klasse zur Verfgung)

>> Beispiel 1 > TextField.fla Skripte sind direkt in der Hauptzeitleiste in der Ebene Aktionen programmiert Frame 1: Text erstellen, grundlegende Eigenschaften bestimmen, mittels addChild auf der Bhne zeigen Frame 2: Weitere Eigenschaften bestimmen Frame 3: Mit der Textformat-Klasse weitere Formatierung Frame 4: Formatierung nur fr einen Teil des Textes anwenden.

>> Beispiel 2 > HTML-Text.fla und HTML-Text.htm Der mit HTML formatierte Text wird richtig ausgeben (allerdings sind die Abstnde zwischen den aufgelisteten Punkten zu gro, warum das so ist, ist nicht klar)

>> Fr die Formatierung mit CSS gibt es auf der nchsten Seite ein Beispiel. Dort wird eine interne CSS-Instanz erstellt. Die Arbeit mit externen CSSDateien lernen Sie im Praktikum kennen.

93

Text mit eingebetteten Zeichenstzen formatieren Zeichensatz einbetten


Als Voreinstellung benutzt Flash die Fonts, die im System des Betrachters installiert sind. Ist der gesuchte Font im System nicht installiert, wird automatisch nach einem geeigneten Substitut gesucht.

Will man ausgefallene Fonts nutzen, die nicht in jedem System installiert sind, kann man diese in die SWF-Datei einbetten. Folgende Schritte sind dazu notwendig: 1. In der Bibliothek mit dem Men eine Neue Schriftart als Symbol anlegen. 2. Das Symbol fr die Schriftart mit dem Kontextmen fr AS exportieren (Befehl [Verknpfung])

Mit eingebetteten Zeichenstzen Text formatieren


Dafr wird die Eigenschaft embedFonts des Textes auf true gesetzt und dann entweder mit der Textformat-Klasse, mit HTML oder mit Style-Sheets der Text mit dem eingebetteten Font formatiert

>> Beispiel (Quelle: moock.org./eas3/examples) > Font-eingebettet.fla und Font-eigebettet.swf Die Schrift Vivaldi ist als Symbol in der Bibliothek zu finden. Sie ist in der swf-Datei eingebettet. Die Schrift muss in dem Rechner installiert sein, in dem die swf-Datei kompiliert wird. Die Kompilierung dauert etwas lnger und die Datei ist etwas grer, da sie die Schrift beinhaltet. Auf dem Rechner in dem die swf-Datei luft muss die Schrift nicht installiert sein Skript ist im 2. Frame der Zeitleiste und ausreichend kommentiert. Hier werden die drei Techniken zum Formatieren von Text in der Laufzeit (TextFormat-Klasse, HTML und Stylesheets intern) demonstriert.

94

Die Basis-Klasse DisplayObjectContainer Die Klasse DisplayObjectContainer: Grundlagen


DisplayObjectContainer ist wie TextField und SimpleButton zunchst einmal eine Subklasse der Klasse InteractiveObject.

Sie ist von ihrer Bedeutung her aber eine Abstrakte Klasse, die nicht direkt vom Programmierer genutzt wird, sondern die Funktionalitt aller Klassen implementiert, deren Instanzen als Container fr die andere Display-Objekte (Shapes, Bitmaps, Videos, SimpleButtones und TextFields) fungieren.

Container werden benutzt, um grafische Objekte im Display zu zeigen und ggf. auch um diese zu gruppieren und als Einheit zu steuern.

TIPP: Container knnen auch andere Container beinhalten.

Die Subklassen von DisplayObjectContainer


Es gibt 4 konkrete Klassen, die als Subklasse von DisplayObjectContainer implementiert sind: o Stage o Sprite o MovieClip (als Subklasse von Sprite) o Loader

Stage steht fr die Bhne der Flash-Anwendung. In einer Flash-Anwendung gibt es immer nur ein Bhnen-Objekt. Sprites und MovieClips sind Container fr grafische Elemente. MovieClips erben von Sprites und verfgen darber hinaus ber eine animierbare und programmierbare Zeitleiste Mit Loader werden externe Bitmaps und externe SWF-Filme in der Laufzeit geladen und auf der Bhne gezeigt. Mit Loader werden wir uns erst beschftigen, wenn wir das Thema externe Daten behandeln.

TIPP: MovieClips waren bis Flash 8 (AS2) praktisch das einzige oder mindestens das wichtigste Container-Objekt.

95

Objekte mit AS auf dem Bildschirm zeigen in der Praxis Schritte zum Zeigen von Objekten auf dem Bildschirm
Zur Erinnerung: Flash/AS ist ein Entwicklungswerkzeug fr Multimediale Interaktive Anwendungen. Eine der wichtigsten Aufgaben von Flash/AS ist die Darstellung (und Steuerung) von grafische Objekten bzw. Medien auf dem Bildschirm.

Um grafische Objekte mit AS auf dem Bildschirm zu zeigen sind zwei Schritte notwendig: 1. Das Objekt als Instanz der Display-Klasse bzw. einer ihrer Subklassen mit dem Operator new erstellen. Es kann sich dabei auch um eine selbst definierte Klasse handeln, die die ASDisplay-Klassen erweitert. 2. Die Instanz mit Hilfe der Methode addChild() der Klasse DisplayObjectContainer in ein Container-Objekt einfgen, dieses kann direkt die Bhne (eine Instanz der Klasse Stage) sein, oder ein anderes Container-Objekt (in der Regel ein Sprite oder ein MovieClip), das sich seinerseits auf der Bhne befindet.

>> Beispieldatei > displayContainer.fla Zuerst ein Blick auf die Bibliothek mit den drei MovieClip-Symbolen werfen. Verknpfung ffnen (Kontextmen > Verknpfung): die Symbole sind mit einer Klasse verbunden, die die Klasse Sprite erweitert. Wenn die Klasse nicht definiert ist (wie es in diesem Beispiel der Fall ist), erzeugt der Compiler diese Klasse automatisch. Skript im Frame 1: die Instanzen werden mit new erzeugt, positioniert und mittels addChild auf der Bhne gezeigt. Vorteil: die Instanzen in einem Container knnen zusammen gesteuert werden.

96

Die Display-Liste Die Display-Liste


Die Display-Liste ist die Hierarchie aller grafischen Objekte (Container und nicht Container) in einer Flash-Anwendung.

Der Programmierer und der Designer knnen diese Hierarchie vollkommen frei gestalten und Container beliebig verschachteln. >> Beispiel > displayListe.fla Skript im Frame 1 und MovieClips in der Bibliothek erkunden. Das Skript zeigt den Zugang zu den verschiedenen Objekten in der Display-Liste, die vollkommen frei gestaltet wurde, durch Angabe des vollstndigen Pfades.

Die Wurzel der Display-Liste


Die Freiheit des Flash-Entwicklers hat eine Grenze: die Wurzel der Display-Liste lsst sich nicht verndern, sie ist in einer Flash-Anwendung festgelegt.

Die Bhne Die Wurzel der Display-Liste ist immer eine Instanz der Klasse Stage, die automatisch vom FlashPlayer erzeugt wird, wenn ein Flash-Film gestartet wird. TIPP: Es ist zurzeit nicht mglich, in einer Anwendung mehrere Stage-Instanzen zu erzeugen. Diese Mglichkeit ist aber in der AS3-Architektur angelegt. Die Bhne ist in der Eigenschaft stage eines Objektes gespeichert. Das gilt nicht nur fr die Hauptzeitleiste sondern fr alle grafischen Objekte einer Anwendung.

Die Hauptzeitleiste
Das Erste Kind der Bhne und Container fr alle andere grafische Objekte ist auch festgelegt: es ist die Hauptzeitleiste (eine Instanz der Klasse MovieClip). Anders ausgedrckt: wenn eine Anwendung gestartet wird, wird eine Instanz von MovieClip automatisch erstellt und in der Bhne gezeigt. TIPP: Das erste Kind der Bhne wird oft Besitzer der Bhne genannt. TIPP: Es ist natrlich mglich, die Hauptzeitleiste zu umgehen, und Objekte direkt auf der Bhne zu zeigen. Die Hauptzeitleiste ist in der Eigenschaft this gespeichert; die Angabe von this ist allerdings redundant, sie kann weggelassen werden. >> Beispiel > wurzelDListe.fla Das Skript zeigt die Wurzel der Displayliste und ist ausreichend kommentiert.

97

Objektorientierte Programmierung und die Display-Liste Die Dokumentklasse als Besitzer der Bhne
Wenn eine Anwendung ber eine Dokumentklasse verfgt dann wird beim Start der Anwendung eine Instanz der Dokumentklasse erstellt.

Die Dokumentklasse ist in eine OO-programmierte Flash-Anwendung Besitzer der Bhne und Container fr alle grafischen Objekte (sie spielt damit die Rolle der Hauptzeitleiste). Deswegen muss die Dokumentklasse eine Containerklasse erweitern (entweder Sprite oder falls Frameskripte zum Einsatz kommen MovieClip).

TIPP: Die Dokumentklasse bestimmt gewisse globale Eigenschaften der Laufzeitumgebung z.B. die Framerate oder die Sicherheitsoptionen >> Beispiel > wurzelDListeOO.as und wurzelDListeOO-Demo.fla Die Klasse ist Dokumentklasse der Flashdatei. Sie zeigt im Ausgabefenster, dass die Instanz der Dokumentklasse das erste Kind-Objekt der Bhne und Besitzer der Bhne ist.

98

Exkurs fr AS2-Kenner: Die Eigenschaft root Die Eigenschaft root


Die Hauptzeitleiste bzw. die Dokumentklasse einer Anwendung, die erstes Kind der Bhne ist, und damit Display-Parent aller grafischen Objekte der Anwendung, ist fr diese Objekte in der Instanzvariablen root gespeichert. Die root-Eigenschaft ist fr jedes Anzeigeobjekt, das nicht in die Anzeigeliste aufgenommen wurde, auf null gesetzt.

>> Beispieldateien > RootApp.as und RootApp-Demo.fla Es werden in der Klasse drei Rechtecke (Instanzen der Klasse Shape) gezeichnet: 1. wird direkt in der Dokumentklasse gezeigt (die selbst eine Instanz von MovieClip ist) 2. wird in einem Container vom Typ Sprite gezeigt 3. wird direkt auf der Bhne gezeigt. Im Frame 2 der Zeitleiste wird ein 4. Rechteck in der Zeitleiste bzw. in der Dokumentklasse gezeigt. Die Anwendung arbeitet mit dem Ausgabefenster.

99

Container und Tiefen Einfhrung


Grafische Objekte, die mit AS der Display-Liste hinzugefgt werden, werden in Tiefen (Depth) gezeigt, hnlich wie grafische Objekte, die mit Flash interaktiv erstellt werden, in den Ebenen der Zeitleiste gezeigt werden.

Dabei kann in einer Tiefe aber jeweils nur ein Objekt gezeigt werden. Objekte die bereinander liegen, verstecken die Objekte in den darunter liegenden Tiefen. TIPP: Natrlich kann ein Container, der in einer Tiefe gezeigt wird verschiedene Objekte beinhalten, auch andere Container. Wenn der Programmierer keine Tiefe angibt, wird mittels addChild() das neue Objekt in der nchsten freien Tiefe immer oben platziert. TIPP: Tiefen werden ab 0 (tiefste Tiefe) gezhlt.

Tiefe gezielt angeben


Mit der Methode addChildAt (DisplayObject, Tiefe) kann der Programmierer die Tiefe gezielt angeben. Mit der Methode getChildIndex(DisplayObject) kann der Programmierer die Tiefe eines Objektes lesen.

Wird ein Objekt in einer bereits besetzten Tiefe platziert, dann werden alle schon gezeigten Objekte einfach nach oben verschoben.

TIPP: Weitere Tipps zum Thema z.B. Reparenting Assets, Traversing Objects und Manipulating Objects in Containers Collectively finden sich in [Moock 07, S. 478 und ff.]

100

Container und Tiefen: Beispiele


Quelle aller Beispiele zu diesem Thema ist moock.org./eas3/examples
>> Beispiel 1 > greetingApp.as und greetingApp.fla Die Klasse greetingApp.as o Sie erweitert die Klasse Sprite. o Sie erstellt ein Shape-Objekt und zeichnet dort ein Rechteck und einen Kreis. Sie erstellt ein Textobjekt. o Sowohl das Shape-Objekt wie auch der Text werden mittels addChild() in der DisplayListe direkt der Instanz der Klasse hinzugefgt. o Da greetingApp.as die Dokumentklasse der Datei greetingApp.fla ist, ist sie Besitzer der Bhne. Die vollstndige Display-Liste der Beispielanwendung sieht so aus: 1. Stage-Instanz: automatisch von Flash erzeugt 2. GreetingApp-Instanz: Besitzer der Bhne und gleichzeitig das erste Element der DisplayListe unter der Stage-Instanz. 3. Shape-Instanz und Textfield-Instanz

>> Beispiel 2 > greetingApp2.as und greetingApp2.fla greetingApp2-Demo.as ist die Dokumentklasse von greetingApp2.fla In greetingApp2.as werden der Kreis, das Rechteck und der Text wie im Beispiel greetingApp gezeichnet und im Display gezeigt. Es wird eine neue Form stellt, dort wird ein Dreieck gezeichnet Alle drei Objekte (zwei Shapes und ein Textfield) werden mit addChildAt() auf der Bhne jeweils unten (Tiefe 0) gezeigt. Die Objekte die bereits auf der Bhne sind werden nach oben verschoben. D.h. das erst gezeigte Objekt wird ganz oben gezeigt (ohne Angabe der Tiefe 0 wre es umgekehrt: das zuletzt gezeigte Objekt wre oben)

101

Container und Tiefen: Noch ein Beispiel


>> Beispiel 3 > greetingApp3.as und greetingApp3.fla

Dieses Beispiel arbeitet wie Beispiel 2 benutzt aber die

Methode

getChildIndex(). Die Tiefe des Textes ndert sich, da die anderen Objekte untergeschoben werden. Dies wird zur Kontrolle mit einer Trace-Anweisung ausgegeben.

102

Container und Tiefen: Tiefen nachtrglich ndern Tiefe nachtrglich ndern


Mit folgenden Methoden ist es mglich, die Tiefe, in der ein Display-Objekt gezeigt wird, nachtrglich zu ndern.

swapChildren (existingChild1, existingChild2) swapChildrenAt(existingDepth1, existingDepth2) setChildIndex(existingChild, newDepthPosition) >> Beispieldateien >> tiefenAendern.fla In der Bibliothek sind 4 MovieClip-Symbole und 2 Schaltflchen-Symbole. Alle sind mit den entsprechenden Klassen verbunden, die allerdings nicht als Datei existieren (sie werden automatisch vom Compiler als leere Klassen erzeugt) Das Skript befindet sich im Frame 1 der Hauptzeitleiste. Es werden 4 MovieClip-Instanzen erzeugt und gezeigt Es werden 4 Schaltflchen-Instanzen erzeugt, gezeigt und mit Funktionalitt (Evenbehandlung) versehen: o Die erste arbeitet mit swapChildren() o Die zweite arbeitet mit swapChildrenAt() o Die dritte und die vierte (Reset) arbeiten mit setChildrenAt() Zustzlich ist eine Hilfsfunktion implementiert, die das Ergebnis in Ausgabefenster zeigt
TIPP: Wenn Sie ein Objekt ganz nach vorne auf der Bhne bringen wollen, knnen Sie die schreibgeschtzte Eigenschaft numChildren der Klasse DisplayObjectContainer lesen. Die oberste freie Tiefe ist numChildren-1. Anschlieend knnen Sie die bekannte Methode setChildrenAt() nutzen.

103

Grafische Objekte lschen Aus dem Display


Aus dem Display werden Objekte mit folgenden Methoden gelscht:

theContainer.removeChild(exisitingChild) theContainer.removeChiltAt(depth)
Jedes Objekt muss individuell gelst werden, will man eine Reihe von Objekten lschen, ist dafr eine while- oder eine for-Schleife notwendig.

Aus dem Speicher


Ein Objekt, das nicht gezeigt wird, verbleibt im Speicher und kann jederzeit wieder gezeigt werden

Um ein Objekt auch aus dem Speicher zu lschen mssen alle referenzierenden Variablen oder Array-Elemente entsprechend = null gesetzt werden.

TIPP: Um Probleme zu vermeiden, sollten Sie bevor Sie ein Display-Objekt lschen, sicherstellen, dass alle Listener oder Timer-Events, die mit dem Objekt verbunden sind, vorher gelscht werden.

>> Besipieldatei > objekteLoeschen.fla In der Bibliothek sind ein MovieClip fr die Malflche und eine Schaltflche. Darber hinaus sind 3 MovieClips mit Klassen verbunden aus denen in der Laufzeit Instanzen entstehen knnen. Skript im Frame 1: o Eventbehandlung fr die Malflche: es werden Steine auf dem Bildschirm in der Position der Maus gezeigt o Eventbehandlung fr die Taste Reset: hier werden alle Kinder-Objekte der Anwendung auer der Malflche und der Taste selbst gelscht.

104

Container-Ereignisse Zusammenfassung: Die Methoden


Display-Childs (also grafische Objekte der Anwendung) knnen mit den Methoden:

someContainer.addChild (newChild) someContainer.addChildAt (newChild, depth)


der Display-Liste (und damit aus der grafischen Anzeige) hinzugefgt werden.

Sie knnen mit den Methoden:

someContainer.removeChild (childToRemove) someContainer.removeChildAt (childToRemove, depth)


aus der Display-Liste (und damit aus der grafischen Anzeige) wieder entfernt werden.

Die Ereignisse
Wenn Objekte der Display-Liste hinzugefgt bzw. von ihr entfernt werden, lst Flash zugehrige Ereignisse aus:

Event.ADDED Event.REMOVED
Der Event erreicht den Container des Objektes und alle seine Parent-Objekte.

TIPP: Weitere Informationen und Beispiele finden Sie im [Moock 07, S. 487].

Prof. Dr. Teresa Merino / Medieninformatik / Entwicklungswerkzeuge fr Multimedia-Anwendungen / Flash und ActionScript

5. Interaktivitt
bersicht
Von Nutzer ausgelsten Ereignissen o Maus-Ereignisse o Focus-Ereignisse o Tastatur-Ereignisse o Text-Ereignisse o Flash Player-Ereignisse Phasen der Event-Behandlung

Mausereignisse
Definition, berblick und allgemeine Merkmale von Mausereignissen 105

Nur zur Erinnerung: Mausereignisse behandeln Typische Anwendungen von Mausereignissen o Selbstdefinierte und animierte Mauszeiger o Drag&Drop-Funktionalitt Weiterfhrende Themen o Mausereignisse bei bereinander liegenden Display-Objekten o Mauszeiger lokalisieren o Globale Mausereignisse

Focusereignisse
berblick ber die Focusereignisse Die Tabulator-Reihenfolge

Tastaturereignisse
berblick ber die Tastaturereignisse Mehrere Tasten gleichzeitig drcken

Text-Ereignisse und mehr: Interaktivitt mit Text


Text eingeben: TextEvent.EXT_INPUT und Event.CHANGE Typische Anwendungen mit Text: o Hyperlinks o Text scrollen o Tooltips Weiterfhrende Themen: o AllwaysShowSelection

Flash Player-Ereignisse: berblick Die Phasen in der Eventbehandlung fr Display-Objekte


Display- und andere Objekte: Unterschiede Phasen eines Ereignisses in der Display-Hierarchie Event-Flow bei sog. Bubbling-Ereignissen Die Sendung eines Ereignisses (Event Dispatch) stoppen

106

bersicht Nutzerereignisse
Interaktivitt wird in einer Anwendung durch Antwort auf Ereignisse, die durch den Nutzer ausgelst werden, realisiert. Es handelt sich in AS im Einzelnen um folgende Ereignis-Typen: o Maus-Ereignisse o Focus-Ereignisse o Tastatur-Ereignisse o Text-Ereignisse o Flash Player-Ereignisse In der neuen Version von Flash gibt es zustzlich Touch- und Gesture-Events, wobei MausEreignisse bei Bedarf so weit mglich automatisch als Touchereignisse interpretiert werden.

Die Klassen
Eingabe-Ereignisse werden fr Instanzen der Klassen ausgelst, die von InteractiveObject erben; das sind (nur fla-Klassen!): o SimpleButton o TextField o Sprite o MovieClip o Stage o Loader

Die Instanzen mssen in der Display-List stehen, damit sie ber das Auslsen der Ereignisse benachrichtigt werden.

Fr manche Ereignisse gibt es eine voreingestellte Reaktion (Default Behavior), z.B. MouseOver-Effekt ber Instanzen der Klasse SimpleButton (es erscheint eine Hand als Mauszeiger). Dies ist aber eher die Ausnahme.

107

Maus-Ereignisse: Einfhrung Definition


Maus-Ereignisse werden ausgelst, wenn der Nutzer das System mit einem Zeiger-Instrument steuert. Zeiger-Instrumente sind die Maus, aber auch alternative Werkzeuge wie Trackball, Touchpad, Stift eines Tablet PC oder gar die Finger fr einen Touch Screen: alle diese Gerte lsen dieselben Ereignisse aus.

berblick ber die in Flash eingebauten Maus-Ereignisse


Alle Maus-Ereignisse sind als (ffentliche) Konstanten der Klasse MouseEvent realisiert. Welche Ereignisse das genau sind, finden Sie unter [ Hilfe > Flash-Hilfe > Komponenten ReferenzHandbuch > Alle Klassen > MouseEvent > Eigenschaften] TIPP: Eine hervorragende Auflistung der wichtigsten Ereignisse finden Sie in [Moock 2007, S. 534536].

Allgemeine Merkmale von Maus-Ereignissen


Maus-Ereignisse knnen in der Regel ausgelst werden, wenn die Flash-Anwendung den Focus im Betriebsystem hat. Es gibt allerdings eine Reihe von Ereignissen, die auch ausgelst werden, wenn der Flash-Player nicht den Focus hat. Das sind: MouseEvent.MOUSE_MOVE, _OVER, _OUT,

_ROLLOVER, _ROLLOUT
Es gibt nur ein Mausereignis, das ausgelst werden kann, wenn der Mauszeiger nicht ber der Flash-Anwendung liegt: MouseEvent.MOUSE_UP, allerdings nur wenn vorher MouseEvent.MOUSE _DOWN in der Flash-Anwendung ausgelst wurde. TIPP: Wenn der Bildschirm unmittelbar nach einer Mausaktion aktualisiert werden soll (z.B. um dem Nutzer ein visuelles Feedback zu geben), ruft man dafr die Methode updateAfterEvent() der Klasse MouseEvent auf.

Nur zur Erinnerung: Maus-Ereignisse behandeln (Schritte)


1. 2. 3. 4. Das Zielobjekt bestimmen, das auf das Ereignis reagieren soll Den genauen Eventnamen ermitteln Die Listener-Funktion schreiben Die Listener-Funktion registrieren

>> Beispiel (Quelle: moock.org./eas3/examples) > simple-mouseEvents.fla Das ganze Programm ist im Frame 1 der Zeitleiste. Es werden zwei Objekte (Text und Dreieck) erzeugt und gezeigt, die jeweils verschiedenen Ereignisse behandeln.

108

Typische Anwendungen von Maus-Ereignissen Selbst definierte Mauszeiger >> Beispiel > simple-CustomMousePointer.fla Skript ist im Frame 1 der Zeitleiste und ausreichend kommentiert. >> Beispiel > Quelle: moock.org./eas3/examples)> CostumeMousePointer.as, CostumeMousePointerDemo.as und CostumeMousePointerDemo.fla. Das Beispiel bentigt die Klasse StageDetector.as Drag & Drop-Funktionalitt >> Beispiel > drag-drop.fla Skript ist im Frame 1 der Zeitleiste und ausreichend kommentiert. Im Ausgabefenster werden zur Kontrolle einige Zielen und Namen ausgegeben.

109

Maus-Ereignisse: Weiterfhrende Themen Maus-Ereignisse bei bereinander liegenden Display-Objekten


Wenn mehrere unabhngige Objekte bereinander liegen, dann wird die Nachricht ber das ausgelste Ereignis nur vom Objekt empfangen, das oben liegt. TIPP: Will man, dass ein unten gelegenes Objekt benachrichtigt wird, muss man die Eigenschaft mouseEnabled des darber liegenden Objektes auf false setzen.

>> Beispiel (Quelle: moock.org./eas3/examples) > Clicksensor.as und Clicksensor.fla Die ganze Funktionalitt ist in der Klasse programmiert. Sie ist Dokumentklasse der Flash-Datei. Es werden zwei Objekte erzeugt: ein Rechteck und ein Text. Die Mausereignisse sollen nur das Rechteck erreichen, das teilweise unter dem Text liegt. Mauszeiger lokalisieren

localX, localY = Koordinaten des Mauszeigers bzgl. des Eventziels stageX, stageY = Koordinaten des Mauszeigers bzgl. der Bhne

>> Beispiel (Quelle: moock.org./eas3/examples)> Clicksensor.as und Clicksensor.fla Mit den Trace-Anweisungen werden die lokalen und die globalen Koordinaten ausgegeben. Globale Maus-Ereignisse
Die neue Flash-Version erlaubt es nicht direkt, Maus-Events global (fr die ganze Anwendung) zu behandeln, wie es in frheren Versionen der Fall war. Man kann diese Funktionalitt aber einfach programmieren, indem man die Event-Listener fr die Stage-Instanz registriert. TIPP: die Registrierung des Ereignisses mit der Stage-Instanz ist die Technik der Wahl, wenn man Nutzerereignisse fr die ganze Anwendung (global) implementieren mchte.

>> Beispiel (Quelle: moock.org./eas3/examples)> GlobalMouseMotionSensor.as und GlobalMouseMotionSensor.fla Die Funktionalitt ist in der Dokument-Klasse und im Frame 1 programmiert. Das Beispiel arbeitet einfach mit dem Ausgabefenster.

110

berblick ber Touch- und Gesture-Ereignisse Touch-Ereignisse


TouchEvent.TOUCH_BEGIN TouchEvent.TOUCH_END TouchEvent.TOUCH_MOVE TouchEvent.TOUCH_OUT TouchEvent.TOUCH_OVER TouchEvent.TOUCH_ROLL_OUT TouchEvent.TOUCH_ROLL_OVER TouchEvent.TOUCH_TAP

Gesture-Ereignisse
GestureEvent.GESTURE_TWO_FINGER_TAP

>> Beispiele dazu werden spter erstellt.

111

Focus-Ereignisse: berblick Allgemeines


Wenn ein Objekt den Tastatur-Fokus hat, empfngt es alle Tastatur-Input- Ereignisse. Den Tastatur-Fokus bekommen Objekte durch Nutzer-Aktionen (Maus und Tastatur) oder aber auch durch Programmierung (mit Hilfe der Instanz-Variable focus der Klasse Stage).

berblick
Alle Focus-Ereignisse sind als (ffentliche) Konstanten der Klasse FocusEvent realisiert. Einen berblick bekommt man in der Flash-Hilfe. FocusEvent.FOCUS_IN, FocusEvent.FOCUS_OUT werden ausgelst, wenn ein Objekt den Focus bekommt oder verliert FocusEvent.KEY_FOCUS_CHANGE, FocusEvent.MOUSE_FOCUS_CHANGE werden blicherweise genutzt, um zu verhindern, dass der Nutzer ein Objekt, z.B. ein Textfeld verlsst, bevor er die gewnschte Interaktion durchgefhrt hat.

>> Beispiel (Quelle: moock.org./eas3/examples) > objectFocusSensor.as, objectFocusSensor.fla Hier wird die Behandlung von Focusereignissen fr ein Objekt demonstriert. In diesem Beispiel ist die Methode preventDefault() interessant, die fr alle Events implementiert ist. Sie bricht das Standardverhalten ab. >> Beispiel (Quelle: moock.org./eas3/examples) > globalFocusSensor.as, globalFocusSensor.fla Hier wird die globale Behandlung von Focus Ereignissen demonstriert In diesem Beispiel ist die Eigenschaft von FocusEreignissen relatedObject interessant. Sie verweist auf das andere interaktive Objekt, was vom Focuswechsel betroffen ist.

112

Die Tabulator-Reihenfolge
Mit dem Tabulator wird der Focus von einem Objekt zum nchsten gereicht.

Die Tabulator-Reihenfolge umfasst alle Instanzen in der Display-List der Klassen : o Sprite und MovieClip, die in buttonMode sind oder mit der Eigenschaft

tabEnabled=true
o o TextField vom Typ INPUT SimpleButton

Voreinstellung der Reihenfolge Die Reihenfolge hngt von der Position auf der Bhne ab und geht von links nach rechts und von oben nach unten, unabhngig von der Position des Objektes in der Display-Liste.

Programmierte Reihenfolge o Die voreingestellte Reihenfolge kann verndert werden, indem die Eigenschaft tabIndex des Objektes entsprechend verndert wird. o Auch kann ein Objekt aus der Reihenfolge entfernt werden, indem seine Eigenschaft tabEnabled auf false gesetzt wird. o Damit ein Objekt mit der Maus nicht fokussiert werden kann, bekommt seine Eigenschaft mouseEnabled den Wert false.

TIPP: Voreinsgestellter gelber Rahmen im Player Der Flash-Player zeichnet einen gelben Rahmen um das Objekt, das gerade den Focus hat (funktioniert nicht immer richtig vor allem nicht in der Entwicklungsumgebung!). Der gelbe Rahmen kann mit der Eigenschaft focusRect = false unterdrckt werden.

>> Beispiel > tabulator.fla Skript ist im Frame 1 der Zeitleiste. Nur wenn die SWF-Datei direkt im Player gestartet wird, sind die gelben Rahmen sichtbar. Wenn die focusRect-Befehle aktiviert werden ist der gelbe Rahmen nicht mehr sichtbar.

113

Tastatur-Ereignisse Allgemeine Einfhrung


Ein Tastatur-Ereignis wird ausgelst und gesendet, wenn der Nutzer eine Taste drckt. Diese Ereignisse sind als (ffentliche) Konstanten der Klasse KeyboardEvent realisiert. Einen berblick bekommen Sie am besten in der Flash-Hilfe. Tastatur-Ereignisse knnen genutzt werden, um eine Anwendung global zu steuern: dann werden Sie mit Instanzen der Klasse Stage registriert. Tastatur-Ereinigsse knnen auch genutzt werden, um bestimmte Objekte in der Anwendung zu steuern, dann werden sie mit dem Objekt selbst registriert. Die (letzte) Taste, die gedrckt wurde, wird in der Instanzvariablen keyCode der Klasse KeyboardEvent gespeichert. TIPP: Sie knnen den ASCII-Code mit der Instanzvariablen KeyboardEvent.charCode lesen

>> Beispiel > Tastatur-Ereignisse.fla Skript ist im Frame 2 der Zeitleiste Es sind Tastatur-Ereignisse fr die einzelnen Scheiben und auch fr die ganze Anwendung implementiert und registriert.
TIPP: Um Tastatur-Eingaben in einem Textfeld zu steuern, werden nicht Tastatur-Ereignisse genutzt, sondern Text-Ereignisse, insbesondere TextEvent.TEXT_INPUT

114

Mehrere Tasten gleichzeitig drcken


Um festzustellen ob die Umschalt- oder die Steuerungstaste gedrckt wurden, benutzt man die Instanzvariablen shiftKey und ctrlKey der Klasse KeyboardEvent.

Die MouseEvent-Klasse bietet auch diese Instanzvariablen.

Fr die alt-Taste gibt es allerdings keine entsprechende Variable. Man kann diese Funktionalitt aber auch per Hand programmieren.

>> Beispiel > Tastatur-Ereignisse.fla Wenn die beiden Pfeile nach links und nach rechts gleichzeitig gedrckt werden dreht sich die Scheibe, das soll vermieden werden. >> Beispiel > Tastatur-Multitasten.fla Skript ist im Frame 2 der Zeitleiste. Dieses Beispiel demonstriert, wie ein Programm feststellen kann, ob zwei Tasten gleichzeitig gedruckt wurden. Auerdem werden beim Drcken der Umsachlt- bzw. der Steuerungstaste Meldungen im Ausgabefenster gezeigt.

115

Interaktivitt mit Text: Text-Ereignisse Ereignisse-berblick


Es gibt zwei Ereignisse, die ausgelst werden, wenn Text in einem Textfeld vom Typ INPUT eingegeben wird:

TextEvent.TEXT_INPUT

dieses wird ausgelst, bevor die nderungen auf dem Bildschirm sichtbar sind.
Event.CHANGE

dieses wird ausgelst, wenn der Text gendert und auf dem Bildschirm sichtbar wurde.
TIPP: Der Text kann auch mit einer Software fr Spracherkennung eingegeben werden.

Steuerung der Eingabe mit TEXT_INPUT


Um auf eine Texteingabe zu reagieren, bentigt man eine Listener-Funktion, die mit dem
Textfeld registriert wird:

meinTextFeld.addEventListener(TextEvent.TEXT_INPUT, textInputListener) function textInputListener (e:TextEvent): void { }


Die Instanzvariable e.text erlaubt den Zugang zum eingegeben Text. Die Methode preventDefault() der Klasse Event erlaubt es, die Erscheinung des eingegebenen Textes auf dem Bildschirm zunchst einmal auszuschalten (Voreinstellung)

>> Beispiel (Quelle: moock.org./eas3/examples) > UppercaseConverter.as und UppercaseConverter.fla

Hier wird e.preventDefault() demonstriert Darber hinaus arbeitet die Listener-Funktion mit:

Eine Methode der Klasse TextField: replaceText(beginIndex:int, endIndex:int, newText:String): void


Eine Methode der Klasse String: toUpperCase():String

116

Eine Methode der Klasse TextField: setSelection(beginIndex:int, endIndex:int):void

117

Steuerung der Eingabe mit Change Steuerung der Eingabe mit Change >> Beispiel (Quelle: moock.org./eas3/examples) Photopanel.as und Photopanel.fla >

In diesem Beispiel gibt es zwei Textfelder, die synchronisiert werden: Photoname fr die Eingabe und Title fr die Ausgabe. Das Eingabefeld Photoname registriert die Events CHANGE, FOCUS_IN und FOCUS_OUT Darber hinaus wird FOCUS_OUT fr die Bhne (Stage) registriert. Betrachten Sie die Listenerfunktion fr den Event CHANGE, hier wird einfach der Text des Feldes Photoname in das Feld Title hinein kopiert.

118

Weiterfhrende Themen zum Text: Hyperlinks, Scrollen, Tooltips Hyperlinks


Der TextEvent.LINK wird ausgelst wenn der Nutzer auf einen Hyperlink im Text klickt. Die genauen Schritte kann man am besten im Beispiel verstehen

>> Beispiel (Quelle: moock.org./eas3/examples) > simpleLink.fla Skript im ersten Frame der Zeitleiste. Text Scrollen
Die Event-Klasse verfgt ber die Konstante SCROLL. Ein Event.SCROLL Ereignis wird ausgelst wenn: Der Text gescrollt wird und zwar horizontal (scrollH verndert sich) oder Vertikal (scrollV verndert sich) Es wird neuer Text ins Feld eingegeben, so dass maxscrollH oder maxscrollV sich verndern. Die Gre des Feldes wird verndert, so dass maxscrollH oder maxscrollV sich ebenfalls verndern.

>> Beispiel > simpleScrolling.fla Skript ist im ersten Frame der Zeitleiste. Es wird einfach mit scrollV gearbeitet. >> Beispiel (Quelle: moock.org./eas3/examples) > ScrollBar.as ScrollBarDemo.as und ScrollBarDemo.fla Datei starten und zuerst weitere Zahlen eingeben. Dann scrollen zeigen. Scrollbar.as ffnen und Funktion synchTextToScrollThumb suchen. Hier wird die Eigenschaft scrollV des Textes (t) berechnet. Aufrufe der Funktion suchen. Die Funktion wird in einem Listener fr MOUSE_UP und in einem Listener fr MOUSE_MOVE aufgerufen. Tooltips
Um Text mit AS zu zeigen, erstellt man eine Instanz der Klasse TextField, verndert ihre Eigenschaften nach Bedarf und fgt diese in die Displayliste ein. Mit dieser Technik kann man auf sehr einfacher Weise Tooltips realisieren.

>> Beispiel > tooltip.fla Die Funktionen, um den Text zu zeigen sind in Frame 1, die Registrierung der Eventlistener in Frame 2 programmiert
119

Weiterfhrende Themen: Die Text-Eigenschaft alwaysShowSelection


Werden mehrere Eingabefelder auf einem Bildschirm dargestellt und will man den ausgewhlten Text auch dann kennzeichnen wenn das Feld nicht den Focus hat, geht das sehr leicht mit der TextEigenschaft alwaysShowSelection

>> Beispiel (Quelle: moock.org./eas3/examples) > TextField_alwaysShowSelection.as und TextField_alwaysShowSelection-Demo.fla Klasse TextField_alwaysShowSelection o WICHTIG! Es handelt sich hierbei um die Dokumentklasse fr die flash-Datei, in der die Instanzen, die auf der Bhne gezeigt werden sollen, erzeugt werden. o Konstruktor: es werden hier zwei Textfield-Instanzen erzeugt und zwar mit der Methode createTextField der Klasse selbst o Methode createTextField: Hier werden mit dem Operator new die Textfelder erstellt und der Display-Liste hinzugefgt.

Flash-Datei TextField_alwaysShowSelection-test.fla o Hier wird die Klasse einfach in den Einstellungen fr Verffentlichungen als Dokumentklasse angemeldet. Sonst ist alles leer. Die Auswahl wird grau gezeigt, wenn der Focus verloren ist

120

Flash Player-Ereignisse berblick


Die Ereignisse, die in dieser Vorlesung erlutert wurden, werden ausgelst, wenn der Nutzer mit der Anwendung interagiert.

Darber hinaus gibt es eine kleine Menge von Ereignissen, die ausgelst werden, wenn der Nutzer mit dem Flash-Player interagiert: Wenn die Gre des Players verndert wird: Event.RESIZE Wenn der Mauszeiger die Player-Flche verlsst: Event.MOUSE_LEAVE o Wenn der Flash-Player den Focus im Betriebsystem verliert oder gewinnt: Event.ACTIVATE, Event.DEACTIVATE o o

121

Die Phasen in der Eventbehandlung fr Display-Objekte Eventbehandlung bei Display- und anderen Objekten
Wenn AS ein Ereignis fr Objekte auerhalb der Display-Hierarchie auslst, erreicht das Ereignis nur das Zielobjekt. Wenn AS ein Ereignis fr Objekte in der Display-Hierarchie auslst, dann erreicht das Ereignis zunchst einmal das Zielobjekt (das oben liegt) aber indirekt auch ALLE (darunterliegende) Parent-Objekte. Beispiel: Wenn ein Textfeld sich in einem Sprite befindet und es wird ein Ereignis fr das Textfeld ausgelst, wird der Sprite auch sozusagen indirekt vom Ereignis erreicht. Daher kann man Eventhandler mit Parent-Objekten registrieren anstatt oder zustzlich zum eigentlichen Ziel. Ereignis-Handler werden oft mit Parent-Objekten registriert, um Code zu zentralisieren und zu vereinfachen. Beispiel (von Moock): Wenn man ein Zimmer in einem Hotel mchte, ist es einfacher in der Rezeption nachzufragen als an jedem Zimmer zu klopfen. [Moock 07, S.511]. Beispiel (von Moock): Eine Checkbox soll auf Ereignisse reagieren egal ob der Nutzer auf den Text oder auf das Icon klickt. Daher ist es besser, die Event-Behandlung mit dem Container der beiden Objekte zu registrieren. [Moock 07, S. 512]

Phasen eines Ereignisses in der Display-Hierarchie


Die Phasen eines Ereignisses sind von Interesse, wenn Event-Handler mit Parent-Objekten registriert werden. Es gibt drei Phasen:

1. Phase sog. Capture (Einfangen): Die Parent-Objekte werden ber das Ereignis benachrichtigt. 2. Phase sog. Target (Ziel): Das Ziel des Ereignisses wird benachrichtigt. 3. Phase sog. Bubbling (etwa Aufsteigen) nicht fr alle Ereignisse implementiert: Die ParentObjekte werden darber benachrichtigt, dass das Ziel erfolgreich erreicht wurde. Merke: Events mit einer Bubbling-Phase werden Bubbling-Events genannt.

Das Durchlaufen des Events durch die verschiedenen Phasen nennt man Event-Flow.

122

Event-Flow Reihenfolge im Event-Flow


Voreinstellung ist, dass die Benachrichtigung ber ein Ereignis zuerst das eigentliche Ziel (TargetPhase=2) und erst danach (also in der Bubbling-Phase=3) die Parent-Objekte erreicht. D.h. die Listener des eigentlichen Ziels werden zuerst ausgefhrt.

Will man, dass ein Ereignis die Parent-Objekte VOR dem eigentlichen Ziel erreicht (also bereits in der 1. Phase, der Capture-Phase), muss man dies ausdrcklich angeben, indem der useCapture-Parameter auf true gesetzt wird:

theParent.addEventListener(theEvent, theListener, true)


Auf diese Weise werden die Listener der Parent-Objekte zuerst ausgelst. In welcher Phase des Event-Flow ein Listener ausgefhrt wird, ist der Variablen EventPhase des Event-Objects (e.EventPhase) zu entnehmen. Sie kann drei Werte haben:

o EventPhase.AT_TARGET o EventPhase.CAPTURING_PHASE o EventPhase.BUBBLING_PHASE

>> Beispiel [Moock 07, S.517] > EventPhase.fla Auf der Bhne ist eine Schaltflchen-Instanz mit dem Namen button1 Skript ist im Frame 1 der Zeitleiste. Hier befinden sich ein einfacher Eventlistener fr den Button und ein Eventlistener fr die Bhne, der die drei EventPhasen berprft. Voreinstellung fr useCapture ist false. Alternativ kann man useCapture auf true einstellen, dann reagiert die Bhne VOR der Schaltflche. >> Beispiel 2 [Moock 07, S.517] > clickSensorPhasen.fla und ClickSensorPhasen.as Dieses Beispiel baut das bereits bekannte Beispiel ClickSensor aus. Hier wird der Unterschied zwischen der verschiedenen Phasen der Eventbehandlung deutlich

123

Die Sendung eines Ereignisses (Event Dispatch) stoppen


Unmittelbar bevor AS ein Ereignis sendet, legt das System die ganze Reihenfolge der Sendung (den event flow) anhand der Einstellungen in den vorhandenen Event-Listener und der DisplayHierarchie fest.

Wenn die Display-Hierarchie danach gendert wird, ndert das nicht den event flow.

Ein Eventlistener kann aber die Weitersendung eines Ereignisses stoppen und zwar mit den Methoden stopPropagation() und stopImmediatePropagation(). Dieser Vorhang wird mit dem Ausdruck consuming the event bezeichnet (zur Deutsch ein Event aufbrauchen)

stopImmediatePropagation() stoppt die Sendung des Events sofort, d.h. kein


weiterer Listener wird ausgefhrt (der Event ist aufgebraucht consumed).

stopPropagation() stoppt die Sendung des Events an weitere Ziele, sollte das
aktuelle Ziel aber ber mehrere Handler fr das gestoppte Event verfgen, werden diese trotzdem ausgefhrt (auch hier ist der Event aufgebraucht).

>> Beispiel (Quelle: moock.org./eas3/examples) > ToolPanel.as, Tool.as, toolPanel.fla Die Klasse Tool implementiert ein Werkzeug, das mit einer Meldung im Ausgabefenster auf Mausklicks reagiert. Die Klasse ToolPanel implementiert einen Werkzeugkasten mit 3 Tools. Das Panel berwacht die Mausklicks, indem es sie stoppt wenn es ausgeschaltet ist. Dafr wird im ToolPanel ein Listener fr das Ereignis CLICK implementiert mit useCapture true, damit die Ereignisse das Panel VOR den einzelnen Werkzeugen erreichen. Das ToolPanel beinhaltet einen Schalter, der den Panel deaktiviert. Ist das Panel deaktiviert, so wird die Methode e.stopPropagation() aufgerufen. Die Flash-Datei definiert die Klasse ToolPanel als Dokumentklasse.

124

Prof. Dr. Teresa Merino / Medieninformatik / Entwicklungswerkzeuge fr Multimedia-Anwendungen / Flash und ActionScript

6. Display > Medien


berblick: Display-Klassen fr Medien (nicht interaktiv)
Klassen fr Vektorbilder: Shape, Morphshape und Graphics Klassen fr Pixelbilder: Bitmap, BitmapData, BitmapFilter Klassen fr Animationen: Tween Klassen fr Audio-Dateien (eigentlich keine Display-Klassen): Sound, SoundChannel, SoundTransform, Microphon Klassen fr Videofilme: Video, NetStream, FLVPlayback, Camera

Vektorbilder
Die Klasse Shape und die Klasse Graphics Methoden zum Zeichnen in der Klasse Graphics o Linien-Stil festlegen o Stift bewegen o Linien und Kurven zeichnen o Geschlossene Formen zeichnen o Zeichnungen lschen

Pixelbilder
Die Klassen : Bitmapdata, Bitmap und BitmapFilter Bitmaps zeigen: o intern gespeicherte Bilder o externe Bilder o mit AS programmierte Bilder Bitmaps mit AS verndern Weitere Bitmap-Methoden Effekte und Filter fr Bitmaps

Animationen
Die Klasse Tween und das Package fl.transitions Andere Pakete und Techniken fr Animationen mit AS

Klangdateien
Klassen zur Steuerung von Audio o Steuerung einzelner Dateien: Sound, SoundChannel, SoundTransform o Globale Soundsteuerung: SoundMixer, SoundLoaderContext Soundsteuerung in der Praxis o Schritte zur Wiedergabe von Sound o Lautstrke verndern

125

Videofilme
Internes Video zeigen und steuern Externe Videofilme in der Praxis o Die Video-Klasse o NetConnection und NetStream o Videosteuerung

126

Medien berblick
Fr den Umgang mit Medien gibt es eine Reihe von AS-Klassen, die von der Klasse DisplayObject erben. Sie sind nicht interaktiv, d.h. sie verfgen nicht ber Eventhandlder fr Nutzerereignisse. Es handelt sich um die Klassen: o Shape und Graphics fr Vektorbilder o Bitmap, BitmapData und BitmapFilter fr Pixelbilder o Tween und andere fr programmierte Animationen TIPP: Klasse fr Animationen sind in einem fl-Paket zu finden (fl.transitions); nicht in einem flash-Paket o Video, NetStream und Camera bzw. auch FLVPlayback fr Videofilme o Sound und weitere Klassen fr die Wiedergabe von Klang

Fr die Darstellung von Text (Text ist schlielich auch in Zeiten von Multimedia das wichtigste Trgermedium fr Informationen) gibt es die Klasse Textfield, die von InteractiveObject erbt. Damit haben wir uns schon in Kapitel 4 (Darstellung und Formatierung) und 5 (Interaktivitt mit Text) beschftigt.

127

Mit Vektoren zeichnen: Einfhrung berblick Vektoren


Fr die Arbeit mit Vektoren bietet AS die Klasse Shape an. Shape ist eine Klasse, die direkt von DisplayObject erbt.

AS bietet genau genommen zwei Varianten der Klasse Shape: o MorphShape: sie steht fr die Vektor-Figuren, die mit der Flash Entwicklungsumgebung gezeichnet werden. Sie werden nicht mit der Sprache gesteuert. o Shape: ist die Klasse, mit der Vektoren direkt mit der Sprache AS gesteuert werden knnen.

Auf dem Bildschirm werden Vektoren allerdings nicht direkt mit der Klasse Shape gezeichnet sondern mit einer Klasse, die ausschlielich zum Zeichnen von Vektor-orientierten Linien und Formen implementiert wurde, Graphics.

Fr jede Instanz der Klasse Shape erzeugt Flash automatisch eine Instanz der Klasse Graphics, die in der Instanzvariablen graphics gespeichert ist. Es ist nicht mglich, aktiv Instanzen der Klasse Graphics zu erzeugen.

TIPP: Auerdem arbeitet die Klasse Graphics auch mit den interaktiven Klassen Sprite und MovieClip. D.h. in der Praxis: es ist auch mglich, in Sprites und MovieClips zu zeichnen: beide Klassen besitzen die Eigenschaft graphics. Wenn Sie interaktive Vektoren brauchen, benutzen Sie lieber die Klassen Sprite und MovieClip. Whlen Sie Graphics fr nicht interaktive Vektorbilder.

berblick ber die Klasse Graphics


Die Methoden, die die Klasse Graphics zum zeichnen bietet, knnen je nach Zweck, in 5 Gruppen klassifiziert werden [Moock 07, 629]: o Linien (und Kurven) zeichnen o Formen zeichnen o Linien-Stil definieren o Stift bewegen o Zeichnungen lschen

128

Mit Vektoren zeichnen: Beispiele Linien (und Kurven) zeichnen


Mit der Methode lineStyle() den Linien-Stil bestimmen Mit der Methode lineTo() eine Linie zeichnen Mit der Methode curveTo() eine Kurve zeichnen

>> Beispiel > linien-zeichnen.fla Figuren zeichnen


Mit der Methode beginnFill() die Fllung bestimmen Mit der Methode endFill() das Zeichnen beenden Mit den Methoden drawCircle(), drawEllipse(), drawRect(), drawRoundRect(), drawRoundRectComplex() verschiedene Figuren zeichnen. Dabei ist beginnFill()notwendig, aber endFill() nicht. Mit clear() kann man das gezeichnete wieder lschen.

>> Beispiel > figuren-zeichnen.fla Abschlussbeispiel: Eine OO Figuren-Bibliothek


Colin Moock bietet auf seiner Homepage eine grafische Bibliothek, die dazu dient, Figuren als eigenstndige Display-Objekte zu erstellen und zu zeichnen. Zur Bibliothek gehren: o eine Klasse fr die grundlegende Funktionalitt aller Figuren (BasicShape) zum Beispiel fr die Bestimmung der Linienstrke und fr die Registrierung von Listener. o Ellipse o Polygon o Rectangle und Star (Subklassen von Polygon) Die Klasse BasicShape benutzt die Hilfsklasse StageDetector, die nicht zum Paket gehrt und grundlegende Funktionalitt bereitstellt.

>> Beispiel (Quelle: moock.org./eas3/examples) > shapeRandomizer.fla und .as und Verzeichnis org\moock\drawing Die Flash-Datei startet die Klasse shapeRandomizer, die eine Figur von jeder Klasse auf dem Bildschirm zeichnet. Die Klasse StageDetector.as ist im Wurzelverzeichnis vom ShapeRandomizer gespeichert. Das Paket mit den grafischen Klassen befindet sich im entsprechenden Unterverzeichnis.

129

Bitmaps mit AS steuern berblick


Fr die Steuerung von Bitmap-Grafiken bietet AS folgende Klassen:

BitmapData: sie steht fr den Inhalt einer Bitmap-Datei, zu jedem Pixel werden folgende
Daten gespeichert: o X und Y o Alpha, Rot, Blau und Grn: 0xAARRBBGG Bitmap: sie ist eine Display-Klasse, die von DisplayObject erbt und die Darstellung der BitmapDaten auf dem Bildschirm erlaubt. BitmapFilter: Sie ist die Basisklasse fr alle Filtereffekte fr Bilder.

Themen in diesem Kapitel


1. 2. 3. 4. Bitmaps zeigen (mit AS erstellte oder extern geladene Bilder) Bitmaps mit AS verndern Weitere Bitmap-Methoden Filter und Effekte anwenden

130

Bitmaps zeigen Interne und Externe Bitmaps mit AS zeigen


Interne Bitmap (d.h. in der Bibliothek gespeichert) zeigen Die notwendigen Schritte sind: 1. Symbol in der Bibliothek verknpfen (Eigneschaften>Erweitert>Klasse). So wird aus dem Symbol eine Subklasse von BitmapData. 2. Instanzen mit AS erstellen: von der individuellen Bild-Klasse aus dem Symbol und von der Klasse Bitmap 3. Instanz der Klasse Bitmap der Displayliste hinzufgen.

Externes Bitmap laden und zeigen Die notwendigen Schritte sind: 1. Instanz der Klasse Loader erstellen 2. Mit der Methode load() und mit Hilfe einer Instanz der Klasse URL-Request externes Bild laden (dazu mehr im nchsten Kapitel) 3. Loader-Instanz der Display-Liste hinzufgen

>> Beispiel > BitmapsZeigen.fla und Stubaital.jpg In der Bibliothek befindet sich ein Bild, es ist mit einer (leeren) Subklasse von BitmapData verknpft. Skript ist im Frame 1 der Zeitleiste und ausreichend kommentiert.
TIPP: Loader erbt von der abstrakter Klasse DisplayObjectContainer (neben Stage, Sprite und MovieClip) TIPP: Mit dem Laden externer Daten beschftigt sich Kap. 7 im Detail

Neue Bitmaps mit AS erstellen und zeigen


Die notwendigen Schritte sind: 1. 2. 3. 4. BitmapData-Instanz erstellen Pixel (Bits) in das Objekt wie gewnscht setzen BitmapData-Instanz mit einer Bitmap-Instanz verbinden Bitmap-Instanz der Display-Liste hinzufgen, d.h. in einem Container zeigen

TIPP: Fr das zeichnen in Bitmaps wird die Klasse Graphics natrlich nicht benutzt (da Graphics Vektor orientiert arbeitet).

>> Beispiel > BitmapsErstellen.fla


131

Skript ist im Frame der Zeitleiste: es werden zwei Bitmaps gezeigt, die dieselben Daten (BitmapData) benutzen.

132

Mit AS Bitmaps verndern Pixel lesen und schreiben


Man kann mit AS Pixel mit folgenden Methoden aus einem Bitmap lesen:

o getPixel32(): liet Farb- und Alphawerte. o getPixel(): liet nur die Farbwerte und setzt fr die Alphawerte den Wert 0
Man kann als Argument x,y-Koordinaten angeben oder aber auch eine Instanz der Klasse Rect (im zweiten Fall ist das Ergebnis eine Liste [Moock 07, S. 662]). Mit der Methode setPixel() kann man Pixel schreiben.

>> Beispiel > BitmapAendern.fla Im Frame 1 wird nur das Bild gezeigt. Im Frame 2 wird das Bild mit AS verndert (toString (16): 16 ist die Basis fr die StringKonvertierung. Teilbilder kopieren
Mit der Methode copyPixels() kann man Pixel aus einem Bitmap in ein anderes oder aber auch an andere Stelle desselben Bildes kopieren.

>> Beispiel > BitmapAendern.fla Im Frame 3 werden aus dem Bild 4 Teilbilder erstellt und gezeigt. Im Frame 4 wird einen Bildteil beweglich gemacht. Dafr ist ein interaktives Objekt (Sprite) notwendig. Abschlussbeispiele von Colin Moock >> Beispiel (Quelle: moock.org./eas3/examples) >
ColorPicker.as und ColorPickerDemo.fla Eine Farbe wird aus einem Bild gelesen und es wird damit die Farbe eines Textes eingestellt.

>> Beispiel (Quelle:

moock.org./eas3/examples) >

Scribble.as und ScribbleDemo.fla Es handelt sich um eine sehr einfache Anwendung, die schwarze Pixel auf einer Leinwand zeichnet. 133

134

Weitere Bitmap-Methoden Weitere Methoden der Klasse BitmapData


compare(): vergleicht die Pixel zweier Bitmaps getColorBoundsRect(): ermittelt welche Region eines Bitmpas eine bestimmte
Farbe hat.

hitTest(): ermittelt, ob die Pixel eines Bitmaps mit einem anderen Bitmap, einem
Punkt oder einem Rechteck kollidieren. Dabei knnen Informationen ber den Alpha-Wert bercksichtigt werden. TIPP: Kollisionserkennung bieten schon die Methoden hitTestObject() und hitTestPoint(), die alle grafischen Klassen von DisplayObejct erben. Allerdings knnen damit die Alpha-Werte nicht bercksichtigt werden. lock(), unlock(): damit kann man verhindern, dass Vernderungen in einem Bitmap sofort im Display erscheinen. Erst nach Aufruf von unlock() werden die Vernderungen sichtbar. Das ist gut fr die Performance (vgl. [Moock 07, S. 665]).

>> Beispiel > BitmapHitest.fla Programm ist im ersten Frame der Zeitleiste und ausreichend kommentiert. >> Beispiel > BitmapLock.fla Programm ist im ersten Frame der Zeitleiste. TIPP: Meines Erachtens sollten die Vernderungen nicht gezeigt werden, bevor unlock() aufgerufen wird, aber sie werden doch gezeigt, das scheint ein Fehler in Flash zu sein (vgl. Beispiel in der Dokumentation)

135

Filter und Effekte an Bitmaps anwenden: berblick berblick


Die Klasse BitmapData bietet verschiedene Methoden an, um Effekte zu erzielen:

colorTransform() : einfache Farbtransformationen applyFilter() : Damit beschftigen wir uns in diesem Kapitel noise() : damit wird ein Bitmap mit zufllige Farbwerte verndert perlinNoise() : damit ist es mglich, Texturen zu erzeugen [Moock 07, S. 686] paletteMap() : Ersetzt Farben in einem Bild nach einer gegebenen Palette pixelDissolve(): man kann damit einblend-Effekte erzielen threshold() : man kann damit, die Farbe von Pixeln innerhalb bestimmten Grenzen
verndern.

Filter anwenden
AS bietet ein Set von Filtern fr Bitmaps. Jedes Filter ist als eine eigenstndige Klasse realisiert. Es gibt durchaus komplexe Filter, die ein tieferes Verstndnis der Bildbearbeitung erfordern. Einen berblick ber die Filterklassen bekommet man in der Dokumentation unter Alle

Pakete > flash.filters


Wir lernen hier die Grundprinzipien, wie Filter angewendet werden. Grundstzlich sind zwei Schritte notwendig: o Instanz der Fitler-Klasse erzeugen o Methode applyFilter() aufrufen

136

Filter und Effekte an Bitmaps anwenden: Beispiel Parameter der Methode applyFilter()
Die Methode hat folgende Parameter:

desitnationBMData.applyFilter(sourceBMData, sourceRect, destPoint, Filter)

sourceBMData: Bild auf dem das Filter angewandt werden soll. Quelle und Ziel kann (muss nicht) dasselbe BitmapData sein. sourceRect: Ein Rechteck, der die Flche definiert, auf der der Filter angewandt werden
soll. Soll der Filter auf das ganze Bild angewandt werden, gibt man als Wert fr diesen Parameter

sourceBMData.rect destPoint: Der Punkt des Zielbildes, wo die gefilterter Pixel platziert werden sollen. Filter: die Instanz der Filterklasse

Beispiele >> Beispiel > FilterEinfach.fla > Das Skript ist im ersten Frame der Anwendung und ausreichend kommentiert. >> Beispiel (Moock) > ScrapImageBook.as und ScrapImageBookDemo.fla Zuerst Bild photo.jpg zeigen, dann die Flash-Datei ausfhren und dann einige Aspekte der Klasse erlutern (improvisieren, da keine Zeit fr die Vorbereitung)

137

Animationen Die Klasse Tween und das Package fl.transitions


Seit AS3 ist es mglich, mit der Klasse Tween, Tween-Animationen zu Programmieren und nicht nur diese in der Zeitleiste zu erstellen.

Die Klasse Tween befindet sich in Package fl.transitions ist also keine fla-Klasse sondern eine flKlasse (eine Komponente). TIPP: Das Package fl.transitions beinhaltet noch andere Klassen fr die Erstellung von Animationen.

Das Package fl.transitions arbeitet mit dem fl.transitions.easing-Paket. Letzteres enthlt Klassen, die mit den fl.transition-Klassen zur Erstellung von Beschleunigungseffekten verwendet werden knnen (allmhliche Beschleunigung oder Verlangsamung bei der Animation).

>> Beispiel > anitmation-tween.fla > Skript ist im ersten Frame der Zeitleiste. Die MovieClip-Instanzen auf der Bhne werden animiert. Die Bedeutung der Parameter ist im Skript ausfhrlich kommentiert. Andere Pakete und Techniken fr Animationen mit AS
Die Pakete fl.motion und fl.motion.easing erlauben Animationen aus der Zeitleiste zu kopieren und auf andere Display-Objekte anzuwenden. Das Paket fl.geom erlaubt 3D-Animationen.

Darber hinaus ist es natrlich auch mglich, Display-Objekte zu animieren, indem man ihre Eigenschaften (z.B. Position oder Gre) mit AS direkt verndert. Damit die Animation auf dem Bildschirm zu sehen ist, muss sie in einem Event.ENTER_FRAME oder in einem TimerEvent.TIMER in Code platziert werden. TIPP: Eine Animation in einer while- oder for-Schleife ist nicht mglich, da zwischen den Wiederholungen die Bhne nicht neu gezeichnet wird. D.h. nur der Endzustand wird sichtbar, nicht die Animation.

>> Beispiel > animation-enterframe.fla > Im Frame 1 wird eine enterFrame-Funktion definiert, die hund2 animiert. Die Geschwindigkeit der Bewegung ist eine Konstante. Auerdem wird im Frame 1 die Variable v deklariert, wo die Geschwindigkeit fr hund1 gespeichert wird. Im Frame 2 wird die Geschwindigkeit v hoch gezhlt und hund1 animiert In Frame 3 wird der Abspielkopf zurck zur Frame 2 geschickt, damit die Animation realisiert wird.

138

Audio Audio mit Flash abspielen


In Flash gibt es verschiedene Mglichkeiten, Klangdateien abzuspielen:

1. Man kann Dateien mit der Flash-Entwicklungsumgebung in die Bibliothek importieren; der Sound ist somit Teil der SWF-Datei.

2. Man kann externe Sounddateien, die auf einer Festplatte (lokal oder im Netz) verfgbar sind, in der Laufzeit laden und abspielen.

3. Man kann externe Sounddateien, die ber einen Medienserver gestreamt werden (z.B. Flash Media Server), in der Laufzeit laden und abspielen.

4. Man kann Sounddaten von einem Mikrofon, das an das Benutzersystem angeschlossen ist, abspielen.

Der Flash-Player spielt Sounddateien grundstzlich in MP3Format ab. Dateien, die extern vorliegen, mssen in MP3-Format gespeichert sein. Die Flash-Entwicklungsumgebung ist in der Lage andere Formate zu importieren (z.B. WAV oder AIFF etc.). Sie werden nach MP3 transformiert.

139

Klassen fr die Steuerung von Audio


Fr die Einbindung und Steuerung von Audio bietet AS3 eine Reihe von Klassen, die im Package Flash.Media zu finden sind.

Klassen zur Steuerung einzelner Sounds


Sound Mit dieser Klasse werden Klangdateien (ggf.) geladen - mit der Methode load() - und abgespielt - mit der Methode play(). TIPP: Interne Sounds (die in der Bibliothek gespeichert sind) werden als Subklasse der Klasse Sound fr AS verfgbar gemacht (dies muss in den Verknpfungs-Einstellungen gewhlt werden).

SoundChannel Die Sound-Objekte werden in Soundkanle gespielt (das sind Instanzen der Klasse SoundChannel). Wenn die Methode play() der Klasse Sound ausgefhrt wird, wird automatisch ein neues SoundChannel-Objekt erstellt. Das, was tatschlich ber die Lautsprecher des Computers wiedergegeben wird, ist die kombinierte und gemischte Ausgabe aller SoundChannel-Objekte

SoundTransform Jeder Soundkanal verfgt automatisch ber eine Instanz dieser Klasse, die in der Eigenschaft soundTransform des Kanals gespeichert ist. Die Instanzen dieser Klasse verfgen ber Eigenschaften fr die Lautstrke und Richtungseinstellung des Sounds (volume, pan)

SoundEvent SoundEvents werden von Player ausgelst, wenn der Nutzer die Soundwiedergabe, z.B. die Lautstrke, verndert.

Globale Soundsteuerung SoundMixer enthlt statische Eigenschaften und Methoden fr die globale Soundsteuerung der in der SWF-Datei eingebetteten Streaming-Sounds (jedoch
keine mit AS erstellten Sound-Objekte).

SoundLoaderContext Darber werden Sicherheitsprfungen bei SWF-Dateien durchgefhrt, in denen Sounddaten dynamisch geladen werden.

140

Audio-Steuerung in der Praxis

>> Beispiel > soundDemo.fla Schritte zur Wiedergabe von Audio


1. Schritt Sound-Objekt erstellen. Muss der Sound aus einer externen Datei geladen werden, braucht man zuerst eine Instanz der Klasse URLRquest, mit deren Hilfe die Datei geladen wird. Ist der Sound intern in der Bibliothek abgespeichert, wird das Objekt als Instanz der Subklasse von Sound erstellt, die das Symbol darstellt.

>> Frame 1 > Bis Zeile 13


2. Schritt (Nur bei externen Sounddateien) Listener fr die Steuerung des Ladeprozesses registrieren und Funktion schreiben. Soundobjekte knnen verschiedene Ereignisse registrieren, z.B. PROGRESS, COMPLETE, IO_ERROR. Dazu spter mehr in Kapitel 7 (Externe Daten).

>> Frame 1 > Zeile 14 bis Ende


3. Schritt Variable fr den SoundKanal deklarieren, damit der Soundkanal spter gesteuert werden kann.

>> Frame 2 > Zeilen 6 und 7 4. Schritt


Mit der Methode play() des Soundobjekts den Sound abspielen; dabei wird die Instanz der Klasse SoundChannel von Flash automatisch erstellt.

>> Frame 2 > Listener-Funktion fr die Taste playB Lautstrke verndern


Um die Lautstrke (volume) oder die Richtungseinstellung (pan) zu verndern, bentigt man ein Objekt der Klasse SoundTransform. Die Instanz wird fr jeden Kanal automatisch von Flash erstellt und in der Eigenschaft soundTransform des Kanals gespeichert. Um die Lautstrke zu verndern wird die Eigenschaft volume der Instanz von SoundTransform verndert und die so vernderte Instanz noch einmal als Wert der Eigenschaft soundTransform des Kanals geschrieben.

>> Frame 2 > Listener-Funktion fr die Taste loudB

141

Mit Video arbeiten berblick


ActionScript bietet vielfltige Mglichkeiten, Video in einer Anwendung einzubinden und auf dem Bildschirm zu zeigen.

Grundstzlich muss man zwischen einem fertigen Videofilm und einer Live- bertragung unterscheiden.

Die Live-bertragung wird in AS mit der Klasse Camera gesteuert, damit werden wir uns in dieser Vorlesung nicht beschftigen.

Fr die Steuerung von fertigen Videofilmen gibt es zwei Mglichkeiten: o Es ist mglich mit den Klassen NetStream und Video der flash-Pakete zu arbeiten, die Grundfunktionalitt zu implementieren und die Funktionalitt entsprechend selbst zu programmieren. o Es ist mglich mit der FLVPlayback-Klasse zu arbeiten, die zu den fl-Paketen gehrt. In den flPaketen sind auch Komponenten genannte Klassen, die auf den flash-Klassen basieren und vollstndige und umfangreiche Funktionen anbieten.

In diesem Kapitel werden die Mglichkeiten der flash-Klassen demonstriert. Im Praktikum wird eine Aufgabe angeboten, in der ein interaktives Videosystem mit Hilfe der FLVPlaybackKlasse realisiert wird.

Internes Video zeigen und Steuern


Intern in der Bibliothek gespeichertes Video wird ber die Zeitleiste gezeigt. Die Steuerung des Videos mit AS gleicht also der Steuerung der Zeitleiste. Diese Technik wird in der Praxis nur fr Videos unter 5 Sek. empfohlen und ist in der Praxis nicht relevant

> Beispiel >> videoZeigen-intern.fla Es wird einfach ein Videofilm gezeigt, der sich in der Zeitleiste befindet.

142

Externes Video und ActionScript Die Vorbereitungsschritte


Um ein externes Video abzuspielen muss man: In Flash 1. Ein Video-Symbol in der Bibliothek erstellen und zwar ber das Men der Bibliothek mit dem Befehl [neues Video] 2. Eine Instanz aus dem Video-Symbol auf der Bhne erstellen und benennen.

In ActionScript
3. Ein Objekt der Klasse NetConnection mit AS erstellen und mit der Methode connect() eine Verbindung herstellen 4. Ein Objekt der Klasse NetStream mit AS erstellen. Das NetStream-Objekt wird mit dem NetConnection-Objekt direkt bei der Erstellung verbunden.

Beides zusammenbringen
5. Die Video-Instanz mit dem NetStream-Objekt mit der Methode attachVideo() der VideoKlasse verbinden.

>> Beispiel > videoZeigen.fla > Das Skript hierzu befindet sich im 2. Frame der Zeitleiste Video Abspielen
Mit der Methode play() der NetStream-Klasse kann man einen Film abspielen. play braucht als Parameter den Namen der Video-Datei (vollstndiger Pfad) Mit der Methode pause() kann man eine Pause erzeugen Mit der Methode resume() kann der Film weiter spielen

>> Beispiel > videoZeigen.fla > Skript im 1. Frame der Zeitleiste: mit der Eigenschaft time (nur lesen) wird geprft, ob der Film angefangen hat und gerade spielt oder schon zu Ende ist.
TIPP: Mehr zu externe Video-Dateien im Kapitel 7 Externe Daten.

143

Prof. Dr. Teresa Merino / Medieninformatik / Entwicklungswerkzeuge fr Multimedia-Anwendungen / Flash und ActionScript

7. Externe Daten und Netzwerkoperationen


Einfhrung
Laden von externen Medien o Bilder o Sounds o Videos o Flash-Filme Laden von externen Daten o Text (auch XML) o Variablen o Binre Daten Sicherheitsmechanismen beim Laden externer Daten Medien extern oder intern?

Externe Bilder (JPG, GIF, PNG),


Externe Bilder laden mit den Klassen URLRequest und Loader Ladevorgang berwachen mit der Klasse LoaderContent Bilder zeigen mit den Klassen LoaderContent oder Loader

Externe Sounds (MP3)


Externe Sounds laden mit den Klassen URLRequest und Sound Ladevorgang berwachen mit der Klasse Sound Geladene Sounds starten

Externe Videofilme (FLV)


Laden externer Videos mit den Klassen NetConnection und NetStream Ladevorgang von Videos berwachen Unterschied zwischen progressivem Download und echtem Streaming

Externe Flash-Filme (SWF)


Technische Grundlagen Praktische Anwendung Funktionen gegenseitig aufrufen

144

Externe Daten: berblick


Beschaffenheit externer Daten: o URL enkodierte Variablen o Klartext (auch XML- oder CSS-Dateien), o Binre Daten Schritte zum Laden externer Daten

URL enkodierte Variablen


Variablen lesen und nutzen Variablen schreiben und senden

XML-Daten
ECMAScript for XML (E4X) Die Klassen XML und XMLList Eine XML-Datei lesen Eine XML-Datei schreiben

Externe Medien und Daten: Tabellarische bersicht

145

Einfhrung berblick
Dieses Kapitel beschftigt sich mit dem Laden externer Medien und Daten. Dies beinhaltet: 1. Laden von externen Medien: Bilder (JPG, GIF, PNG), Sounds (MP3), Videos (FLV). 2. Laden von externen Flash-Filmen (swf-Dateien). TIPP: Flash-Filme sind ein Sonderfall von externen Medien, sie werden technisch betrachtet in etwa wie Bilder behandelt. Durch das Laden externer Flash-Filme lsst sich eine Anwendung strukturieren. 3. Laden von externen Daten (URL enkodierten Variablen, Text auch XML-Dateien , binren Daten), die mit AS weiter verarbeitet werden knnen.

Sicherheitsmechanismen beim Laden externer Daten


ActionScript ordnet jeder von Flash-Player gestarteten .swf-Datei einen Sicherheitsbereich zu (sog. Sandbox). Dabei wird u.a. unterschieden, ob die Datei sich auf einem Internet-Server befindet oder lokal gespeichert ist (auf der lokalen Festplatte oder im lokalen Netz) [Moock 07, S. 413]. Das Laden von externen Daten ist grundstzlich nur zulssig, wenn die aufrufende .swf-Datei und die aufgerufene Datei sich in derselben Sandbox befinden (beide Netzwerk oder beide lokal); das ist die Voreinstellung. Dazu mehr in Kapitel 8.

Medien: Extern oder Intern?


Eine Strke von Flash als Entwicklungswerkzeug fr Multimedia ist die Einbindung verschiedener Medien. Dazu gibt es zwei Alternativen:

Medien intern Speichern o Alle Medien (Bilder, Sounds, Videos) knnen intern in der Bibliothek der Flash-Datei gespeichert werden. Die importierten Medien knnen in der Anwendung, d.h. auf der Bhne gezeigt werden entweder interaktiv (durch Platzierung auf der Bhne bzw. in der Zeitleiste) oder mit AS (Video allerdings nur interaktiv). o Die Medien werden dann in die .swf-Datei mitkompiliert und erhhen natrlich deren Gre und Ladezeit; sie knnen nur durch Bearbeitung der Flash-Datei gendert werden. Medien extern Speichern und dynamisch Laden o Flexibler ist man, wenn die Medien auerhalb der .fla bzw. der .swf-Datei gespeichert und in der Laufzeit (dynamisch) geladen werden. Diese Technik ist sowohl fr online- als auch fr offline-Anwendungen empfehlenswert und funktioniert in beiden Fllen vergleichbar.

146

Externe Bilder Laden Formate


Die Bilder knnen in JPG-, PNG- und GIF-Format vorliegen.

Die Klasse URLRequest


Um ein externes Bild dynamisch zu laden, wird eine Instanz der Klasse URLRequest bentigt. Sie
bekommt den kompletten Pfad bzw. URL der Datei als Parameter bergeben:

>> Beispiel > var myRequest:URLRequest=new URLRequest("meinURL");

TIPP: Bei relativen Pfaden muss man beachten, dass sie relativ zur gestarteten Datei sein sollen, d.h. in der Regel zur html-Datei, mit der die Anwendung initialisiert wird (dies ist z.B. zu Bercksichtigen falls html- und swf-Datei sich in verschiedenen Verzeichnissen befinden).
In der Instanz der Klasse URLRequest werden die Informationen der zu ladenden Datei der Anwendung zur Verfgung gestellt, so dass der Ladevorgang beginnen kann.

Die Klasse Loader


Zum Laden und zeigen externer Bilder wird die Klasse Loader benutzt, die ber die Methode load() verfgt und mit der Instanz der Klasse URLRequest arbeitet: >> Beispiel > var myRequest:URLRequest=new URLRequest("meinURL"); var myLoader:Loader = new Loader(); loader.load(myRequest);
TIPP: Die Klasse Loader erbt von der Klasse DisplayObjectContainer und ist neben Stage und Sprite/MovieClip ein Container fr andere Instanzen. Der Loader-Container verhlt sich aber etwas anderes als andere Container: er hat ein einziges Kind-Objekt nmlich das geladene Bild. TIPP: Wir hatten schon in Kapitel 6 das Beispiel BitmpasZeigen.fla, in dem ein externes Bild mit URLRequest und Loader geladen und auf der Bhne gezeigt wird.

147

Den Ladevorgang externer Bilder berwachen Kein Streaming beim Laden externer Bilder
Ein Bild kann erst gezeigt werden, wenn alle Daten komplett herunter geladen sind: Bilder werden nicht gestreamt. Das gilt ebenso fr offline-Anwendungen. Auch wenn .swf-Datei und Bild sich auf demselben Datentrger befinden, bentigt der Ladevorgang etwas Zeit: versucht man das Bild zu zeigen, bevor es komplett geladen ist, bekommt man eine Fehlermeldung.

Auch Eigenschaften und Inhalt des Bildes knnen erst dann gelesen werden.

>> Beispiel > ExternesBild-Fehler.fla Skript Frame 1 und Frame 2 der Zeitleiste: Das Bild ist in Frame 2 noch nicht vollstndig geladen. Es kommt eine Fehlermeldung. Ladevorgang externer Bilder berwachen
Um Fehler zu vermeiden und berhaupt bei online-Anwnedungen, empfiehlt es sich, den Ladevorgang zu berwachen. Dafr stellt AS die Klasse LoaderInfo zur Verfgung.

Zum Loader-Objekt, mit dem das Bild geladen wird, erzeugt Flash automatisch ein Objekt der Klasse LoaderInfo. Sie ist in der Eigenschaft contentLoaderinfo des Loader-Objektes gespeichert.

Instanzen der Klasse LoaderInfo sind in der Lage, auf Ereignisse zu reagieren, die im Laufe des Ladevorgangs ausgelst werden. So lsst sich der Ladevorgang komfortabel berwachen: o Event.OPEN: Wird beim Start eines Ladevorgangs ausgelst. ACHTUNG! Event.OPEN wird nicht richtig verarbeitet, wenn der Player in IE luft (Fehlerstand Flash-Player-Version 9) o ProgessEvent.PROGRESS: Wird ausgelst, wenn whrend des DownloadVorgangs Daten empfangen werden. o Event.INIT: Wird ausgelst, wenn die Eigenschaften des geladenen Bildes (z.B. Breite, Hhe etc.) zugnglich sind. o Event.COMPLETE: Wird ausgelst, wenn die Daten vollstndig herunter geladen wurden. o IOErrorEvent.IO_ERROR: Eingabe-Ausgabe-Fehler beim Laden

>> Beispiel > ExternesBild-Ladevorgang.fla Die Ereignisse sind im 1. Frame implementiert und kommentiert (Download mit DSL-Verbindung simulieren).

148

Geladene Bilder zeigen Geladene Bilder zeigen


Dazu gibt es zwei alternative Techniken:

1. Das geladene Bild ist nach dem Ladevorgang zugnglich als der Wert der Eigenschaft content der Loader- oder aber auch der LoaderInfo-Instanz und kann der Displayliste mittels addChild() hinzugefgt werden.

TIPP: Dieser Inhalt ist das einzige erlaubte Child des Loader-Containers

2. Es ist auch mglich, das Loader-Objekt selbst (also den Container) der Display-Liste hinzufgen. Diese Technik hat einen entscheidenden Vorteil: der Container kann hinzugefgt werden, bevor das Bild vollstndig geladen ist. Wird das Bild erst spter geladen, wird es dann automatisch gezeigt. TIPP: Diese Vorgehensweise empfiehlt sich vor allem fr offline-Anwendungen, denn damit ist eine berwachung des Ladevorgangs nicht mehr ntig. Allerdings sind die Eigenschaften des Bildes erst verfgbar, wenn der Ladervorgang abgeschlossen ist.

>> Beispiel > ExternesBild-Zeigen.fla Skript ist im Frame 1 der Zeitleiste. Hier werden beide Alternativen zum zeigen von Bildern demonstriert. Abschlussbeispiel: Eine Klasse zum Laden und Zeigen externer Bilder >> Beispiel (Quelle: moock.org./eas3/examples) > PictViewer.as und PictViewerDemo.fla
Im Frame 1 der Flash-Datei wird eine Instanz von PictViewer erstellt. Damit wird mit einer einzigen Zeile ein externes Bild geladen und der Ladevorgang berwacht.

Zum testen kann man die Datei mit Download simulieren laufen lassen und eine langsame Verbindung (z.B. 56 K)einstellen.

149

Externe Sounds (MP3) Ladevorgang externer Sounds


Der Ladevorgang externer Sounds funktioniert mit einer Instanz von URLRequest hnlich wie bei externen Bildern allerdings mit zwei wichtigen Unterschieden:

1. Der Sound kann gestartet werden, auch wenn er nicht vollstndig geladen ist: Sounds werden gestreamt. Daher gibt es im Gegenteil zu Bildern keine Fehlermeldung, wenn die play()-Methode unmittelbar nach load() ausgefhrt wird.

2. Es wird fr alle weitere Schritte nur eine Klasse genutzt, die Klasse Sound und zwar um o die Datei zu laden (bei Bildern die Klasse Loader) o den Ladevorgang zu berwachen (bei Bildern die Klasse LoaderInfo) o den Sound zu starten

Auch whrend des Ladevorganges von Sounds wird eine Reihe von Ereignissen ausgelst, die mit Listener-Funktionen entsprechend behandelt werden knnen. So wird der Ladevorgang berwacht:

o Event.OPEN o ProgessEvent.PROGRESS o Event.COMPLETE o IOErrorEvent.IO_ERROR

>> Beispiel > ExterneSound-Ladevorgang.fla Ladevorgang wird im Frame 1 mit dem Sound-Objekt gesteuert. Wenn 25% der Datei geladen sind, wird der Sound gestartet. Er muss nicht zu 100% geladen sein. Geladene Sounds starten
Der Sound ist nach dem Ladevorgang als Wert der SoundInstanz zugnglich und wird mit der Methode play() der Sound-Klasse in einer Kanal-Instanz gespielt (Klasse SoundChannel).

>> Beispiel > ExterneSound-Ladevorgang.fla Download mit 14.4 simulieren.


TIPP: Wie wir schon im Kap. 6 gesehen haben, lsst sich die Wiedergabe des gestarteten Sounds ber die Eigenschaften der Klasse SoundChannel steuern.

150

Externe Videofilme (FLV) Ladevorgang externer Videos berwachen und Wiedergabe starten
Das Laden und Zeigen externer Videos funktioniert anders, als es fr Bilder und Sounds der Fall ist. TIPP: Dies wurde schon in Kapitel 6 angerissen.

Zum Laden einer externen Videodatei werden folgende Instanzen bentigt: o Eine Instanz der Klasse NetConnection: Damit wird eine Verbindung zwischen dem FlashPlayer auf dem Client und einem Server erffnet (progressives Download) bzw. einem Media-Server (echtes Streaming). o

Eine Instanz der Klasse NetStream: Ein NetStream-Objekt ist ein Kanal innerhalb eines NetConnection-Objekts. Fr jeden Videofilm wird eine NetStream-Instanz bentigt (unabhngig davon, ob der Server ein Media-Server ist oder nicht).

Die Instanz der Klasse NetStream startet den Ladevorgang und zwar mit der Methode play(), die gleichzeitig ldt und spielt. Es gibt keine zustzliche Methode load().Will man nur den Ladevorgang starten aber nicht den Film abspielen, muss man unmittelbar nach der Methode play() die Methode pause() aufrufen.

Um den Ladevorgang von Videos zu berwachen gibt es keine Ereignisse. Man kann den Ladevorgang nur mit Hilfe der Eigenschaften bytesLoaded und bytesTotal der Klasse NetStream berwachen.

TIPP: Obwohl Videos gestreamt werden, sollte ggf. der Ladevorgang berwacht werden, bevor ein Video gestartet wird. Bestimmte Funktionen knnen Fehler verursachen, wenn nicht das komplette Video verfgbar ist.

>> Beispiel > ExternesVideo-Ladevorgang.fla In Frame 2 wird der Ladevorgang mittels play() gestartet und das Abspielen mit pause() sofort gestoppt. In Frame 3 wird immer wieder geprft, ob der Videofilm vollstndig geladen wurde. Wenn der Videofilm vollstndig geladen ist, geht der Abspielkopf weiter zu Frame 4 und der Nutzer kann den Film starten. Dafr wird play() noch einmal aufgerufen. Download mit 14.4 simulieren.

151

Progressives Download und echtes Video-Streaming Einfhrung


Videofilme, die auf dem Server gespeichert sind und in einer swf-Datei mittels Flash-Player im Browser online abgespielt werden, mssen nicht vollstndig herunter geladen werden, damit sie zu sehen sind, sondern werden nach und nach bermittelt. Wenn eine erste Sequenz bermittelt ist, fngt der Film bereits an zu spielen.

Dabei muss man aber Progressives Download vom echten Streaming unterscheiden.

Progressives Download
Die Datei ist auf einem beliebigen Server und wird herunter geladen. So bald das erste Segment geladen ist, fngt der Film anzuspielen.

Dabei wird der Film in den Cache des Browsers geschrieben. Wird der Film ein zweites Mal geschaut, entstehen keine Wartezeiten mehr (das ist durchaus ein Vorteil).

Nachteile: Der Film wird nicht in Echtzeit gezeigt, er wird in den Cache geschrieben, dies kann u.U. missbraucht werden.

Echtes Streaming
Mit bestimmten Server-Lsungen wie dem Flash Media Server oder der Open Source Lsung Red5, kann man Videofilme in Echtzeit herunter laden.

Vorteile: o Echtzeit, weniger Wartezeiten, speziell zu empfehlen, wenn viel Publikum auf die Anwendung gleichzeitig zugreift. o Die Filme werden nicht in den Cache geschrieben o Es sind Live-bertragungen mglich.

152

Externe Flash-Filme (SWF) Technische Grundlangen


Ein Sonderfall bei der Nutzung externer Medien ist das Laden und Zeigen von externen swfDateien in eine Hauptdatei (die Datei, die im Player gestartet wird). Um externe swf-Dateien zu laden und den Ladevorgang zu berwachen, benutzt man in ActionScript genau dieselben Klassen und Techniken wie fr Bitmap-Bilder. Dies ist mglich, weil beide Klassen Subklassen von DisplayObject sind. Es gibt nur einen praktischen Unterschied: swf-Dateien knnen bereits gezeigt und genutzt werden, bevor sie vollstndig geladen sind und zwar sobald alle Elemente (inkl. Klassen) vom Frame 1 angekommen sind. Dann wird das Ereignis Event.INIT ausgelst.

>> Beispiel > ExterneSWF-Zeigen.fla und swf-Dateien im Verzeichnis swfFilme Die Hauptdatei ldt in Frame 1 weitere swf-Dateien. Die geladenen Dateien werden im Frame 2 gezeigt. In diesem einfach gehaltenen Beispiel werden die loader-Objekte der Displayliste hinzugefgt, auf diese Weise kann auf eine berwachung des Ladevorgangs verzichtet werden. Praktische Anwendung
Es ist eine bliche Technik, Anwendungen in mehreren Flash-Dateien zu strukturieren, damit hat man einen besseren berblick und Entwicklung und Pflege werden erleichtert.

Zum Beispiel knnen von einer Hauptdatei aus, verschiedene Kapitel oder Teile einer Anwendung geladen werden.

>> Beispiel > mainSpiele.fla und memory.swf im Verzeichnis swfFilme. Die Hauptanwendung Gesammelte Spiele ldt die einzelnen Spiele als Teilanwendungen, die voll funktionsfhig sind. Dabei werden die Teilanwendungen transparent gezeigt, so dass der Hintergrund der Hauptanwendung zu sehen ist.

153

Externe Flash-Filme: Funktionen gegenseitig aufrufen Funktionen der geladene Datei aufrufen
Wenn eine externe SWF-Datei in einer Hauptanwendung geladen wird, knnen die Funktionen der externen SWF-Datei von der Hauptanwendung aus aufgerufen werden. Man muss nur den richtigen Pfad angeben und die SWF-Datei als MovieClip casten. TIPP: hnlich verhlt es sich mit Variablen.

>> Beispiel (Quelle: Bilder und Ideen von Richard Pietzsch, Sommersemester 2009) > mainBerry.fla und berry.fla Frame 1 der Zeitleiste im mainBerry: externe SWFFilm wird geladen und gezeigt; wenn er fertig initialisiert ist, geht es weiter zum Frame 2. Frame 2 in mainBerry: Hier werden eine Reihe von Funktionen aus dem Film berry.swf aufgerufen. Funktionen der ladenden Datei aufrufen
Es ist ebenfalls mglich, Funktionen der Hauptdatei von der Untergeordneten Datei aus, aufzurufen. Achtung! Beim Kompilieren muss dabei der Strikte-Modus abgeschaltet werden, da die Funktion der Hauptdatei sonst nicht gefunden werden. Dieses Problem wird weiter untersucht (Stand Mai 2011).

>> Beispiel (Quelle: Bilder und Ideen von Richard Pietzsch, Sommersemester 2009) > mainBerry.fla und berry.fla Frame 2 in mainBerry: der letzte Listener ruft die Funktion mainAufruf von berry Frame 1 in der Datei berry: hier ist die Funktion mainAufruf() definiert. Sie ruft die Funktion mainFKT auf (mit vollstndigem Pfad) Frame 1 im berry.fla: hier ist die Funktion mainFKT definiert, die einen Text im Ausgabefenster zeigt.

154

Externe Daten Beschaffenheit externer Daten


Externe Daten sind in diesem Zusammenhang wie folgt zu verstehen: o URL enkodierte Variablen o Klartext (auch XML-, HTML oder CSS-Dateien) o Binre Daten Die Daten knnen als solche im Server vorliegen oder das Ergebnis der Ausfhrung eines CGISkriptes (Common Gateway Interface) z.B. einer PHP-Anfrage an eine Datenbank sein. So ist es mglich, dynamische Flash-Anwendungen zu realisieren. Externe Daten werden nicht gestreamt. Erst wenn die Datei vollstndig geladen ist, kann die Anwendung darauf zurckgreifen. MERKE: Im Gegensatz zu Medien knnen externe Daten nicht nur herunter sondern auch hoch geladen werden.

Externe Daten mit der Klasse URLLoader laden


Um externe Daten (egal welcher Beschaffenheit) von einem Server oder Festplatte zu laden, bietet AS die Klasse URLLoader. Die Klasse URLLoader arbeitet (wie die Klassen Loader und Sound) mit der Klasse URLRequest zusammen. Die Klasse URLLoader hat die Eigenschaft dataFormat. Sie kann drei verschiedene Werte bekommen (die als Konstante der Klasse URLLoaderDataFormat realisiert sind): o URLLoaderDataFormat.TEXT (Voreinstellung)

o URLLoaderDataFormat.VARIABLES o URLLoaderDataFormat.BINARY
Schritte zum Laden externer Daten

1. Eine Instanz der Klasse URLRequest erzeugen, der der komplette Pfad der zu ladenden Datei bergeben wird (ggf. Pfad des CGI-Programms). 2. Eine Instanz der Klasse URLLoader erzeugen und den Ladevorgang mit der Methode load() starten. 3. Ladevorgang berwachen. Dafr wird die Instanz der Klasse URLLoader ber eine Reihe von Ereignissen benachrichtigt.

155

Externe Daten: den Ladevorgang berwachen Ereignisse zur berwachung des Ladevorgangs
Event.OPEN Dieses Ereignis ist aus dem Ladevorgang von DisplayObjekten und Sounds bekannt. Es wird ausgelst, wenn der Ladevorgang gestartet wird. ProgessEvent.PROGRESS
Bekannt. Es wird ausgelst, wenn whrend des Download-Vorgangs Daten empfangen werden. Hier ist zu beachten, dass erst am Ende des Ladevorgangs die Daten verfgbar sind.

Event.COMPLETE
Bekannt. Es wird ausgelst, nachdem alle empfangenen Daten decodiert und in der Eigenschaft data des URLLoader-Objekts abgelegt wurden.

IOErrorEvent.IO_ERROR
Bekannt. Es wird ausgelst, wenn bei einem URLLoader.load()-Aufruf ein schwerwiegender Fehler auftritt und der Download abgebrochen wird.

SecurityErrorEvent.SECURITY_ERROR Neu. Es wird ausgelst, wenn ein URLLoader.load()-Aufruf versucht, Daten von einem
Server auerhalb der Sicherheits-Sandbox zu laden.

>> Beispiele > Konkrete Beispiele betrachten wir anhand verschiedener Datentypen. Wir behandeln zwei Datentypen: URL-enkodierte Variablen und XML-Dateien (Text). Wir behandeln binre Daten nicht.

156

URL enkodierte Variablen Was bedeutet URL Enkodierung?


URL enkodierte Texte sind Variable-Wert-Paare, die mit dem Zeichen & verknpft werden: > Beispiel >> variable1=wert1&variable2=wert2&variablen=wert3 URL enkodierte Texte sind wichtig, weil Suchabfragen, bei denen Variablen von einem Server gelesen oder an einem Server geschickt werden so kodiert sind. Eine Flash-Anwendung kann solche Dateien empfangen und versenden.

In URL-Format reservierte Zeichen


Das URL-Format bentigt einige Zeichen fr die Formatierung. Wenn diese Zeichen als Inhalt einer Variablen eingegeben werden sollen, mssen sie verschlsselt werden:

Zeichen $ & + , / : ; = ? @

Name Dollar Ampersand Plus Komma Schrgstrich nach vorne Doppelpunkt Semikolon Gleich Fragezeichen At

URL-Codierung %24 %26 %2B %2C %2F %3A %3B %3D %3F %40

Darber hinaus mssen Zeichen verschlsselt werden, die nicht sicher verstanden werden etwa {} oder [] oder ^ oder ~

157

URL enkodierte Variablen laden, lesen und nutzen Variable Werte herunterladen
URL-Codierte Variablen werden in der Praxis genutzt, um das Ergebnis der Ausfhrung von CGISkripten in Erfahrung zu bringen (nicht um fertige Dateien zu lesen).

Auf diese Weise kann eine Flash-Anwendung mit einem serverseitigen Programm Daten austauschen und in der Laufzeit (dynamisch) darauf reagieren.

Die Schritte zum Laden der Variablen sind die bereits beschriebenen Schritte zum Laden externer Daten (S.12). Als Wert der Eigenschaft url der URLRequest-Instanz wird die komplette URL des Skripts angegeben.

>> Beispiel > "http://mysite.com/cgi/get_variables.php" Geladene Werte lesen und nutzen


Die Instanz der Klasse URLLoader, mit der die Daten herunter geladen wurden, besitzt die Eigenschaft data. Dort sind die variablen Werte gespeichert und zwar als Instanz der Klasse URLVariables

Um Zugang zu den Variablen-Werten zu haben, bedarf es einer Instanz der Klasse URLVariables. Sie bekommt als Parameter die in data gespeicherte Daten. Auf diese Weise werden sie dekodiert und sind als Eigenschaften des URLVariables-Objekt verfgbar (die Klasse URLVariables ist dynamisch).

>> Beispiel > URLVariablen.fla und variablenWerte.txt Das Skript ist im ersten Frame der Zeitleiste und ausreichend kommentiert. TIPP: Es ist mglich dem Konstruktor der Klasse URLLoader direkt die Instanz von URLRequest zu bergeben und so den Ladevorgang ohne explizite Aufruf der load()-Methode zu starten (bei der Loader-Klasse fr Bitmpas und swf-Filme ist diese Abkrzung nicht mglich). Beachte die Zeile variablen = new URLVariables(e.target.data); und ff. in der Listener-Funktion completeFkt. Hier werden die Daten gelesen. Auf der Bhne befinden sich zwei dynamische Textfelder, wo die Werte der Variablen gezeigt werden.

158

Variablen senden URLLoader.load()


Mit der Methode load() der Klasse URLLoader werden Daten nicht nur geladen, sie knnen auch gesendet werden. Dafr mssen Sie die Daten als Wert der Eigenschaft data des URLRequest-Objekt festkegeb. Dabei steuert die Eigenschaft method der URLRequest-Klasse die HTTPFormularbertragungsmethode (GET oder POST). Voreinstellung ist GET.

MERKE: In diesem Fall ist data eine Eigenschaft des URLRequestObjektes. Wenn Variablen gelesen werden, ist data eine Eigenschaft des URLLoader-Objektes. In beiden Fllen ist der Wert der Eigenschaft data ein Objekt der Klasse URLVariables. TIPP: navigateToURL
Die Package-Methode navigateToURL des flash.net-Pakets kann genutzt werden, um einfach eine neue URL im Browserfenster zu ffnen.

>> Beispiel > navigateToURL.fla Skript ist im Frame 1 und 2 der Hauptzeitleiste. Die Anwendung ffnet ein Browserfenster und navigiert zu der eingegebenen Adresse. Will man Daten an die URL senden, benutzt man die Eigenschaft data der Klasse URLRequest in Verbindung mit der Methode navigateToURL(). Auch hier ist eine Instanz der dynamischen Klasse URLVariables als Wert der Eigenschaft data der Klasse URLRequest
notwendig.

>> Beispiel > [Quelle: Flash-Dokumentation] var url:String = http://www.[yourDomain].com/application.jsp"; var request:URLRequest = new URLRequest(url); var variables:URLVariables = new URLVariables(); variables.exampleSessionId = new Date().getTime(); variables.exampleUserLabel = "guest"; request.data = variables; navigateToURL(request); Tipp: sendToURL
Will man Variablen Daten zu einem Server schicken, ohne die Adresse im Browserfenster zu ffnen, kann man entsprechend die Package-Methode sendToURL des flash.net-Pakets nutzen.

MERKE: NaviagteToURL() und sendToURL() sind ltere Funktionen, die durch die Methode load() der neuen URLLoader Klasse nicht mehr die erste Wahl sind.

159

XML-Daten XML-Datei herunterladen


Die Schritte zum Laden von XML-Dateien sind die bereits beschriebenen Schritte zum Laden externer Daten mit den Klassen URLRequest und URLLoader (S.12) Die Eigenschaft dataFormat der URLLoader-Instanz muss den Wert URLLoaderDataFormat.Text (dies ist die Voreinstellung).

Klassen fr die Steuerung von XML-Dateien


ActionScript ab Version 3 implementiert ECMAScript for XML (E4X). Es handelt sich um eine offizielle Erweiterung der ECMA-262-Sprache, die die Arbeit mit XML erleichtern soll.

Zum lesen und steuern von XML-Daten implementiert AS3 die Klassen XML und XMLList. MERKE: Beide sind oberste Klassen, sie sind nicht in einem Package

Was ist die Klasse XML? Wenn die XML-Datei geladen und in ein XML-Objekt konvertiert wird, ist sie eine Instanz der Klasse XML, darber hinaus sind alle Kinder im XML-Objekt (ob Element, Attribut, Text, Kommentar oder Befehl) selbst XML-Objekte.

>> Beispiel > XMLLaden.fla und Kunden.xml

Skript ist im ersten Frame der Zeitleiste Die Datei befindet sich in der Eigenschaft data des URLLoaders und kann mit dem Konstruktor der Klasse XML in ein XML-Objekt konvertiert werden.
Was ist die Klasse XMLList? Eine XMLList ist eine Liste von XML-Objekten. Auf jeder Ebene der XML-Hierarchie befindet sich eine Liste der Objekte auf dieser Ebene. Das gilt auch, wenn es fr die Ebene nur ein Objekt gibt. >> Beispiel > XMLLaden.fla

und Kunden.xml

Veraltete XML-Klassen in Package flash.xml


Das Package flash.xml ist veraltet! Es ist aus Grnden der Kompatibilitt mit AS2 noch vorhanden Die Klassen XMLDocument (frher nur XML genannt), XMLNode, XMLNodeTyp befinden sich in diesem Package.

160

Daten in einer XML-Datei lesen Grundlagen


Man kann die Daten aus einer XML-Datei grundstzlich mit zwei verschiedenen Techniken lesen: Mit den Methoden der Klassen XML und XML-List z.B. child(), attribute(), element(), parent() Operator, man muss die Methode nutzen)

Mit den Zugangs-Operatoren ., *, [], @ (Achtung! fr parent() gibt es keinen

Darber hinaus kann man Werte der Elemente ber den Namen lesen.

>> Beispiel > XMLLesen.fla und xmlBeispiel.xml Skript im ersten Frame, es wird der Einfachheit halber die Datei xmlBeispiel gelesen. for-each-in-Schleifen zum Lesen von XML-Daten
Mit der for-each-in-Schleife ist es mglich, die Child-Knoten einer XML-Liste (Instanz der Klasse XMLListe) zu lesen. Die Schleife wird so oft ausgefhrt, wie Child-Knoten in der Liste sind. Vgl. dazu [Moock 07, S. 377 und ff.]

>> Beispiel > XMLForEachIn.fla und Kunden.xml Skript ist im ersten Frame und ausreichend kommentiert. Suchen in XML (Filtering)
Mit dem Ausdruck myXMLList.(conditions)ist es mglich, gezielt nach Elementen in einer XML-Liste zu suchen, die die Bedienung innerhalb der Klammer erfllen. Das ist eine sehr einfache aber sehr mchtige Technik. Vgl. dazu [Moock 07, S.383 und ff.]

>> Beispiel > XMLFiltering.fla und Kunden2.xml Skript ist im ersten Frame und ausreichend kommentiert.

161

In eine XML-Datei schreiben und Datei senden Grundlagen


Mit der XML-Klasse knnen nicht nur XML-Dateien gelesen sondern auch neue XML-Objekte erzeugt und dort geschrieben werden.

Die so erstellten XML-Objekte knnen mit Hilfe der Klasse URLLoader an einen Server geschickt werden und zwar indem das XML-Objekt als Wert der Eigenschaft data des URLLoader-Objekts geschrieben wird.

>> Beispiel > XMLSchreiben.fla Hier wird das Verfahren offline demonstriert. Das Skript ist im Frame 1 und ausreichend kommentiert.

162

Externe Medien und Daten Tabellarische bersicht ber die bentigten Klassen (und ggf. ihre Eigenschaften)
Externe Datei Angabe der genauen URL Starten des Download berwachen des Download Lesen bzw. Zeigen des Ergebnisses

Medien (nur Download)

Bilder (JPG, GIF, PNG)

URLRequest

Loader

LoaderInfo

Loader.content bzw. Loader

Flash-Filme (SWF) Sounds (MP3)

URLRequest

Loader

LoaderInfo

Loader.content bzw. Loader Sound

URLRequest

Sound

Sound

Video (FLV)

NetConnection

NetStream

NetStream

NetStream Video

Daten (Down- und Upload)

URL Variablen Klartext (XML, CSS etc.)

URLRequest

URLLoader

URLLoader

URLLoader.data URLVariables URLLoader.data XML XMLList

URLRequest

URLLoader

URLLoader

Prof. Dr. Teresa Merino / Medieninformatik / Entwicklungswerkzeuge Multimedia-Anwendungen / Flash und ActionScript

163

8. Eine Anwendung verffentlichen


Vor der Verffentlichung
Eine Anwendung optimieren o Skripte o Texte o Grafik und Animationen o Audio und Video Letzte Fehler mit dem Debugger aufspren Online und Offline: Flash-Cookies

Online verffentlichen
Download-Verhalten testen Preloader mit und ohne ActionScript Tipps zur Optimierung eines Preloaders Sicherheitseinschrnkungen fr Online-Anwendungen o Sicherheitsbereich eines Filmes oder Sandbox o Zugriff auf Medien und auf Daten o Erlaubte und verbotene Zugriffe o Sog. Policy File, um weitere Zugriffe zu erlauben Filme im Dialog mit dem Browser mit der Klasse ExternalInterface

Offline verffentlichen
Einstellungen fr den Projektor (EXE-Datei) mit den Klassen Stage, System und anderen Sicherheitseinschrnkungen fr Offline Anwendungen: der Einstellungsmanager

Adobe Integrated Runtime (AIR)

164

Vor der Verffentlichung: eine Anwendung optimieren Skripte optimieren


Durch Einhaltung von Konventionen (Schreibweise, Ebenen) Durch ausreichende Kommentierung Durch Strukturierung, Modularisierung und Kapselung Durch durchdachtes OO- und Software-Design (Design Muster und Software Architektur). TIPP: Empfehlenswert ist das Buch von Sanders und Cumaranatunge ActionScript 3.0 Design Patterns

Text optimieren
Begrenzen Sie die Anzahl von Schriftarten und -stilen. Benutzen Sie eingebettete Schriftarten sparsam, da sie die Datei vergrern (ca. 15 KB je Schrift). Whlen Sie unter Schriftarten einbetten nur die bentigten Zeichen aus, statt den gesamten Zeichensatz einzubetten. TIPP: Schriftarten einbetten finden Sie in der Schaltflche Zeicheneinbettung im Eigenschaften-Fenster, wenn Sie auf der Bhne einen dynamischen Text eingeben. Whlen Sie Auto ausfllen

165

Eine Anwendung optimieren (Fortsetzung) Grafik und Animation optimieren


Vektorgrafiken o Anzahl der Knoten und Linien begrenzen (Modifizieren > Form > Optimieren bzw. Gltten, Begradigen )

>> Beispiel > grafik-optimieren.fla Grenbericht (Einstellungen fr Verffentlichungen) erstellen; Biene optimieren: Grenbericht noch einmal erstellen und vergleichen (der Bericht wird als TXT-Datei gespeichert und erscheint auch im Ausgabefenster)
o Anzahl spezieller Linientypen begrenzen o Farbverlufe, Alpha- und andere Effekte sparsam einsetzen und nicht animieren

Pixelgrafiken o Nicht animieren o Klein halten (nur in der notwendige Gre und Qualitt einbinden) o Komprimierung ber die Eigenschaften des Symbols oder ber die Einstellungen fr Verffentlichungen ggf. anpassen.

>> Beispiel > grafik-optimieren.fla


o Bevorzugt Grafiken extern speichern und in der Laufzeit laden

Animationen o Wie oben erwhnt: Animierte Bitmapelemente und animierte Farbverlufe vermeiden. o Animationen auf einen mglichst kleinen Bereich beschrnken. o Objekte, die sich im Laufe der Animation verndern, auf separate Ebenen, getrennt von den Objekten, die sich nicht verndern, stellen. o Movieclip-Symbole statt Grafiksymbole animieren o Tween-Animationen anstatt eine Reihe von Schlsselbildern benutzen

166

Kontinuierliche Medien optimieren Sound optimieren


Verwenden Sie fr Sounds externe MP3-Dateien. Falls Sie interne Sounds benutzen (nur bei sehr kleinen Sound-Effekten empfehlenswert): Einstellungen fr Verffentlichungen anpassen o Es ist mglich, getrennt fr Ereignis- und Streaming-Sound die Komprimierungseinstellungen zu bestimmen. o Darber hinaus ist es mglich, mit der Auswahl Soundeinstellungen bergehen die Einstellungen in den Eigenschaften der einzelnen Audiostcke auer Kraft zu setzen. >> Mit Datei audio-optimieren.fla demonstrieren. Komprimierungseinstellungen verndern. Die Qualittsunterschiede sind deutlich zu hren. Aber auch die Datei ist viel kleiner.

Video optimieren
Videofilme grundstzlich extern speichern (Adobe empfiehlt internes Video nur bis zu einer maximalen Lnge von 5 Sek.).

Flash Video kann mit drei Codecs gespeichert werden: On2 vp6 Codec (Voreinstellung) und Sorensen Spark Codec (veraltet), neu dazu gekommen ist MPEG4: H264. Es empfiehlt sich die Voreinstallung zu belassen. Die Qualitt ist hher und die Datei ist trotzdem kleiner.. MERKE: Google hatte auf der Google Konferenz I/O am 20. Mai 2010 ein freies Videoformat Vp8 vorgestellt unter dem Namen WebM. Auerdem kommt HTML 5 mit einem eigenen Videoformat. Hier muss man abwarten, bis sich das ganze entwickelt. Mehr dazu unter: www.video-flash.de

Wenn eine online Verffentlichung vorgesehen ist, so dass viele Anwender gleichzeitig zugreifen, sollte eine Serverlsung installiert werden: Flash Media Server oder die Open Source Lsung Red5; nur diese erlauben das Download in Echtzeit.

Ist ein Media Server nicht vorgesehen, kann man das Download-Verhalten optimieren, indem man die Videofilme in kleinere Sequenzen teilt und diese im Hintergrund ldt. Vor allem bei interaktivem Video ist ein rechtzeitiges vollstndiges Laden der Videosequenzen notwendig. TIPP: Diese Technik kam in dem Projekt Virtuelle Bibliothek zum Einsatz, das mit interaktivem Video arbeitet

167

Vor der Verffentlichung: Letzte Fehler mit dem Debugger aufspren Mit dem Debugger in der Entwicklungsumgebung testen
Um mit dem Debugger zu arbeiten, empfiehlt es sich, Haltepunkte im Skriptfenster an den Stellen zu setzen, die berprft werden sollen. Anschlieend kann der Debugger mit dem Menpunkt [Debuggen > Debuggen] gestartet werden. Die Funktionsweise des Debugger ist weitgehend selbst erklrend.

Mit dem Debugger im Browser testen


In ActionScript 3.0 FLA-Dateien kann kein Debugging an Code in Bildskripts durchgefhrt werden. Mit dem ActionScript 3.0 Debugger knnen Sie nur Code in externen AS-Dateien debuggen. Schritte 1. 2. 3. 4. 5. In den Einstellungen fr [Verffentlichungen > Flash] Debugging erlauben auswhlen. Datei verffentlichen Befehl [Debugger > Remote-Debug-Sitzung] whlen Datei im Browser starten Die Verbindung zum Debugger wird automatisch hergestellt

168

Online und Offline: Flash Cookies Die AS-Klasse SharedObect und die Klasse LocalData von C. Moock
Flash Cookies sind seit Flash MX 2004 mit der Klasse SharedObject mglich. Damit kann man Daten auf der Client-Festplatte speichern, egal ob die Anwendung online- oder offline luft. Mit SharedObject werden automatisch Daten im Browseruntersttzungsverzeichnis gespeichert und zwar in ein Unterverzeichnis mit dem Namen #SharedObjects TIPP: Zu finden z.B. in Windows 2007 unter users\myUser\Anwendungsdaten\Macromedia\FalshPlayer Die Dateien mit der Endung .sol drfen bis zu 100 KB gro sein, sie sind Sammlungen von Eigenschaften und ihren Werten. Die Klasse SharedObject ist allerdings unntig schwer zu handhaben und die Dokumentation lsst zu wnschen brig. Abhilfe schafft die von C.Moock entwickelte Klasse LocalData mit den Methoden load() und save(), die sehr einfach zu handhaben sind.

Methoden der Klasse LocalData


Methode zum speichern von Werten save() mit drei Parametern, Datei, Eigenschaft und Wert, alle vom Typ String. LocalData.save(saveRecordName_txt.text, saveFieldName_txt.text, saveFieldValue_txt.text); Methode zum lesen von Werten load() mit zwei Parametern, Datei und Eigenschaft beide vom Typ String. Es wird der Wert als Text zurckgegeben. LocalData.load(loadRecordName_txt.text, loadFieldName_txt.text); Die vollstndige Dokumentation dazu findet sich im Besipiel-Verzeichnis in der HTML-Datei

LocalData-Dokumentation.html
>> Beispiel (von Colin Moock) > localdata-demo.fla Datei starten und Daten eingeben. Skript befindet sich in Frame 1, dort werden die Methoden der Klasse im Listener fr beide Buttons eingesetzt. Klasse localData ffnen und betrachten. Sie benutzt die AS-Methoden getLocal() und flush(): o getLocal() gibt einen Verweis auf das Shared Object zurck, das nur fr den aktuellen Client verfgbar ist. Falls das gemeinsam genutzte Objekt nicht bereits existiert, wird es durch diese Methode erstellt. o flush() schreibt das Objekt als .sol-Datei auf die Festplatte.

169

Online verffentlichen

170

Download-Verhalten Was der Flash-Player automatisch leistet


Der Flash Player versucht, die festgelegte Bildrate einzuhalten. Die tatschliche Bildrate bei der Wiedergabe kann allerdings je nach Computer und je nach Internet-Verbindung unterschiedlich sein. TIPP: Die Bildrate kann in der Entwicklungsumgebung unter Modifizieren > Dokument > Bildrate gendert werden, auch im Eigenschaftenfenster der Bhne. Mit AS lsst sich die Bildrate mit der Methode frameRate() der Klasse Stage einstellen. Wenn ein Film beim Herunterladen ein bestimmtes Bild der Zeitleiste erreicht, dessen Daten noch nicht herunter geladen sind, wird der Film automatisch so lange angehalten, bis die Daten zur Verfgung stehen, damit keine Fehler geschehen. Wenn Sounddateien nicht schnell genug herunter geladen werden knnen, werden Passagen des Audios ausgespart (bringt eine schlechtere Qualitt mit sich) oder eine Pause angelegt. Der Cache des Zielrechners wird vom Flash-Player automatisch genutzt und verwaltet. Sind Dateien bereits heruntergeladen, werden sie bei erneuter Anforderung aus dem lokalen Cache geholt.

Download-Verhalten testen: der Bandbreiten-Profiler


Mit dem Bandbreiten-Profiler kann das Download-Verhalten eines Filmes bereits bei der Entwicklung simuliert werden. Die Downloadleistung wird grafisch dargestellt. Man sieht, welche Datenmenge fr jedes einzelne Bild der Zeitleiste gesendet wird. Beim Simulieren der Downloadgeschwindigkeit verwendet Flash Schtzwerte, die der typischen Internet-Leistung entsprechen, - Modem (56 KBits, tatschliche bertragung 4,5 KBits): 4600 Bits - ISDN (64 KBits, tatschliche bertragung 6,5 KBits): 6600 Bits - DSL 1MB/1024 KBits, tatschliche bertragung 150 KBits: 153600 Bits - Entsprechend DSL 2 und 3. Man kann diese Werte auch selbst eingeben. Es handelt sich immer um die tatschliche Bit-Rate.

171

Download Test in der Praxis Download Test durchfhren


1. Film mit [Str + Return] laufen lassen. 2. Im Men Ansicht > Downloadeinstellungen Einstellungen whlen: z.B. DSL oder Modem. 3. Ansicht > Bandbreiten-Profiler whlen, um die Downloadleistung grafisch darzustellen. 4. Evtl. auch Ansicht > Download simulieren ausprobieren

Ansichten des Bandbreiten-Profilers


Der Bandbreiten-Profiler kann in drei Modi betrachtet werden. Die Umschaltung geschieht ber: Ansicht> Streaming-Grafik bzw. Ansicht> Bild-fr-Bild-

Grafik
Streaming-Grafik (Voreinstellung) - Das Streaming-Verhalten wird grafisch wiedergegeben. Die Bilder werden in Balken dargestellt. - Wenn ein Balken die rote Linie in der Grafik berschreitet, stoppt der Flash Player die Wiedergabe, bis alle notwendige Daten bertragen wurden (d.h. an der Stelle sollte optimiert werden). Bild-fr-Bild-Grafik - Jedes Bild im Film wird durch einen Balken dargestellt. - Die Gre eines Balkens entspricht der Bildgre in Bytes. - Mit dieser Darstellung knnen Sie erkennen, welche Bilder der Zeitleiste Probleme verursachen knnen. Download simulieren

>> Beispiel > downloadTest.fla testen Download simulieren. Es dauert eine Weile bis berhaupt die berschrift zu sehen ist, d.h. der Film muss optimiert werden. Einfache Manahmen dafr sind: 1. Fr die Movie-Clips Biene, Fisch, Hamster, Schnecke, Seehund und Kfer in Verknpfung. In erstes Bild exportieren abschalten. Download simulieren. Es ist alles schnell zu sehen ABER die Clips sind nicht verfgbar wenn sie bentigt werden. 2. Die Lsung: Export abgeschaltet lassen und Clips im 2. Frame auerhalb der Bhne platzieren (dafr ist das Symbol Download-Clip in der Bibliothek vorbereitet).

172

Preloader Das Problem


Auch wenn Sie Ihre Filme optimieren und die Daten mglichst klein halten, werden Sie nicht immer vermeiden knnen, dass je nach Internetverbindung Ihrer Nutzer nicht immer alle Daten schnell genug geladen werden. Es entstehen Wartepausen. Die Lsung: Lassen Sie den Film erst laufen, wenn die notwendigen Daten fertig herunter geladen wurden. Stellen Sie einen Preloader voran. Natrlich muss man hier ein Gleichgewicht finden. Wenn man eine sehr groe Anwendung zu 100 % im Voraus ldt, ist die Wartezeit zu lang. Man muss das Streaming der Flashfilme optimal nutzen.

Preloader ohne ActionScript: wie oben gesehen


Sie knnen die Daten bzw. Medien (Bilder, Sounds...) auf der Bhne in Bild 2 der Zeitleiste bzw. im gewnschten Bild platzieren und geben Sie davor eine entsprechende Meldung aus. Der Film bleibt in Bild 2 bzw. im gewnschten Frame stehen, bis alle Daten geladen sind. TIPP: machen Sie die Medien unsichtbar indem Sie diese in einen MovieClip packen, das erste Bild des Clips leer lassen und mit einer stop() Anweisung versehen. Besser ist noch wie folgt zu verfahren: trennen Sie die Medien nach Kategorien, benutzen Sie fr jede Kategorie ein Bild der Zeitleiste und geben Sie jeweils eine Meldung aus. Z.B Grafiken werden geladen ... >> Beispiel > downloadTest.fla (vgl. S.10)

Preloader mit ActionScript


Mit ActionScript kann fr alle externe Medien (Bilder, Sounds und Video) der Ladevorgang individuell gesteuert werden (vgl. Kapitel 7).

Wenn Sie mit der Zeitleiste arbeiten, knnen Sie auerdem den Ladevorgang fr den Hauptfilm steuern und zwar mit den Eigenschaften totalFrames und framesLoaded. Dies

setzt natrlich eine Zeitleisten-orientierte Entwicklung voraus.


>> Beispiel > preloaderFrames.fla Hier ist ein interner Videofilm gespeichert. Im Bild 2 der Zeitleiste befindet sich das Programm, das mit framesLoaded und Totalframes arbeitet. Der Flash-Film legt eine Pause an, bis 50% der Zeitleiste herunter geladen ist, so dass beim Spielen des Filmes keine Wartepausen entstehen.

TIPPS fr die Optimierung des Preloader Export fr ActionScript


Symbole, die fr AS exportiert werden, werden im Prinzip im ersten Bild der Zeitleiste exportiert. Whlen Sie diese Mglichkeit ab und platzieren Sie die Symbole zwecks Downloads gezielt vor dem Frame, wo sie benutzt werden und HINTER dem Preloader. 173

Prfen Sie, ob diese Technik auch fr Klassen geeignet ist (sie werden normalerweise auch im ersten Frame exportiert, diese ist die Voreinstellung).

100% Stand zeigen


Erzeugen Sie eine kurze Pause nachdem der Ladevorgang abgeschlossen ist, damit der Status 100% geladen auf jedem Fall gezeigt wird und nicht Blitzartig verschwindet (was vom Nutzer als Fehler wahrgenommen werden knnte)

Preloader ggf. berspringen


Prfen Sie, bevor der Preloader gezeigt wird, ob evtl. doch alle Daten bereits vorhanden sind und berspringen Sie dann den Preloader.

>> Beispieldatei(Noch in AS2!) > preloaderOptimieren.fla

Preloader berspringen in Bild 1 der Szene 1 der Hauptzeileiste Pause fr die Anzeige des 100%-Zustands: Bild 2 Aktion fr die Instanz des Balkens auf der Bhne:

if (prozentwert == 100) { i++; if (i > 40) { play(); // der Abspielkopf ist sonst gestoppt } }

174

Sicherheitseinschrnkungen fr Online-Anwendungen Einfhrung


Um mglicherweise schdliche Zugriffe auf Dateien von Flash-Filmen aus zu vermeiden, sind in Player durchdachte Sicherheitsrichtlinien eingebaut. Die Sicherheitseinschrnkungen hngen von zwei Faktoren ab: 1. vom Ort, an dem sich der gestartete Flash-Film befindet, der auf die Dateien zugreifen will. 2. von der Art und Weise, wie auf die externen Daten zugegriffen wird.

Ort des Filmes


Die Internet Domain und alle ihre Subdomains bilden den Sicherheitsbereich (sog. Sandbox) eines Flash-Films, der online im Browser luft. TIPP: Dabei ist zu beachten: IP-Adressen und URLs werden vom Player als zwei verschiedene Bereiche gedeutet auch wenn sie denselben Server meinen. Eine Domain example.com ist nicht identisch mit www.example.com Eine Subdomain sub.example.com gilt nicht als im selben Bereich wie die Domain

example.com

Aufgerufene Daten
Der Flash-Player unterscheidet zwischen Zugriff auf Medien, die nur gezeigt werden sollen, und dem Lesen des Inhalts einer Datei: 1. Medien (Video, Audio, Bitmaps oder andere SWFs) knnen in einen Flashfilm geladen und gezeigt werden. 2. Auf den internen Inhalt von Dateien kann mit verschiedenen Klassen und Methoden zugegriffen werden.

Erlaubte und unerlaubte Zugriffe


1. ERLAUBT: Fr eine Online-Anwendung ist der Zugriff auf Medien, um sie nur zu zeigen, sowohl innerhalb ihrer Sandbox als auch auf anderen Internet-Domains erlaubt. 2. ERLAUBT: Fr eine Online-Anwendung ist der Zugriff auf Dateien-Inhalte innerhalb ihrer Sandbox erlaubt. 3. VERBOTEN: Entsprechend ist fr eine Online-Anwendung der Zugriff auf Dateien-Inhalte auf anderen Internet-Domains NICHT erlaubt. Will man es trotzdem zulassen, bedarf es einer expliziten Zustimmung des Domainbetreibers. 4. VERBOTEN: Fr eine Online-Anwendung ist der Zugriff auf lokale Dateien immer verboten (einzige Ausnahme: die sog. Flash-Cookies, .sol-Dateien, reine Textdateien, die mit SharedObject gespeichert und gelesen werden)

175

Unerlaubte Zugriffe zulassen: Policy file Zustimmung eines Domainbetreibers


Um den Zugriff auf die Daten-Inhalte in einer Domain zu erlauben, muss der Betreiber eine XMLDatei anlegen, mit Angabe der URLs deren Anwendungen es doch erlaubt wird, Daten-Inhalte zu lesen (sog. policy file).

Die Syntax des policy file lautet:

<?xml version=1.0?> <!DPCTYPE cross-domain-policy SYSTEM http://www.adobe.com/xml/dtds/cross-domain-policy.dtd> <cross-domain-policy> <allow-acces-from domain=www.allowed-site.com/> <allow-acces-from domain= allowed-site.com/> </cross-domain-policy>

Das policy file wird in dasselbe Verzeichnis oder in ein oberes Verzeichnis gespeichert, wo sich die Daten befinden. TIPP: Befindet sich die policy-Datei in einem anderen Verzeichnis, kann sie mit der statischen Methode loadPolicyFile() der Klasse Security geladen werden.

176

Filme im Dialog mit dem Browser Kommunikation Film / Host


Flash-Filme knnen in verschiedenen Umgebungen abgespielt werden: - im Browser (online) - im Standalone-Player bzw. als Exe-Datei (offline) - im AIR (online und offline) - im Director-Player (offline) In jeder Umgebung ist der Flash-Film in der Lage, mit der Host-Anwendung zu kommunizieren. Wir beschftigen uns jetzt mit der Online-Variante: das Abspielen von Filmen im Browser.

Kommunikation Flash-Film / Browser


Die Kommunikation zwischen Flash-Film und Browser ist wichtig. Schon in AS1 gab es dafr die globalen Funktionen fscommand() und getURL(), die aber mittlerweile fr diesen Zweck veraltet sind. Mit der seit AS3 implementierten Klasse ExternalInterface knnen sowohl JavaScript-Funktionen im Browser ausgefhrt werden als auch umgekehrt, Funktionen im Flash definiert werden, die vom Browser aus aufgerufen werden knnen.

Die Klasse ExternalInterface


Mit der Klasse ExternalInterface ist der Aufruf von JavaScript-Funktionen von einer FlashAnwendung aus einfacher geworden. Man muss dafr lediglich die statische Methode call() aufrufen. >> Beispiel > EI1.fla Skript ist in Frame 2. Dort wird mit der Methode call() gearbeitet, um die JS-Funktion Gruss aufzurufen, In der HTML-Datei (EI1.html) ist die JS-Funktion Gruss implementiert. ACHTUNG! Bei offline-Aufruf muss zunchst in den Sicherheitseinstellungen eingestellt werden, dass der Datei getraut wird. Online zu finden unter: www.merino.de/test/EI1.html Auerdem ist es mit der Klasse ExternalInterface mglich, Funktionen in Flash zu definieren, die von JavaScript aus aufgerufen werden knnen. Dafr verwendet man die Methode addCallback().

TIPP: Mit Hilfe der Eigenschaft ExternalInterface.available kann man feststellen, ob ein Film im Browser luft (=true) oder in Standalone-Player (=false)

Offline verffentlichen

177

EXE-Dateien erstellen und gestalten EXE-Datei erstellen: sog. Projektor


In den Einstellungen fr Verffentlichungen ist es mglich, eine EXE-Datei (sog. Projektor) zu erstellen, die berall ohne Browser-Plugin und ohne Player lauffhig ist: die Laufzeitumgebung wird in die Datei mitkompiliert.

blicherweise wird eine EXE-Datei erstellt, wenn die Anwendung offline lauffhig sein soll.

Erscheinungsbild des Projektors mit der Klasse Stage bestimmen


Das Erscheinungsbild des Projektors kann ab AS3 mit folgenden Eigenschaften der Bhne bestimmt werden: o stage.displayState. Die Werte dieser Eigenschaft knnen sein:

- StageDisplayState.FULL_SCREEN - StageDisplayState.NORMAL o stage.scaleModeStage. Die Werte dieser Eigenschaft knnen u. a. sein: - ScaleMode.NO_SCALE - ScaleMode.EXACT_FIT

Will man das vollstndige Flash-Men unterdrcken, kann man es auch ber eine Eigenschaft der Bhne realisieren (so erscheinen nur 2 Menpunkte):

o stage.showDefaultContextMenu=false;
TIPP zur Erinnerung: Eine Flash-Anwendung verfgt ber eine einzige Instanz der Klasse Stage. Diese wird vom Player automatisch erzeugt und ist in der Eigenschaft stage der Zeitleiste und der restlichen Container und grafischen Objekte der Anwendung gespeichert.

178

Projektor Schlieen Voreingestelltes Verhalten der ESC-Taste


Durch Drucken der ESC-Taste wird ein Projektor immer im Fenster gezeigt und kann durch Schlieen des Fensters verlassen werden.

Dieses voreingestellte Verhalten ist nicht immer wnschenswert. Es kann mit der Funktion fscommand() des Package flash.system unterdrckt werden und zwar mit der genauen Syntax:

fscommand("trapallkeys", "true");

Projektor individuell mit der Klasse System schlieen


Der Projektor kann individuell mit der Methode exit() der Klasse System geschlossen werden und zwar mit der genauen Syntax:

System.exit(0);
TIPP: Die Klasse System befindet sich im Paket flash.system

179

Projektor: Abschlussbeispiel
>> Beispiel > projektorBSP.fla, projektorBSP.exe und projektorBSP-ESC.exe

Im ersten Bild der Hauptzeitleiste wird mit displayState und scaleModeStage gearbeitet.

Darber hinaus sorgt stage.showDefaultContextMenu=false; dafr, dass das Flash-Men nur mit zwei Optionen gezeigt wird.

Mit trapallkeys wird die ESC-Taste auer Kraft gesetzt

Die kleine runde Schaltflche ruft System.exit(0) auf. Damit kann der Nutzer den Projektor abschlieen.

projektorBSP-ESC illustriert das voreingestellte Verhalten der ESC-Taste, das nicht immer wnschenswert ist.

TIPP: Bei Bedarf sollten Sie die Bhne maskieren, damit Bereiche ausserhalb der Bhne nicht zu sehen sind.
>> Beispiel > projektorBsp-ohne-Maske.exe, Das Beispiel zeigt, was passiert wenn man die Bhne nicht maskiert.

180

Sicherheitseinschrnkungen fr Offline Anwendungen


Fr lokale Anwendungen kann zwischen zwei Einstellungen fr Verffentlichungen (Ordner Flash) gewhlt werden: 1. Nur auf lokale Dateien zugreifen (Voreinstellung) 2. Nur auf Netzwerk zugreifen

Nur auf lokale Dateien zugreifen


Im ersten Fall knnen Flashfilme, die lokal laufen, nur auf Dateien auf der Festplatte bzw. im lokalen Netz zugreifen. Der Zugriff im Internet ist nicht erlaubt bzw. bedarf der Zustimmung des Nutzers. Es wird eine Warnung ausgegeben, so dass der Nutzer angeben kann, ob er dem Zugriff zustimmt.

>> Beispiel > EI1.html starten. Wenn die swf-Datei auf die html-Datei zugreifen will, kommt der Sicherheitshinweis, darauf hin kann man die Sicherheitseinstellungen in folgendem Fenster anpassen:

Unter http://www.macromedia.com/support/documentation/de/flashplayer/help/settings_manager04 a.html kann man die Sicherheitseinstellungen fr den eigenen Player allgemein bestimmen.

Nur auf Netzwerk zugreifen


Wenn [Nur Netzwerkzugriff] ausgewhlt ist, kann die verffentlichte SWF-Datei nur mit Dateien und Ressourcen auf dem Netzwerk interagieren, aber nicht mit dem lokalen System. TIPP: Ich habe es getestet und es hat bei mir nicht wie erwartet funktioniert.

181

Adobe Integrated Runtime: AIR (offline und online)

182

Adobe Integrated Runtime (AIR) Das Problem


Offline- bzw. lokale Anwendungen sollen oft auf lokale Daten zugreifen bzw. Daten lokal speichern knnen (z.B. ein bestimmtes Verzeichnis auslesen, um die dort enthaltene MP3-Files abzuspielen, oder Notizen oder Lesezeichen abspeichern, die der Nutzer in der Anwendung geschrieben hat).

Das kann Flash allein nicht leisten. Der Grund ist: Flash wurde zunchst einmal fr Online-Anwendungen konzipiert, die gerade nicht auf die lokale Festplatte zugreifen sollen.

Die Lsung
Es gibt sog. Wrapper-Programme, die Flash-Anwendungen einhllen und weitere Funktionalitt mit den Dateien auf der lokalen Festplatte erlauben: o

Das Produkt Zinc der Firma MDM bietet u.a. weiter Mglichkeiten fr die Erstellung von Projektoren, z.B. damit ein Projektor auf der Festplatte schreiben kann (www.multidmedia.com/software/zinc/, Stand 2010)

Auch die Firma 3rd Eye Solutions bietet mit Jugglor eine hnliche Utility (www.flashjester.com, Stand 2010)

Ein freies Produkt finden Sie unter: www.screenweaver.org (Stand 2010)

2008 hat Adobe eine eigene Wrapper-Utilty verffentlicht: AIR, Adobe Integrated Runtime.

Adobe AIR
Das Ziel ist, mit AIR sowohl Desktop-Anwendungen auch als Rich Internet Applications erstellen zu knnen.

Mittlerweile kann AIR nicht nur Flash/AS3 (und natrlich auch Flex/MXML/AS3-Anwendungen) einhllen sondern auch Anwendungen, die mit JavaScript/XML/HTML (Ajax) entwickelt wurden.

Die AIR-Runtime wird einmal auf dem Zielrechner installiert und schon laufen alle AIRAnwendungen auf dem Desktop.

VORTEIL: Anwendungen die in AIR lauffhig sind, laufen auf allen Zielplattformen gleichermaen. Die leidigen Probleme mit den verschiedenen Browser-Versionen fallen weg.

183

Vorbereitung der Arbeit mit AIR unter Flash CS3 berblick


Fr die Arbeit mit AIR und Flash ab CS3 sind verschiedene Vorbereitungsschritte notwendig: 1. Update des Browser-PlugIn auf Version 9.0.159.0 und des Stand-Alone Player auf Version 9.0.159.0 2. Installation und Update der Adobe AIR Runtime 3. Installation der Version AIR 1.1 fr Falsch CS3 (Flash-Update)

1. Update des Browser-PlugIn und des Stand-Alone-Player


Stand-Alone-Player Die Datei FlashPlayer.exe muss im Installationsverzeichnis durch die neue Datei ersetzt werden. Die neue Datei befindet sich in ZIP-Datei

flash_player_update8_flash9.zip
Browser-PlugIn o Zuerst muss das alte Plug-In deinstalliert werden und zwar durch Ausfhrung der Datei uninstall_flash_payer.exe. Achtung! Alle Anwendungen insbesondere Browser mssen vorher geschlossen worden sein. o Dann kann das neue PlugIn installiert werden durch Ausfrhung der Datei Install Flash Player 9 Plug In.msi (fr Mozilla). Die neue Datei befindet sich in ZIP-Datei flash_player_update8_flash9.zip

2. Installation und Update der Adobe AIR Runtime


Folgende Dateien mssen nach Aktualisierung von Plug-In und Player installiert werden: Adobe AIR Runtime: AdobeAIRInstaller.exe Update 1: flash9_de_de_9_0_2update.exe (vom Dez. 07) Update 2: flash9_de_de_9_0_3update.exe (vom Feb. 08)

3. Installation der Version AIR1.1 fr CS3 (Flash-Update)


Anschlieend muss AIR 1.1 installiert werden (vom Juni 08). Dafr werden die Dateien im Unterordner AIK des Installationsverzeichnises von Flash durch aktuelle Dateien ersetzt, die sich in der ZIP-Datei AIRSDKIntegrationKit.zip befinden.

TIPP: Die bentigten Dateien finden Sie im Beispiel-Verzeichnis AIR-CS3_Runtime

Schritte zur ersten AIR-Anwendung mit Flash CS3


1. Flash starten und Flash-Datei > Adobe Air whlen

2. Auf der Bhne einen Text schreiben z.B. Hello World 184

3.

Eine Kontrollanweisung mit AS im ersten Frame schreiben z.B.

trace("Running AIR-Application");
4. Datei sichern z.B. unter dem Namen HelloAir.fla

5. Datei mit [Strg+Return] laufen lassen. So wird die swf-Datei erstellt 6. Im Men Befehle>Einstellungen fr Anwendung Installationsprogramm whlen. Voreinstellungen belassen.

7. Unter Digitale Signatur: AIR Datei mit ausgewhltem Zertifikat unterzeichnen die Schaltflche ndern whlen. 8. Im neuen Fenster Schaltflche Erstellen whlen und die geforderte Daten eingeben. 9. Schaltflche AIR Datei Verffentlichen unten im Fenster whlen. Es wird eine Datei mit der Endung .air erstellt, die publiziert und vom Nutzer auf seinem lokalen Rechner installiert werden kann.

>> AIR-CS3_Beispiel1 > helloAir.air

>> AIR-CS3_Beispiel2 > Texteditorflash.air: (Quelle: http://www.adobe.com/devnet/air/flash/quickstart/building_text_editor.html, gefunden 2009)

Wenn die AIR-Dateien ausgefhrt werden, wird die Anwendung auf der Festplatte des Nutzers samt AIR-Runtime installiert.

185

Vorbereitung der Arbeit mit AIR unter Flash CS4 berblick


Die Arbeit mit AIR in Kombination mit Flash CS4 bentigt weniger Vorbereitungsschritte als es es fr Flash CS3 der Fall war: 1. Adobe AIR Runtime downloaden und installieren (Version Mai 2010: 1.5, Version 2.0 wird fr 2010 erwartet) 2. Ggf. Flash CS4 Professional updaten

Installation des Adobe AIR Runtime (AIR-Player)


Die AIR Runtime ist ein Player der genauso einfach wie der Flash-Player (Browser Plug-In) von der Adobe-Homepage herunter geladen und installiert werden kann. TIPP: Natrlich ist der AIR-Player selbst aber etwas anderes als der Flash-Player, z.B. er luft unabhngig von Browser und erlaubt den Zugriff auf das lokale Netz bzw. Festplatte.

Flash CS4 Professional updaten


Dies geht sehr einfach und automatisch im Men unter [Hilfe>Aktualisierungen] Danach muss Flash geschlossen werden. ACTUNG! Hier sollten Sie unbedingt die Programme auswhlen, die aktualisiert werden sollen, sonst werden ALLE Adobe-Anwendungen aktualisiert.

Weitere Infos zu AIR


Auf der Adobe-Homepage: http://help.adobe.com/en_US/air/build/WS789ea67d3e73a8b21ec24feb12478b70aff-8000.html

Oder als Buch: David Tucker: Adobe AIR 1.5 Cookbook (O'Reilly)

HTW Dresden / Prof. Dr. Teresa Merino / Medieninformatik / Entwicklungswerkzeuge fr Multimedia-Anwendungen / Flash und ActionScript

Ausblick: AS fr Fortgeschrittene
Spezielle Flash-Klassen
Es gibt eine Reihe von Flash-Klassen fr spezielle Zwecke, die in der Vorlesung nicht behandelt worden sind. Interessant sind die Klassen im Paket flash.accessibility fr barrierefreie FlashAnwendungen, die Klassen im Paket flash.printing fr die Druckersteuerung und die Klassen Camera und Microphone fr die Steuerung dieser Gerte (beide befinden sich im Package flash.media).

186

Die fl-Klassen (Komponenten)


In ActionScript werden drei Typen von Klassen bzw. Klassenpaketen unterschieden: o Oberste Klassen o Die Klassen der Flash-Player-API (flash-Packages) o Fertige Komponenten (fl-Packages)

Die obersten Klassen, wie beispielsweise Date, Math und XML, implementieren allgemeine Funktionalitt, die direkt auf ECMAScript basiert.

Die Klassen der Flash Player-API befinden sich in den flash.*-Paketen. Sie gelten ausschlielich fr den Flash Player. Mit den obersten Klassen und den Flash-Klassen beschftigt sich die Vorlesung.

Die fl.*-Pakete enthalten weitere Klassen fr ActionScript-Authoring. Es handelt sich vor allem um fertige Komponenten (etwa ein Pull-Down-Men, ein fertiger Video-Player etc.) und um Klassen fr komplexe Animationen. Damit haben wir uns nicht beschftigt (nur die Praktikumsaufgabe 8 Video Informationssystem arbeitet mit der FLVPlayback-Klasse aus dem Paket fl.Video).

Allgemeine Elemente der Sprache fr Fortgeschrittene


Interfaces Ein Interface in AS ist ein syntaktisches Konstrukt, um einen Datentyp zu definieren, hnlich wie eine Klasse einen Datentyp definiert. Das Interface implementiert jedoch nicht den Datentyp, sondern definiert ihn nur. Syntaktisch gesehen ist ein Interface so etwas wie eine Liste von Methoden. Die eigentliche Funktionalitt des Interface wird dann von einer (oder ggf. mehreren) Klasse(n) implementiert. Die Nutzung von Interfaces kann in der Praktikumsaufgabe 10 Zeitzonen-Wecker gebt werden. Darber hinaus knnen Sie sich ber Interfaces im Kap. 9 von Colin Moocks Essential ActionScript 3.0 aus dem Jahre 2007 informieren.

Dynamisches AS Ursprnglich erlaubte AS die dynamische nderung aller Klassen in der Laufzeit. Dynamische Programmierung bringt aber viele Nachteile mit sich und ist seit der Sprachversion AS3 stark eingeschrnkt. Es ist trotzdem mglich, dynamische Klassen mit dem Schlsselwort dynamic zu erstellen und entsprechende Techniken zu nutzen. Einen berblick ber die dynamische Programmierung mit AS bekommen Sie in Kap. 15 des Werks von Colin Moock Essential ActionScript 3.0.

Exceptions AS verfgt ber Sprachelemente fr die Steuerung oder die Auslsung von Fehlern. Fehler knnen mit den Ausdrcken try/catch/finally behandelt werden. Spezielle Fehler knnen mit dem Befehl throw ausgelst werden. Mehr dazu in Colin Moocks Essential ActionScript 3.0, Kap. 13.

187

188

Namespaces Sehr allgemein betrachtet ist ein Namensraum eine Menge von Namen, die keine mehrdeutigen Bezeichnungen enthlt. Ein Namensraum wird durch einen eindeutigen Bezeichner (Uniform Resource Identifier URI) bestimmt. Typischerweise wird dafr eine URL gewhlt. In AS ist es mglich Namensrume fr Variable und Funktionen bzw. Methoden zu definieren und zwar unabhngig von der Strukturierung des Programms in Packages. Namespaces drfen nicht mit Packages verwechselt werden (die Namespaces in C++ sind vergleichbar mit den Packages in AS). Darber hinaus ist es mglich, im Umgang mit XML-Daten Informationen ber Namensrume in AS zu nutzen. Eine Einfhrung in die AS-Namespaces finden Sie im Kap. 17 des Werks von Colin Moock Essential ActionScript 3.0.

Klassen-Bibliotheken AS-Klassen Bibliotheken knnen mit verschiedenen Techniken erstellt werden. Drei Techniken zur Erstellung und Lieferung von Klassen-Bibliotheken werden in Kap. 31 des Buchs Essential ActionScript 3.0 errtert.

ActionScript in anderen Entwicklungsumgebungen


Die Entwicklung von Flash und ActionScript in Laufe der Zeit Flash war zunchst ein Animationsprogramm mit der Mglichkeit, einfache Aktionen fr Schaltflchen in einem visuellen Editor zusammenzuklicken aber ohne eine eigene Programmiersprache. ActionScript 1 ist eine mehr oder weniger einfache Skriptsprache fr Multimedia-Anwendungen. Sie ist Prototyp orientiert. AS1-Anwendungen knnen nur in Flash kompiliert werden. ActionScript 2 ist eine vollwertige OO Programmiersprache, die speziell auf die Besonderheiten der Flash-Entwicklungsumgebung eingeht. AS2-Anwendungen knnen nur in Flash kompiliert werden. ActionScript 3 ist eine vollwertige OO Programmiersprache, die unabhngig von der FlashEntwicklungsumgebung ist.

Adobe FLEX / Flash Builder Adobe bietet mit FLEX eine Entwicklungsumgebung fr ActionScript3 mit zustzlichen Komponenten-Bibliotheken und mit dem XML-Dialekt MXML zur Beschreibung der Elemente des UI. Der Flex-Compiler erzeugt genauso wie der Flash-Compiler eine swf- bzw. eine air-Datei. Die Praktische Arbeit mit Flex geschieht mit der Flex-SDK oder mit dem Flex Builder (neuerdings umbenannt in Flash Builder). Die SDK ist frei whrend der Builder kostenpflichtig ist.

FLEX und FLASH Mit Flex ist es mglich, effizienter und schneller RIAs mit dem Schwerpunkt Dateneinbindung und komplexen Interaktionen zu erstellen. 189

Flash bleibt das Werkzeug der Wahl fr Anwendungen mit dem Schwerpunkt Design, Animationen und interaktives Multimedia. Flex besitzt keinen Grafikeditor, keine Zeitleiste, keine Animationswerkzeuge und keine Bibliotheksverwaltung wie Flash. Flex und Flash teilen die ECMA-basierte Programmiersprache ActionScript und knnen sich auch ergnzen.

Flash Catalyst Flash Catalyst ist ein Tool fr Designer, das es erlaubt, grafische Vorlagen aus Photoshop und Illustrator mit Interaktion zu versehen, dabei wird der ActionScript-Code automatisch erzeugt. Catalyst ist mit einer Zeitleiste fr Animationen ausgestattet.

FLASH fr Mobile Gerte


Adobe verfolgt nach der Konfrontation mit Apple die Strategie, den AIR-Player fr Android (Google) zu entwickeln. Damit sollen Flash-Anwendungen im Browser lauffhig sein.

Darber hinaus erlaubt Adobe-Flash die Erstellung von Inhalten fr Mobile Gerte mittels AIR.

Die frhere Lsung von Adobe-Flash bekannt als Flash Lite wird eingestellt.

190