Sie sind auf Seite 1von 838

ACTIONSCRIPT 2.

0 IN FLASH ARBEITSHANDBUCH

2007 Adobe Systems Incorporated. Alle Rechte vorbehalten. ActionScript 2.0 in Adobe Flash Arbeitshandbuch Wenn dieses Handbuch mit einer Software ausgeliefert wird, fr die ein Lizenzvertrag fr Endbenutzer besteht, wird dieses Handbuch sowie die darin beschriebene Software gem einer Lizenz bereitgestellt und darf nur in bereinstimmung mit den Bedingungen in diesem Lizenzvertrag verwendet und kopiert werden. Kein Teil dieser Dokumentation darf, auer durch das Lizenzabkommen ausdrcklich erlaubt, ohne vorherige, schriftliche Genehmigung von Adobe Systems Incorporated reproduziert, in Datenbanken gespeichert oder in irgendeiner Form - elektronisch, mechanisch, auf Tontrger oder auf irgendeine andere Weise - bertragen werden. Der Inhalt dieses Handbuchs ist urheberrechtlich geschtzt, auch wenn es nicht mit der Software ausgeliefert wird, fr die ein Lizenzvertrag fr Endbenutzer besteht. Der Inhalt dieses Handbuchs dient ausschlielich Informationszwecken, kann ohne Vorankndigung verndert werden und ist nicht als Verpflichtung von Adobe Systems Incorporated anzusehen. Adobe Systems Incorporated gibt keine Gewhr oder Garantie hinsichtlich der Richtigkeit oder Genauigkeit der Angaben in dieser Dokumentation. Denken Sie daran, dass bestehende Grafiken oder Bilder, die Sie in Projekte einfgen mchten, mglicherweise urheberrechtlich geschtzt sind. Die unerlaubte Einfgung derartiger Materialien in Ihre Projekte ist unter Umstnden eine Verletzung der Rechte des Urheberrechtsinhabers. Stellen Sie sicher, dass Sie alle erforderlichen Berechtigungen von dem Urheberrechtsinhaber erhalten. Verweise auf Firmennamen in Beispielvorlagen dienen ausschlielich zu Demonstrationszwecken und verweisen nicht auf tatschlich bestehende Organisationen. Adobe, Flash, FlashHelp, Flash Player, JRun, Macromedia und Shockwave sind entweder Marken oder eingetragene Marken von Adobe Systems Incorporated in den USA und/oder in anderen Lndern. Macintosh ist eine Marke von Apple Computer, Inc. in den USA und/oder anderen Lndern. Windows ist eine eingetragene Marke oder eine Marke der Microsoft Corporation in den USA und/oder anderen Lndern. Alle anderen Marken sind das Eigentum der jeweiligen Rechteinhaber. Teile dieses Produkts enthalten Code, der von Nellymoser (www.nellymoser.com) lizenziert wurde. Sorenson Spark-Technologie zur Videokomprimierung/-dekomprimierung lizenziert von Sorenson Media, Inc.

Flash CS3 Video wird von der Videotechnologie On2 TrueMotion betrieben 1992-2005 On2 Technologies, Inc. Alle Rechte vorbehalten. http://www.on2.com. Adobe Systems Incorporated, 345 Park Avenue, San Jose, California 95110, USA. Hinweise fr Endbenutzer der Regierung der Vereinigten Staaten. Kommerzieller Gegenstand. Die Software und die Dokumentation sind Kommerzielle Gegenstnde im Sinne von 48 C.F.R. Absatz 2.101, bestehend aus kommerzieller Computersoftware bzw. kommerzieller Computersoftwaredokumentation nach 48 C.F.R. Absatz 12.212 bzw. 48 C.F.R. Absatz 227.7202. In bereinstimmung mit 48 C.F.R. Absatz 12.212 oder 48 C.F.R. Abschnitt 227.7202-1 bis 227.7202-4, werden die kommerzielle Computersoftware bzw. die kommerzielle Computersoftwaredokumentation an die Endbenutzer der Regierung der Vereinigten Staaten (a) nur als kommerzielle Gegenstnde und (b) nur mit den Rechten lizenziert, die gem den Vertragsbedingungen allen anderen Endbenutzern gewhrt werden. Nicht verffentlichte Rechte werden gem dem Urheberrecht der Vereinigten Staaten vorbehalten. Adobe Systems Incorporated, 345 Park Avenue, San Jose, CA 95110-2704, USA. Hinsichtlich Endbenutzern der Regierung der Vereinigten Staaten erklrt sich Adobe bereit, alle geltenden Gleichbehandlungsrechte einzuhalten, einschlielich, soweit anwendbar, die Vorschriften zur Durchfhrungsverordnung 11246 in ihrer jeweiligen geltenden Fassung, Abschnitt 402 des Vietnam Era Veterans Readjustment Assistance Acts von 1974 (38 USC 4212) und Abschnitt 503 des Rehabilitation Acts von 1973 in seiner jeweiligen geltenden Fassung, und den Regelungen in 41 CFR Teile 60-1 bis 60-60, 60-250 und 60-741. Die im vorstehenden Satz enthaltenen positiven Handlungsgebote und Vorschriften werden durch die entsprechende Bezugnahme in diese Vereinbarung einbezogen.

Inhaltsverzeichnis

Einfhrung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Zielpublikum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Systemanforderungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Flash XML-Dateien aktualisieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Informationen zur Dokumentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11 Weitere Ressourcen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Kapitel 1: Neue Funktionen in Flash ActionScript . . . . . . . . . . . . . 19 Neu in ActionScript 2.0 und Flash Player 9.x . . . . . . . . . . . . . . . . . . . . . 19 Neu in ActionScript 2.0 und Flash Player 8 . . . . . . . . . . . . . . . . . . . . . . 20 nderungen am Sicherheitsmodell fr lokal installierte SWF-Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Kapitel 2: Einfhrung in ActionScript . . . . . . . . . . . . . . . . . . . . . . . 31 ActionScript Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Entscheidung fr ActionScript 1.0 oder ActionScript 2.0. . . . . . . . . . 33 Einfhrung in ActionScript und Flash Player . . . . . . . . . . . . . . . . . . . . . 34 Kapitel 3: Daten und Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . 35 Daten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Daten in Objekten organisieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78 Umwandlung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Kapitel 4: Syntax- und Sprachgrundlagen . . . . . . . . . . . . . . . . . .83 Syntax, Anweisungen und Ausdrcke . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Punktsyntax und Zielpfade. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Interpunktionszeichen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97 Konstanten und Schlsselwrter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109 Anweisungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 Operatoren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

Kapitel 5: Funktionen und Methoden . . . . . . . . . . . . . . . . . . . . . . 177 Funktionen und Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Methoden im berblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 Kapitel 6: Klassen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 Objektorientierte Programmierung und Flash. . . . . . . . . . . . . . . . . . . 206 Benutzerdefinierte Klassendateien schreiben . . . . . . . . . . . . . . . . . . . 216 Benutzerdefinierte Klassen in einer Anwendung einsetzen. . . . . . . 220 Beispiel: Benutzerdefinierte Klassen schreiben . . . . . . . . . . . . . . . . . .247 Beispiel: Benutzerdefinierte Klassendateien in Flash verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .263 Symbolen in Flash eine Klasse zuweisen. . . . . . . . . . . . . . . . . . . . . . . . 267 Klassen kompilieren und exportieren . . . . . . . . . . . . . . . . . . . . . . . . . . .268 Klassen und Gltigkeitsbereiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 bergeordnete und integrierte Klassen . . . . . . . . . . . . . . . . . . . . . . . . .275 Integrierte Klassen verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .285 Kapitel 7: Vererbung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 Vererbung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .293 Unterklassen in Flash schreiben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .296 Polymorphismus in einer Anwendung einsetzen . . . . . . . . . . . . . . . . 303 Kapitel 8: Schnittstellen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 Schnittstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 Schnittstellen als Datentypen erstellen . . . . . . . . . . . . . . . . . . . . . . . . . 315 Vererbung und Schnittstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 Beispiel: Schnittstellen verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 Beispiel: Komplexe Schnittstelle erstellen. . . . . . . . . . . . . . . . . . . . . . . 321 Kapitel 9: Ereignisse verarbeiten . . . . . . . . . . . . . . . . . . . . . . . . .327 ActionScript und Ereignisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .328 Ereignisprozedurmethoden verwenden . . . . . . . . . . . . . . . . . . . . . . . . 330 Ereignis-Listener verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .332 Ereignis-Listener mit Komponenten verwenden . . . . . . . . . . . . . . . . .335 Schaltflchen- und Movieclip-Ereignisprozeduren verwenden . . . . 337 Ereignisse von Komponenteninstanzen bertragen . . . . . . . . . . . . . .342 Movieclips mit Schaltflchenstatus erstellen . . . . . . . . . . . . . . . . . . . .343 Gltigkeitsbereich von Ereignisprozeduren. . . . . . . . . . . . . . . . . . . . . 344 Gltigkeitsbereich des Schlsselworts this . . . . . . . . . . . . . . . . . . . .348 Delegate-Klasse verwenden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .348

Inhaltsverzeichnis

Kapitel 10: Mit Movieclips arbeiten . . . . . . . . . . . . . . . . . . . . . . . . 351 Einfhrung in die Steuerung von Movieclips mit ActionScript . . . . . 352 Mehrere Methoden fr einen Movieclip aufrufen . . . . . . . . . . . . . . . . 354 SWF-Dateien laden und entladen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 Position und Darstellung von Movieclips ndern . . . . . . . . . . . . . . . . 358 Movieclips mit der Maus verschieben . . . . . . . . . . . . . . . . . . . . . . . . . . 359 Movieclips zur Laufzeit erstellen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 Dynamisch erstellten Movieclips Parameter hinzufgen. . . . . . . . . . 365 Moviecliptiefen verwalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 Movieclips mit ActionScript zwischenspeichern und durchblttern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371 Movieclips als Masken verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 Movieclip-Ereignisse verarbeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .381 Movieclip-Symbolen eine Klasse zuweisen . . . . . . . . . . . . . . . . . . . . . .381 Klasseneigenschaften initialisieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 Kapitel 11: Mit Text und Strings arbeiten . . . . . . . . . . . . . . . . . . 385 Textfelder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 Text und Variablen in Textfelder laden . . . . . . . . . . . . . . . . . . . . . . . . . 397 Schriftarten verwenden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 Schriftwiedergabe und Anti-Aliasing-Text . . . . . . . . . . . . . . . . . . . . . . .412 Textlayout und -formatierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .421 Text mit Cascading Style Sheets formatieren . . . . . . . . . . . . . . . . . . . 429 HTML-formatierten Text verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . 443 Beispiel: Bildlauftext erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458 Strings und die String-Klasse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460 Kapitel 12: Animationen, Filter und Zeichnungen . . . . . . . . . . . 479 Animationsskripts mit ActionScript 2.0 erstellen . . . . . . . . . . . . . . . . 480 Bitmap-Zwischenspeicherung, Scrollen und Leistung . . . . . . . . . . . 490 Tween- und TransitionManager-Klasse . . . . . . . . . . . . . . . . . . . . . . . . .491 Filtereffekte verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509 Filter mit ActionScript verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .518 Filtereffekte mit Code manipulieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544 Bitmaps mit der BitmapData-Klasse erstellen . . . . . . . . . . . . . . . . . . 549 Einfhrung in Mischmodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552 Operationsreihenfolge. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554 Mit ActionScript zeichnen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555 Mit Skalierung und Hilfslinien arbeiten . . . . . . . . . . . . . . . . . . . . . . . . . . 571

Inhaltsverzeichnis

Kapitel 13: Interaktionen mit ActionScript erstellen . . . . . . . . . .577 Ereignisse und Interaktionen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578 SWF-Wiedergabe steuern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578 Interaktivitt und visuelle Effekte erstellen. . . . . . . . . . . . . . . . . . . . . . .582 Laufzeit-Datenbindungen mit ActionScript erstellen . . . . . . . . . . . . .597 Analyse eines Beispielskripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .607 Kapitel 14: Mit Bildern, Audio und Video arbeiten . . . . . . . . . . 609 Externe Medien laden und verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . 610 Externe SWF- und Bilddateien laden . . . . . . . . . . . . . . . . . . . . . . . . . . . .611 Externe MP3-Dateien laden und verwenden . . . . . . . . . . . . . . . . . . . . 617 Elementen in der Bibliothek Verknpfungen zuweisen . . . . . . . . . . .622 FLV-Video verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .623 Fortschrittsanimationen fr Mediendateien erstellen . . . . . . . . . . . . .645 Kapitel 15: Mit externen Daten arbeiten. . . . . . . . . . . . . . . . . . . 655 Variablen senden und laden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .656 ber HTTP mit serverseitigen Skripts kommunizieren. . . . . . . . . . . . 661 Dateien hochladen und herunterladen . . . . . . . . . . . . . . . . . . . . . . . . . . 667 Einfhrung in XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676 Meldungen an den und vom Flash Player bertragen . . . . . . . . . . . . .686 Informationen zur External-API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691 Kapitel 16: Sicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701 Kompatibilitt mit frheren Flash Player-Sicherheitsmodellen. . . . .702 Lokale Dateisicherheit und Flash Player . . . . . . . . . . . . . . . . . . . . . . . .703 Netzwerk-APIs beschrnken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722 Domnen, domnenbergreifende Sicherheit und SWF-Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .724 Serverseitige Richtliniendateien fr das Zulassen von Datenzugriff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733 HTTP-zu-HTTPS-Protokollzugriff zwischen SWF-Dateien. . . . . . .739 Kapitel 17: Bewhrte Verfahren und Kodierungskonventionen fr ActionScript 2.0 . . . . . . . . . . . . . 743 Namenskonventionen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .745 Code kommentieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756 Kodierungskonventionen in ActionScript . . . . . . . . . . . . . . . . . . . . . . .759 ActionScript und Flash Player optimieren . . . . . . . . . . . . . . . . . . . . . . . 776 ActionScript-Syntax formatieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778

Inhaltsverzeichnis

Anhang A: Fehlermeldungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . .787 Anhang B: Veraltete Flash 4-Operatoren . . . . . . . . . . . . . . . . . 793 Anhang C: Tastaturtasten und Tastencodewerte . . . . . . . . . . . 795 Anhang D: Skripts fr frhere Versionen von Flash Player . . . 803 Was Sie bei der Erstellung von Skripts fr frhere Flash Player-Versionen beachten mssen . . . . . . . . . . . . . . . 803 Flash Player 4-Inhalte mit Flash erstellen . . . . . . . . . . . . . . . . . . . . . . . 804 Anhang E: Objektorientiertes Programmieren mit ActionScript 1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 807 Info zu ActionScript 1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 808 Benutzerdefinierte Objekte in ActionScript 1.0 erstellen. . . . . . . . . . .810 In ActionScript 1.0 benutzerdefinierten Objekten Methoden zuweisen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 811 Ereignisprozedurmethoden in ActionScript 1.0 definieren . . . . . . . . .812 Vererbung in ActionScript 1.0 erstellen . . . . . . . . . . . . . . . . . . . . . . . . . .815 Objekten get-/set-Eigenschaften in ActionScript 1.0 hinzufgen. . .816 Function-Objekteigenschaften in ActionScript 1.0 verwenden . . . . . 817 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 821

Inhaltsverzeichnis

Inhaltsverzeichnis

Einfhrung
Adobe Flash CS3 Professional ist das professionelle Standard-Authoring-Tool fr die Erstellung eindrucksvoller Websites. ActionScript ist die Sprache, mit der Sie Ihre FlashAnwendungen interaktiv gestalten knnen, gleichgltig, ob es sich um einfache animierte SWF-Dateien oder komplexere Internet-Anwendungen handelt. Sie mssen nicht mit ActionScript arbeiten, um Flash zu verwenden. Wenn Sie jedoch Benutzerinteraktivitt bereitstellen, mit anderen als den in Flash integrierten Objekten (wie z. B. Schaltflchen und Movieclips) arbeiten oder die Stabilitt von SWF-Dateien erhhen mchten, kann es sinnvoll sein, ActionScript zu verwenden. Weitere Informationen finden Sie unter den folgenden Themen:
Zielpublikum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Flash XML-Dateien aktualisieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Systemanforderungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Informationen zur Dokumentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Weitere Ressourcen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

Zielpublikum
In diesem Handbuch wird vorausgesetzt, dass Sie Flash bereits installiert haben und mit der Benutzeroberflche vertraut sind. Sie sollten wissen, wie Sie Objekte auf der Bhne platzieren und in der Flash-Authoring-Umgebung bearbeiten. Wenn Sie bereits eine Skriptsprache verwendet haben, wird Ihnen ActionScript gleich bekannt vorkommen. Wenn Sie noch keine Programmiererfahrung haben, werden Sie feststellen, dass die Grundlagen von ActionScript leicht zu erlernen sind. Sie knnen mit einfachen Befehlen anfangen und spter kompliziertere Befehle hinzufgen. Sie knnen Ihre Dateien uerst interaktiv gestalten, ohne viel Code zu erlernen oder zu schreiben.

Systemanforderungen
Fr das Arbeiten mit ActionScript 2.0 mssen auer den Anforderungen fr Flash keine weiteren Anforderungen erfllt werden. Mit Flash CS3 Professional wird ActionScript 3.0 eingefhrt. Flash Player 9 und ActionScript 3.0 sind die standardmigen Verffentlichungseinstellungen fr Flash. In diesem Handbuch finden Sie Informationen zur Verwendung von ActionScript 2.0 mit Flash. Sie mssen die Verffentlichungseinstellungen fr Ihre Flash-Dateien auf Flash Player 9 und ActionScript 2.0 ndern. Wenn Sie die Standardeinstellungen nicht ndern, funktionieren die Erklrungen und Codebeispiele in der Dokumentation eventuell nicht mehr richtig. Informationen zur Entwicklung von Anwendungen fr frhere Versionen von Flash Player finden Sie in Anhang D, Skripts fr frhere Versionen von Flash Player auf Seite 803.

Flash XML-Dateien aktualisieren


Es ist sehr wichtig, dass Sie immer die neuesten Flash XML-Dateien installiert haben. Adobe fhrt manchmal neue Funktionen in Zwischenversionen von Flash Player ein. Wenn eine solche neue Version von Flash verffentlicht wird, sollten Sie Ihre Version aktualisieren, damit Ihnen die neuesten XML-Dateien zur Verfgung stehen. Andernfalls gibt der Flash-Compiler eventuell Fehlermeldungen aus, wenn Sie neue Eigenschaften oder Methoden verwenden, die in der von Ihnen erworbenen Version von Flash Player noch nicht vorhanden waren. Flash Player 7 (7.0.19.0) enthielt beispielsweise eine neue Methode fr das System-Objekt, System.security.loadPolicyFile. Um auf diese Methode zuzugreifen, mssen Sie das Installationsprogramm Player Updater verwenden, um alle mit Flash installierten Flash Player zu aktualisieren. Andernfalls blendet der Flash-Compiler Fehlermeldungen ein. Denken Sie daran, dass Sie einen Player Updater installieren knnen, der Ihrer Flash-Version um einige Versionen voraus ist. Dadurch erhalten Sie die bentigten XML-Dateien, und es sollten keine Compiler-Fehler auftreten, wenn Sie Material in lteren Versionen von Flash Player verffentlichen. Neue Methoden oder Eigenschaften stehen manchmal auch lteren Versionen zur Verfgung. Wenn Sie auf ltere Methoden oder Eigenschaften zugreifen, kommt es zu weniger Compiler-Fehlern, wenn Sie die neuesten XML-Dateien installiert haben.

10

Einfhrung

Informationen zur Dokumentation


Dieses Handbuch enthlt einen berblick ber die ActionScript-Syntax sowie Informationen zum Einsatz von ActionScript mit unterschiedlichen Objekttypen. Einzelheiten zur Syntax und zur Verwendung der einzelnen Sprachelemente finden Sie im ActionScript 2.0-Referenzhandbuch. Weitere Informationen finden Sie unter den folgenden Themen:

berblick ber das Arbeitshandbuch fr ActionScript 2.0 auf Seite 11 Beispieldateien auf Seite 15 Begriffserluterungen auf Seite 14 Code kopieren und einfgen auf Seite 14

berblick ber das Arbeitshandbuch fr ActionScript 2.0


In der folgenden Liste wird der Inhalt dieses Handbuchs zusammengefasst:

In Kapitel 1, Neue Funktionen in Flash ActionScript werden die neuen Funktionen in ActionScript, die nderungen am Compiler und Debugger und das neue Programmierungsmodell fr die ActionScript 2.0-Sprache beschrieben. Kapitel 2, Einfhrung in ActionScript enthlt eine Definition der ActionScript-Sprache sowie Entscheidungshilfen fr die Wahl der zu verwendenden ActionScript-Version. In Kapitel 3, Daten und Datentypen werden Terminologie und grundlegende Konzepte in Bezug auf Daten, Datentypen und Variablen beschrieben. Sie verwenden diese Konzepte im gesamten Verlauf des Handbuchs. In Kapitel 4, Syntax- und Sprachgrundlagen werden Terminologie und Grundkonzepte der ActionScript-Sprache vorgestellt. Sie verwenden diese Konzepte im gesamten Verlauf des Handbuchs. In Kapitel 5, Funktionen und Methoden erfahren Sie, wie Sie verschiedene Funktionen und Methoden schreiben und in Ihren Anwendungen einsetzen. In Kapitel 6, Klassen wird die Erstellung von benutzerdefinierten Klassen und Objekten in ActionScript erlutert. In diesem Kapitel werden auch die in ActionScript integrierten Klassen aufgefhrt, und Sie finden einen kurzen berblick darber, wie Sie diese Klassen einsetzen knnen, um auf die leistungsstarken Funktionen in ActionScript zuzugreifen. Kapitel 7, Vererbung enthlt eine Beschreibung der Vererbung in der ActionScriptSprache sowie Anleitungen zum Erweitern der integrierten oder benutzerdefinierten Klassen.

Informationen zur Dokumentation

11

In Kapitel 8, Schnittstellen wird die Erstellung und Verwendung von Schnittstellen in ActionScript erlutert. In Kapitel 9, Ereignisse verarbeiten werden verschiedene Verfahren zur Ereignisverarbeitung vorgestellt: Ereignisprozedurmethoden, Ereignis-Listener sowie Schaltflchen- und Movieclip-Ereignisprozeduren. In Kapitel 10, Mit Movieclips arbeiten werden Movieclips und ihre Steuerung mit ActionScript beschrieben. Kapitel 11, Mit Text und Strings arbeiten erlutert die unterschiedlichen Verfahren zum Steuern von Text und Strings in Flash. Auerdem finden Sie hier Informationen zur Textformatierung und erweiterten Anti-Aliasing-Funktionen. In Kapitel 12, Animationen, Filter und Zeichnungen erfahren Sie, wie Sie codebasierte Animationen und Bilder erstellen, Objekten Filter hinzufgen und ActionScript zum Zeichnen verwenden. In Kapitel 13, Interaktionen mit ActionScript erstellen werden einige einfache Verfahren fr die Erstellung von Anwendungen beschrieben, die einen greren interaktiven Spielraum bieten. Hierzu gehren auch die Steuerung des Abspielens von SWF-Dateien sowie die Erstellung von benutzerdefinierten Mauszeigern und Soundsteuerungen. Kapitel 14, Mit Bildern, Audio und Video arbeiten enthlt Anleitungen zum Importieren von externen Mediendateien in Ihre Flash-Anwendungen, wie Bitmapbilder, MP3-Dateien, Flash Video-Dateien (FLV) und andere SWF-Dateien. In diesem Kapitel wird auch kurz beschrieben, wie Sie in Ihren Anwendungen Video einsetzen und Animationen mit Fortschrittsbalken erstellen. In Kapitel 15, Mit externen Daten arbeiten wird beschrieben, wie Sie Daten aus externen Quellen ber server- oder clientseitige Skripts in Ihren Anwendungen verarbeiten knnen. Das Kapitel enthlt Einzelheiten zur Integration von Daten in Ihren Anwendungen. Kapitel 16, Sicherheit erlutert Sicherheitsaspekte in Flash Player, die bei der Arbeit mit lokal gespeicherten SWF-Dateien zu bercksichtigen sind. In diesem Kapitel wird auch die domnenbergreifende Sicherheit beschrieben. Auerdem erfahren Sie, wie Sie Daten von Servern oder ber verschiedene Domnen laden. Kapitel 17, Bewhrte Verfahren und Kodierungskonventionen fr ActionScript 2.0 enthlt bewhrte Verfahren fr die Verwendung von Flash und das Schreiben von ActionScript-Code. In diesem Kapitel werden auch standardmige Kodierungskonventionen beschrieben, wie beispielsweise Konventionen fr das Benennen von Variablen.

12

Einfhrung

Anhang A, Fehlermeldungen enthlt eine Liste der Fehlermeldungen, die der Flash-Compiler erzeugen kann. Anhang B, Veraltete Flash 4-Operatoren enthlt eine Liste der veralteten Flash 4-Operatoren und ihrer Assoziativitt. Anhang C, Tastaturtasten und Tastencodewerte enthlt eine Liste aller Tasten einer Standardtastatur und der entsprechenden ASCII-Tastencodewerte, mit denen diese Tasten in ActionScript identifiziert werden knnen. Anhang D, Skripts fr frhere Versionen von Flash Player enthlt Richtlinien fr die Erstellung von syntaktisch korrekten Skripts fr bestimmte Player-Versionen. Anhang E, Objektorientiertes Programmieren mit ActionScript 1.0 enthlt Informationen zur Verwendung des ActionScript 1.0-Objektmodells fr das Erstellen von Skripts.

In diesem Handbuch erfahren Sie, wie Sie die ActionScript-Sprache einsetzen. Informationen zu den Sprachelementen selbst knnen Sie dem ActionScript 2.0-Referenzhandbuch entnehmen.

Typografische Konventionen
In diesem Handbuch werden die folgenden typografischen Konventionen verwendet:

Codeschriftart zeigt

den ActionScript-Code an.

Codeschriftart in Fettdruck

tritt normalerweise in einem Verfahren auf und kennzeichnet Code, den Sie ndern oder in der FLA-Datei hinzufgen mssen. In manchen Fllen wird diese Schriftart verwendet, um Code hervorzuheben.

Text in Fettdruck bezieht sich auf Daten, die Sie eingeben mssen, wie beispielsweise den Namen einer Datei oder einer Instanz. Kursiver Text kennzeichnet einen neuen Begriff, der im Folgenden genauer definiert wird. In einem Dateipfad kann kursiver Text einen Wert kennzeichnen, der ersetzt werden muss (beispielsweise durch den Namen eines Verzeichnisses auf Ihrer Festplatte).

Informationen zur Dokumentation

13

Begriffserluterungen
Folgende Begriffe werden in diesem Handbuch verwendet:

Sie bezieht sich auf die Person, die ein Skript schreibt oder eine Anwendung entwickelt. Der Benutzer ist die Person, die Ihre Skripts und Anwendungen ausfhrt. Die Kompilierzeit ist der Zeitpunkt, zu dem Sie Ihr Dokument verffentlichen, exportieren, testen oder debuggen. Die Laufzeit ist der Zeitpunkt, zu dem Ihr Skript in Flash Player ausgefhrt wird.

Code kopieren und einfgen


Wenn Sie ActionScript-Code aus dem Bedienfeld Hilfe in eine FLA- oder ActionScript-Datei einfgen, mssen Sie auf die Sonderzeichen achten. Zu den Sonderzeichen gehren beispielsweise typografische Anfhrungszeichen. Diese Zeichen werden vom ActionScriptEditor nicht interpretiert und verursachen deshalb beim Kompilieren in Flash Fehler im Code. Anfhrungszeichen, bei denen es sich um Sonderzeichen handelt, sind an der fehlerhaften farblichen Hervorhebung erkennbar. Das heit, wenn nicht alle Strings im Code-Editor ihre Farbe ndern, mssen Sie die Sonderzeichen durch gerade Anfhrungszeichen ersetzen. Wenn Sie einfache oder doppelte Anfhrungszeichen direkt in den ActionScript-Editor eingeben, handelt es sich immer um gerade Anfhrungszeichen. Beim Testen oder Verffentlichen einer SWF-Datei gibt der Compiler einen Fehler aus und weist Sie darauf hin, dass Ihr Code unzulssige Zeichen enthlt (wie typografische Anfhrungszeichen).
H IN W E I S 14

ActionScript-Code, den Sie aus anderen Quellen einfgen, wie beispielsweise aus einer Webseite oder einem Microsoft Word-Dokument, kann besondere Anfhrungszeichen enthalten.

Achten Sie beim Kopieren und Einfgen von Code auf die korrekten Zeilenumbrche. Beim Einfgen von Code aus externen Quellen werden die Codezeilen in manchen Fllen nicht richtig umgebrochen. berprfen Sie die Farbhervorhebung der Syntax im ActionScriptEditor, wenn Sie vermuten, dass die Zeilen nicht korrekt umgebrochen werden. Sie knnen Ihren Code im Bedienfeld Aktionen mit dem Code im Bedienfeld Hilfe vergleichen, um sicherzustellen, dass Ihr Code korrekt ist. Manche Probleme in Bezug auf berflssige Zeilenumbrche im Code lassen sich beheben, indem Sie den Zeilenumbruch im ActionScript-Editor aktivieren. Whlen Sie dazu im Skriptfenster Ansicht > Zeilenumbruch oder im Popupmen des Bedienfelds Aktionen die Option Zeilenumbruch.

Einfhrung

Weitere Ressourcen
Zustzlich zu diesem ActionScript-Handbuch stehen weitere Handbcher ber andere Flash-Themen zur Verfgung, wie beispielsweise ber Komponenten und Adobe Flash Lite. Sie knnen diese Handbcher im Inhaltsverzeichnis des Bedienfelds Hilfe aufrufen (Hilfe > Flash-Hilfe). Klicken Sie auf die Schaltflche Lschen, um alle verfgbaren Handbcher anzuzeigen. Weitere Informationen finden Sie unter Verfgbarkeit der Dokumentation zu anderen Themen auf Seite 18. Weitere Informationen zu anderen verfgbaren Ressourcen finden Sie unter den folgenden Themen:

Beispieldateien auf Seite 15 Verfgbarkeit der PDF-Dateien und der gedruckten Dokumentation auf Seite 16 LiveDocs auf Seite 16 Weitere Online-Ressourcen auf Seite 17 Verfgbarkeit der Dokumentation zu anderen Themen auf Seite 18

Beispieldateien
Mit Flash werden zahlreiche ActionScript-Beispieldateien installiert. Diese Beispieldateien sind eine ntzliche Lernhilfe, da sie Ihnen zeigen, wie der Code in einer FLA-Datei funktioniert. In den Kapiteln dieses Handbuchs wird hufig auf diese Dateien verwiesen, es wird jedoch auch empfohlen, sich den Ordner mit den Beispieldateien auf Ihrer Festplatte genauer anzusehen. Die Beispieldateien enthalten FLA-Anwendungsdateien, die allgemeine, mit Flash installierte Flash-Funktionalitt verwenden. Diese Anwendungen wurden mit dem Ziel entwickelt, neue Flash-Entwickler in die Mglichkeiten von Flash-Anwendungen einzufhren und erfahrenen Entwicklern zu zeigen, wie Flash-Funktionsmerkmale im Kontext funktionieren. Muster der ActionScript-Beispieldateien finden Sie auf der Webseite mit Flash-Beispielen unter www.adobe.com/go/learn_fl_samples_de. Laden Sie die komprimierte Beispieldatei herunter, dekomprimieren Sie sie, und wechseln Sie in den ActionScript2.0-Ordner, um auf die Beispiele zuzugreifen. Beispieldateien zu einzelnen Komponenten finden Sie im Ordner ComponentsAS2.

Weitere Ressourcen

15

Verfgbarkeit der PDF-Dateien und der gedruckten Dokumentation


Wenn Sie die Dokumentation lieber in gedruckter Form lesen mchten, knnen Sie eine PDF-Version der einzelnen Handbcher herunterladen. Rufen Sie dazu die Website www.adobe.com/go/support/documentation_de auf, und whlen Sie das gewnschte Produkt aus. Sie knnen die PDF-Datei anzeigen oder herunterladen oder ber einen Link die LiveDocs-Version des Handbuchs aufrufen. Hufig steht die gedruckte Dokumentation auch zum Kauf zur Verfgung. Aktualisierte Informationen finden Sie auf der Dokumentationsseite der Supportsite.

LiveDocs
Die Dokumentation steht nicht nur im Bedienfeld Hilfe, sondern auch auf der LiveDocs-Website zur Verfgung. Die LiveDocs-Website enthlt die gesamte Flash-Hilfe und mglicherweise auch Kommentare, die die Dokumentation verdeutlichen, aktualisieren oder korrigieren. Klicken Sie unten auf einer Seite im Bedienfeld Hilfe auf den Link zum Anzeigen von Kommentaren in LiveDocs, um die zugehrige Seite auf der LiveDocs-Website anzuzeigen. Unter http://livedocs.adobe.com finden Sie eine Liste der Dokumentation, die im LiveDocs-Format verfgbar ist. Die LiveDocs-Website wird von technischen Autoren moderiert. Einer der Vorteile von LiveDocs ist die Mglichkeit, erluternde Kommentare zur Dokumentation anzuzeigen oder fehlerhafte Daten und nach dem Erscheinen einer Softwareversion auftretende Probleme zu korrigieren. LiveDocs ist nicht fr technische Fragen vorgesehen, wie beispielsweise Fragen in Bezug auf fehlerhaften Code oder zu Problemen mit der Software oder der Installation. Stattdessen ist LiveDocs der richtige Ort, um Feedback zur Dokumentation zu geben (wenn Ihnen z. B. ein Satz oder Abschnitt auffllt, der zustzlicher Erklrung bedarf ). Wenn Sie in LiveDocs auf die Schaltflche zum Hinzufgen eines Kommentars klicken, werden mehrere Punkte zu den im System zulssigen Kommentaren angezeigt. Lesen Sie diese Richtlinien sorgfltig durch, da Ihre Kommentare sonst mglicherweise von der Website entfernt werden. Wenn Sie Fragen zu Flash haben, stellen Sie diese bitte in den Adobe-Webforen: www.adobe.com/support/forums/. Die Webforen sind der beste Ort fr Fragen, da sie von vielen Mitarbeitern von Adobe, ehrenamtlichen Mitarbeitern des Adobe-Teams, Adobe-Benutzergruppenmanagern und -mitgliedern und sogar von technischen Autoren beobachtet werden.

16

Einfhrung

Technische Mitarbeiter berwachen die Flash-Wunschliste, nicht aber das LiveDocs-System. Wenn Sie einen Fehler in der Software gefunden haben oder einen Verbesserungsvorschlag fr Flash unterbreiten mchten, fllen Sie bitte das Wunschformular unter www.adobe.com/go/wish_de aus. Wenn Sie einen Fehler oder Verbesserungsvorschlag auf der LiveDocs-Website eintragen, wird er der Fehlerdatenbank nicht offiziell hinzugefgt. Sie mssen das Wunschformular verwenden, damit der Fehler oder der Verbesserungsvorschlag an technische Mitarbeiter weitergeleitet wird. Achten Sie beim Einfgen von Inhalt aus dem Web auf Sonderzeichen und Zeilenumbrche, also auch wenn Sie Inhalt aus LiveDocs einfgen. Adobe hat sich bemht, alle Sonderzeichen aus den Codebeispielen zu entfernen. Sollten beim Einfgen von Code dennoch Probleme auftreten, lesen Sie den Abschnitt Code kopieren und einfgen auf Seite 14.

Weitere Online-Ressourcen
In mehreren Online-Ressourcen finden Sie zahlreiche Informationen und Anleitungen, die Sie beim Erlernen von Flash untersttzen. Es empfiehlt sich, die folgenden Websites hufig zu besuchen, um stets aktuelle Informationen zu erhalten:
Die Website Adobe Developer Center (www.adobe.com/go/developer_de) wird regelmig aktualisiert, um Ihnen die neuesten Informationen zu Flash bereitzustellen. Auerdem finden Sie hier Ratschlge von erfahrenen Benutzern sowie weiterfhrende Themen, Beispiele, Tipps, Tutorials (auch mehrteilige Tutorials) und Updates. Es empfiehlt sich, diese Website hufig zu besuchen und sich ber neue Entwicklungen und Mglichkeiten zum effizienten Einsatz von Flash zu informieren. Im Adobe Flash Support Center

(www.adobe.com/go/flash_support_de) finden Sie TechNotes, aktualisierte Dokumentationen und Links zu weiteren Ressourcen in der Flash Community.

(http://weblogs.macromedia.com) finden Sie eine Liste der Weblogs (der so genannten Blogs) von Mitarbeitern und Benutzern von Adobe.
Auf der Website Adobe Weblogs Die Adobe Webforen

(http://www.adobe.com/support/forums/) enthalten zahlreiche Foren, in denen Sie Fragen zu Flash, Ihren Anwendungen oder ActionScript stellen knnen. Die Foren werden von Freiwilligen des Adobe-Teams moderiert und hufig von Adobe-Mitarbeitern besucht. Wenn Sie Orientierungshilfe oder Untersttzung bei der Lsung eines Problems bentigen, ist ein Flash-Forum der ideale Ausgangspunkt.

Auf der Website der Adobe Community

(www.adobe.com/go/community_de) werden regelmig Macrochats veranstaltet. Dies sind Live-Prsentationen zu verschiedenen Themen, die von Benutzern oder Mitarbeitern von Adobe durchgefhrt werden. Es empfiehlt sich, die Website hufig zu besuchen, um stets aktuelle Informationen zu erhalten.

Weitere Ressourcen

17

Verfgbarkeit der Dokumentation zu anderen Themen


In den folgenden Handbchern finden Sie zustzliche Informationen zu hufigen Themen in Bezug auf ActionScript 2.0:

Informationen zu den Elementen, die die ActionScript-Sprache bilden, finden Sie im ActionScript 2.0-Referenzhandbuch. Weitere Informationen zum Arbeiten in der Flash-Authoring-Umgebung finden Sie unter Hilfe verwenden. Weitere Informationen zum Arbeiten mit Komponenten finden Sie in der Dokumentation ActionScript 2.0-Komponenten verwenden.

18

Einfhrung

KAPITEL 1

Neue Funktionen in Flash ActionScript


Adobe Flash CS3 Professional bietet zahlreiche Verbesserungen, mit denen Sie problemlos robuste Skripts in der ActionScript-Sprache erstellen knnen. Zu den neuen Funktionsmerkmalen, die in diesem Kapitel beschrieben werden, gehren neue Sprachelemente (siehe Neue Elemente in der ActionScript-Sprache in Flash Player 8 auf Seite 23), verbesserte Bearbeitungswerkzeuge (siehe nderungen bei der ActionScriptBearbeitung auf Seite 28), nderungen am Sicherheitsmodell und andere ActionScriptspezifische Verbesserungen des Authoring-Tools. Weitere Informationen finden Sie unter den folgenden Themen:
Neu in ActionScript 2.0 und Flash Player 9.x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Neu in ActionScript 2.0 und Flash Player 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 nderungen am Sicherheitsmodell fr lokal installierte SWF-Dateien . . . . . . . . . . 29

Neu in ActionScript 2.0 und Flash Player 9.x


Flash Player 9.x ermglicht jetzt das Aufrufen und Beenden des Vollbildmodus in Flash Player. Diese neue Funktion wird von den folgenden Objekten untersttzt:

Stage.displayState-Eigenschaft Stage.onFullScreen-Ereignisprozedur allowFullScreen-Parameter

in den HTML-Tags object und embed

Weitere Informationen finden Sie im ActionScript 2.0-Referenzhandbuch. Flash Player 9.x verfgt auerdem ber ein neues FileReference-Ereignis, onUploadCompleteData. Dieses Ereignis kann aufgerufen werden, nachdem ein Server einen erfolgreichen Upload empfangen hat. Weitere Informationen zu diesem neuen Objekt finden Sie im ActionScript 2.0-Referenzhandbuch.

19

Neu in ActionScript 2.0 und Flash Player 8


Seit ihrer Einfhrung vor einigen Jahren ist die ActionScript-Sprache gewachsen und weiter entwickelt worden. In jeder neuen Version von Flash wurden ActionScript zustzliche Schlsselwrter, Objekte, Methoden und andere Sprachelemente hinzugefgt. In der Flash 8-Authoring-Umgebung wurden auch ActionScript-bezogene Verbesserungen vorgenommen. Flash Basic 8 und Flash Professional 8 verfgen ber neue Sprachelemente fr Darstellungsfunktionalitt, z. B. Filter und Mischmodi, und die Anwendungsentwicklung, z. B. JavaScript-Integration (ExternalInterface) und Datei-E/A (FileReference und FileReferenceList). In diesem Abschnitt werden die neuen und verbesserten ActionScript-Sprachelemente und -Klassen in Flash 8 sowie die ActionScript-spezifischen Verbesserungen des Authoring-Tools beschrieben. Eine Liste der neuen Funktionsmerkmale, die sich konkret auf ActionScript 2.0 beziehen, finden Sie unter Neue Elemente in der ActionScript-Sprache in Flash Player 8 auf Seite 23. Um die neuen Sprachelemente in Ihren Skripts zu verwenden, mssen Sie fr die Verffentlichung Ihrer Dokumente die Einstellung Flash Player 8 beibehalten. Die folgenden Funktionsmerkmale wurden sowohl Flash Basic 8 als auch Flash Professional 8 hinzugefgt (wenn nicht anders angegeben):

Im ActionScript-Editor knnen jetzt im Skript enthaltene versteckte Zeichen angezeigt werden. Weitere Informationen finden Sie im Handbuch Flash verwenden unter Versteckte Zeichen anzeigen. Debug-Optionen stehen jetzt fr ActionScript-Dateien im Skriptfenster und im Bedienfeld Aktionen zur Verfgung. Das Verzeichnis Configuration, in dem die XML-Dateien und Klassendateien enthalten sind, wurde umstrukturiert. Ausfhrliche Informationen finden Sie im Handbuch Flash verwenden unter Mit Flash installierte Konfigurationsordner. Bei der Arbeit an Anwendungen knnen Sie mit einer Voreinstellung festlegen, dass genderte Skriptdateien neu geladen werden. So knnen Sie verhindern, dass Sie mit lteren Versionen von Skriptdateien arbeiten oder versehentlich neuere Skriptdateien berschreiben. Weitere Informationen finden Sie im Handbuch Flash verwenden unter ActionScript-Voreinstellungen festlegen. Das Skriptfenster ist in Flash verfgbar, so dass Sie nun ActionScript-Dateien in beiden Programmen erstellen knnen.

20

Neue Funktionen in Flash ActionScript

Die Skripthilfe (hnelt dem Normalmodus in frheren Flash-Versionen) untersttzt Sie beim Schreiben von Code, ohne dass ein Verstndnis der Syntax erforderlich ist. Weitere Informationen zur Skripthilfe finden Sie im Handbuch Flash verwenden unter Skripthilfemodus verwenden. Zur Laufzeit knnen neue Bilddateitypen geladen werden, darunter progressive JPEG-Bilder und nicht animierte GIF- und PNG-Dateien. Wenn Sie eine animierte Datei laden, wird das erste Bild der Animation angezeigt. Sie knnen den in der Bibliothek gespeicherten Bitmap- und Sounddateien Verknpfungsbezeichner zuweisen. So knnen Sie der Bhne Bilder zuweisen oder mit diesen Elementen in gemeinsamen Bibliotheken arbeiten. Die Bitmap-Zwischenspeicherung verbessert die Anwendungsleistung zur Laufzeit, da Bitmapdarstellungen der Instanzen zwischengespeichert werden. Sie knnen mit ActionScript-Code auf diese Eigenschaft zugreifen. Weitere Informationen finden Sie unter Bitmap-Zwischenspeicherung, Scrollen und Leistung auf Seite 490. Mit der Skalierung im 9-teiligen Segmentraster knnen Sie Movieclip-Instanzen skalieren, ohne die Konturen um den Movieclip zu verbreitern. Sie knnen mit ActionScript-Code auf diese Funktion in Flash zugreifen. Weitere Informationen finden Sie unter In ActionScript mit der Skalierung im 9-teiligen Segmentraster arbeiten auf Seite 574. Einzelheiten zum Zugriff auf die Skalierung im 9-teiligen Segmentraster im Authoring-Tool finden Sie im Handbuch Flash verwenden. Im Dialogfeld Dokumenteigenschaften knnen Sie den FLA-Dateien jetzt MetadatenInformationen hinzufgen. Sie knnen FLA-Dateien in diesem Dialogfeld einen Namen und eine Beschreibung hinzufgen, um die Online-Suche zu verbessern. Das Bedienfeld Strings untersttzt nun mehrzeiligen Text im Feld String und enthlt eine XML-Sprachdatei. Weitere Informationen finden Sie unter Bedienfeld auf Seite 462. Mit dem neuen Speichermanagement (Garbage Collection) von Flash Player wird die Leistung durch inkrementelle Speicherfreigabe verbessert. Der Arbeitsablauf fr die Erstellung von behindertengerechten Anwendungen wurde optimiert. In Flash Player 8 mssen Entwickler nicht mehr alle Objekte dem Tabulatorindex hinzufgen, damit der Inhalt korrekt von einem Bildschirmleseprogramm gelesen werden kann. Weitere Informationen zum Tabulatorindex finden Sie unter tabIndex (Button.tabIndex-Eigenschaft), tabIndex (MovieClip.tabIndexEigenschaft) und tabIndex (TextField.tabIndex-Eigenschaft) im ActionScript 2.0-Referenzhandbuch. Flash Player bietet verbesserte Sicherheitsfunktionen fr die Ausfhrung von lokalen SWF-Dateien auf der Festplatte. Informationen zur lokalen Dateisicherheit finden Sie unter Lokale Dateisicherheit und Flash Player auf Seite 703.

Neu in ActionScript 2.0 und Flash Player 8

21

Im ActionScript-Code knnen Sie die Drawing-API verwenden, um den Stil der gezeichneten Linien zu steuern. Einzelheiten zu den neuen Linienstilen finden Sie unter Linienstile auf Seite 563. Im ActionScript-Code knnen Sie die Drawing-API verwenden, um komplexe Farbverlaufsfllungen fr Formen zu erstellen. Informationen zu Farbverlaufsfllungen finden Sie unter Komplexe Verlaufsfllungen auf Seite 562. Mithilfe von ActionScript-Code knnen Sie zahlreiche Filter auf die Objekte auf der Bhne anwenden (wie Movieclip-Instanzen). Weitere Informationen zu Filtern in ActionScript finden Sie unter Filter mit ActionScript verwenden auf Seite 518. Mit den FileReference- und FileReferenceList-APIs knnen Sie Dateien auf einen Server hochladen. Weitere Informationen finden Sie unter Dateien hochladen und herunterladen auf Seite 667. Der ActionScript-Code bietet jetzt neue und verbesserte Verfahren zum Anwenden und Bearbeiten von Farben. Weitere Informationen finden Sie unter Farbwerte festlegen auf Seite 588 und ColorTransform (flash.geom.ColorTransform) im ActionScript 2.0-Referenzhandbuch. Es wurden zahlreiche Verbesserungen an der Textverarbeitung vorgenommen, wie beispielsweise neue Optionen, Eigenschaften und Parameter in den TextField- und TextFormat-Klassen. Weitere Informationen finden Sie unter TextField und TextFormat im ActionScript 2.0-Referenzhandbuch. Mithilfe von ActionScript-Code knnen Sie auf erweiterte Anti-Alias-Funktionsmerkmale zugreifen. Weitere Informationen finden Sie unter Schriftwiedergabe und Anti-AliasingText auf Seite 412. Beim Testen Ihrer Anwendung knnen Sie ASO-Dateien lschen. Whlen Sie Steuerung > ASO-Dateien lschen oder Steuerung > ASO-Dateien lschen und dann Film testen im Authoring-Tool. Weitere Informationen finden Sie unter ASO-Dateien verwenden auf Seite 270.

Eine Liste der neuen Klassen, Sprachelemente, Methoden und Eigenschaften in ActionScript 2.0 fr Flash 8 finden Sie im Handbuch Flash verwenden unter ActionScriptVoreinstellungen festlegen.

22

Neue Funktionen in Flash ActionScript

Neue Elemente in der ActionScript-Sprache in Flash Player 8


Die folgenden Klassen und Sprachelemente wurden entweder neu hinzugefgt oder werden jetzt in Flash Player 8 untersttzt. Die folgenden Klassen wurden ActionScript 2.0 in Flash 8 hinzugefgt:

Mit der BevelFilter-Klasse (im Paket flash.filters) knnen Sie Schliffeffekte auf Objekte anwenden. Mit der BitmapData-Klasse (im Paket flash.display) knnen Sie transparente oder undurchsichtige Bitmapbilder in willkrlicher Gre erstellen und manipulieren. Die BitmapFilter-Klasse (im Paket flash.display) ist die Basisklasse fr alle Filtereffekte. Mit der BlurFilter-Klasse knnen Sie Weichzeichnungseffekte auf Objekte in Flash anwenden. Mit der ColorMatrixFilter-Klasse (im Paket flash.filters) knnen Sie Transformationen auf ARGB-Farben und Alphawerte anwenden. Mit der ColorTransform-Klasse (im Paket flash.geom) knnen Sie die Farbwerte in Movieclips anpassen. Die bisherige Color-Klasse wurde durch diese Klasse ersetzt. Mit der ConvolutionFilter-Klasse (im Paket flash.filters) knnen Sie MatrixConvolution-Filtereffekte anwenden. Mit der DisplacementMapFilter-Klasse (im Paket flash.filters) knnen Sie Pixelwerte eines BitmapData-Objekts verwenden, um Objekte zu verschieben. Mit der DropShadowFilter-Klasse (im Paket flash.filters) knnen Sie Schlagschatten auf Objekte anwenden. Die ExternalInterface-Klasse (im Paket flash.external) ermglicht die Kommunikation durch Verwendung von ActionScript mit dem Flash Player-Container (das System, in dem die Flash-Anwendung sich befindet, beispielsweise ein Browser mit JavaScript oder die Desktop-Anwendung). Mit der FileReference-Klasse (im Paket flash.net) knnen Sie Dateien zwischen dem Computer des Benutzers und einem Server bertragen. Die FileReferenceList-Klasse (im Paket flash.net) ermglicht die Auswahl von einer oder mehreren hochzuladenden Dateien. Mit der GlowFilter-Klasse (im Paket flash.filters) knnen Sie Glheffekte auf Objekte anwenden. Mit der GradientBevelFilter-Klasse (im Paket flash.filters) knnen Sie geschliffene Farbverlufe auf Objekte anwenden.

Neu in ActionScript 2.0 und Flash Player 8

23

Mit der GradientGlowFilter-Klasse (im Paket flash.filters) knnen Sie Glheffekte mit Farbverlauf auf Objekte anwenden. Mit der IME-Klasse (in der System-Klasse) knnen Sie den Eingabemethodeneditor (Input Method Editor IME) des Betriebssystems innerhalb von Flash Player manipulieren. Mit der Locale-Klasse (im Paket mx.lang) knnen Sie die Anzeige von mehrsprachigem Text in einer SWF-Datei steuern. Die Matrix-Klasse (im Paket flash.geom) bildet eine Transformationsmatrix, die bestimmt, wie Punkte eines Koordinatenraums einem anderen zugeordnet werden. Die Point-Klasse (im Paket flash.geom) ist eine Position in einem 2D-Koordinatensystem, in dem x die horizontale Achse und y die vertikale Achse darstellt. Mit der Rectangle-Klasse (im Paket flash.geom) knnen Sie Rectangle-Objekte erstellen und ndern. Die TextRenderer-Klasse (im Paket flash.text) bietet Funktionalitt fr das erweiterte Anti-Aliasing von eingebetteten Schriftarten. Die Transform-Klasse (im Paket flash.geom) erfasst Daten ber die Farbtransformationen und Koordinatennderungen, die Sie auf eine MovieClip-Instanz anwenden.
H I N WE I S

Die AsBroadcaster-Klasse wird in Flash 8 offiziell untersttzt.

Den vorhandenen Klassen in ActionScript wurden die folgenden neuen Sprachelemente, Methoden und Funktionen hinzugefgt:

Mit der globalen Funktion showRedrawRegions kann der Debugger-Player eine Kontur der Bildschirmbereiche anzeigen, die neu gezeichnet werden (das heit zu bereinigende Bereiche, die aktualisiert werden). Die Funktion zeigt, welche Bereiche neu gezeichnet wurden, ermglicht aber keine Steuerung der neu zu zeichnenden Bereiche. Mit der Eigenschaft blendMode der Button-Klasse wird der Mischmodus fr die Button-Instanz festgelegt. Mit der Eigenschaft cacheAsBitmap der Button-Klasse kann das Objekt als interne Bitmapdarstellung der Instanz zwischengespeichert werden. Die Eigenschaft filters der Button-Klasse ist ein indiziertes Array, das alle Filterobjekte enthlt, die der Schaltflche zugeordnet sind. Die Eigenschaft scale9Grid der Button-Klasse ist der rechteckige Bereich, der neun Skalierungsbereiche fr die Instanz definiert.

24

Neue Funktionen in Flash ActionScript

Die Eigenschaft hasIME der System.capabilities-Klasse zeigt an, ob im System ein IME installiert ist. Die Eigenschaft getUTCYear der Date-Klasse gibt das Jahr des aktuellen Datums gem Weltzeit zurck. Die Methode isAccessible() der Key-Klasse gibt einen Boolean-Wert zurck, der angibt, ob die zuletzt gedrckte Taste auch fr andere SWF-Dateien zur Verfgung steht. Dies richtet sich nach den Sicherheitseinschrnkungen. Die Ereignisprozedur onHTTPStatus der LoadVars-Klasse gibt den vom Server zurckgegebenen Statuscode zurck (beispielsweise 404, wenn die Seite nicht gefunden wurde). Weitere Informationen finden Sie unter HTTPStatus (LoadVars.onHTTPStatus-Prozedur) im ActionScript 2.0-Referenzhandbuch. Die Methode attachBitmap() der MovieClip-Klasse, die ein Bitmapbild an einen Movieclip anfgt. Weitere Informationen finden Sie unter BitmapData (flash.display.BitmapData) im ActionScript 2.0-Referenzhandbuch. Die Methode beginBitmapFill() der MovieClip-Klasse, die einen Movieclip mit einem Bitmapbild ausfllt. Die Parameter spreadMethod, interpolationMethod und focalPointRatio der Methode beginGradientFill() in der MovieClip-Klasse. Diese Methode fllt einen Zeichenbereich mit einem Bitmapbild. Das Bitmapbild kann wiederholt oder mehrfach neben- und untereinander angeordnet werden, um den Bereich zu fllen. Mit der Eigenschaft blendMode der MovieClip-Klasse wird der Mischmodus fr die Instanz festgelegt. Mit der Eigenschaft cacheAsBitmap der MovieClip-Klasse kann das Objekt als interne Bitmapdarstellung der Instanz zwischengespeichert werden. Die Eigenschaft filters der MovieClip-Klasse ist ein indiziertes Array, das alle Filterobjekte enthlt, die der Instanz derzeit zugeordnet sind. Die Methode getRect() der MovieClip-Klasse gibt Eigenschaften fr die minimalen und maximalen Koordinatenwerte der angegebenen Instanz zurck. Die Methode lineGradientStyle() der MovieClip-Klasse gibt einen Linienstilverlauf an, den Flash zum Zeichnen eines Pfads verwendet. Die Parameter pixelHinting, noScale, capsStyle, jointStyle und miterLimit der Methode lineStyle() in der MovieClip-Klasse. Diese Parameter definieren die Linienstile, die zum Zeichnen von Linien verfgbar sind. Die Eigenschaft opaqueBackground der MovieClip-Klasse stellt den undurchsichtigen (nicht transparenten) Hintergrund des Movieclips auf die Farbe ein, die vom RGBHexadezimalwert angegeben wird.

Neu in ActionScript 2.0 und Flash Player 8

25

Die Eigenschaft scale9Grid der MovieClip-Klasse ist der rechteckige Bereich, der neun Skalierungsbereiche fr die Instanz definiert. Die Eigenschaft scrollRect der MovieClip-Klasse ermglicht einen raschen Bildlauf des Movieclip-Inhalts in einem Fenster, in dem mehr Inhalt dargestellt werden kann. Mit der Eigenschaft transform der MovieClip-Klasse knnen Matrix, Farbtransformation und Pixelbegrenzungen fr einen Movieclip eingestellt werden. Weitere Informationen finden Sie unter Transform (flash.geom.Transform) im ActionScript 2.0-Referenzhandbuch. Der Parameter status der Ereignisprozedur MovieClipLoader.onLoadComplete gibt den vom Server zurckgegebenen Statuscode zurck (beispielsweise 404, wenn die Seite nicht gefunden wurde). Weitere Informationen finden Sie unter onLoadComplete (MovieClipLoader.onComplete-Ereignisprozedur) im ActionScript 2.0Referenzhandbuch. Die Ereignisprozedur onLoadError der MovieClipLoader-Klasse wird aufgerufen, wenn das Laden einer Datei mit MovieClipLoader.loadClip() fehlschlgt. Der Parameter secure der Methode SharedObject.getLocal() bestimmt, ob der Zugriff auf dieses gemeinsame Objekt auf SWF-Dateien beschrnkt ist, die ber eine HTTPS-Verbindung bereitgestellt werden. Weitere Informationen finden Sie unter getLocal (SharedObject.getlocal-Methode) im ActionScript 2.0-Referenzhandbuch. Die Eigenschaft sandboxType der System.security-Klasse kennzeichnet die Security Sandbox, in der die aufrufende SWF-Datei ausgefhrt wird. Weitere Informationen finden Sie unter sandboxType (security.sandboxType-Eigenschaft) im ActionScript 2.0-Referenzhandbuch. Die Eigenschaft antiAliasType der TextField-Klasse definiert den erweiterten Anti-Alias-Typ fr die TextField-Instanz. Die Eigenschaft filters der TextField-Klasse ist ein indiziertes Array, das alle Filterobjekte enthlt, die der TextField-Instanz derzeit zugeordnet sind. Die Eigenschaft gridFitType der TextField-Klasse bestimmt die Art der Rasteranpassung fr die Instanz. Informationen zur Rasteranpassung und zu TextField.gridFitType finden Sie unter gridFitType (TextField.gridFitType-Eigenschaft) im ActionScript 2.0-Referenzhandbuch. Die Eigenschaft sharpness der TextField-Klasse bestimmt die Schrfe der Glyphenkanten fr die TextField-Instanz. Wenn Sie diese Eigenschaft verwenden, mssen Sie die Methode antiAliasType() auf advanced einstellen. Die Eigenschaft thickness der TextField-Klasse definiert die Dicke der Glyphenkanten fr die TextField-Instanz. Wenn Sie diese Eigenschaft verwenden, mssen Sie die Methode antiAliasType() auf advanced einstellen.

26

Neue Funktionen in Flash ActionScript

Mit dem Wert justify fr die Eigenschaft align der TextFormat-Klasse kann ein Absatz im Blocksatz angeordnet werden. Die Eigenschaft indent der TextFormat-Klasse ermglicht die Verwendung von negativen Werten. Mit der Eigenschaft kerning der TextFormat-Klasse kann die Unterschneidung fr ein TextFormat-Objekt aktiviert oder deaktiviert werden. Mit der Eigenschaft leading der TextFormat-Klasse kann ein negativer Zeilenabstand festgelegt werden, damit der Abstand zwischen den Linien kleiner als die Texthhe ist. So knnen die Textzeilen in der Anwendung nher aneinander angeordnet werden. Mit der Eigenschaft letterSpacing der TextFormat-Klasse kann der gleichmige Abstand zwischen allen Zeichen festgelegt werden. Die Eigenschaft _alpha der Video-Klasse bestimmt die Transparenz fr das Video-Objekt. Die Eigenschaft _height der Video-Klasse bestimmt die Hhe der Video-Instanz. Die Eigenschaft _name der Video-Klasse bestimmt den Namen der Video-Instanz. Die Eigenschaft _parent der Video-Klasse bestimmt, in welcher Movieclip-Instanz oder in welchem Objekt die Video-Instanz enthalten ist. Mit der Eigenschaft _rotation der Video-Klasse knnen Sie die Drehung der Video-Instanz in Grad festlegen. Mit der Eigenschaft _visible der Video-Klasse knnen Sie die Sichtbarkeit einer Video-Instanz steuern. Die Eigenschaft _width der Video-Klasse bestimmt die Breite der Video-Instanz. Die Eigenschaft _x der Video-Klasse bestimmt die x-Koordinate der Video-Instanz. Die Eigenschaft _xmouse der Video-Klasse bestimmt die x-Koordinate der Position des Mauszeigers. Die Eigenschaft _xscale der Video-Klasse bestimmt in Prozent die horizontale Skalierung der Video-Instanz. Die Eigenschaft _y der Video-Klasse bestimmt die y-Koordinate der Video-Instanz. Die Eigenschaft _ymouse der Video-Klasse bestimmt die y-Koordinate der Position des Mauszeigers. Die Eigenschaft _yscale der Video-Klasse bestimmt in Prozent die vertikale Skalierung der Video-Instanz. Die Ereignisprozedur onHTTPStatus der XML-Klasse gibt den vom Server zurckgegebenen Statuscode zurck (beispielsweise 404, wenn die Seite nicht gefunden wurde). Weitere Informationen finden Sie unter onHTTPStatus (XML.onHTTPStatusProzedur) im ActionScript 2.0-Referenzhandbuch.

Neu in ActionScript 2.0 und Flash Player 8

27

Die Eigenschaft localName der XMLNode-Klasse gibt den vollstndigen Namen des XML-Knotenobjekts zurck (einschlielich Prfix und lokaler Name). Die Eigenschaft namespaceURI der XMLNode-Klasse liest die URI des Namespace, dem das Prfix des XML-Knotens zugewiesen ist. Weitere Informationen finden Sie unter namespaceURI (XMLNode.namespaceURI-Eigenschaft) im ActionScript 2.0Referenzhandbuch. Die Eigenschaft prefix der XMLNode-Klasse liest das Prfix des Knotennamens. Die Methode getNamespaceForPrefix() der XMLNode-Klasse gibt die Namespace-URI zurck, die dem angegebenen Prfix des Knotens zugewiesen ist. Die Methode getPrefixForNamespace der XMLNode-Klasse gibt das Prfix zurck, das der angegebenen Namespace-URI des Knotens zugewiesen ist.

Veraltete Sprachelemente
Einige Sprachelemente werden in Flash Player 8 nicht mehr verwendet und gelten jetzt als veraltet. Eine Liste der veralteten Sprachelemente und der Alternativen in Flash Player 8 finden Sie in den folgenden Abschnitten im ActionScript 2.0-Referenzhandbuch:

bersicht verworfener Klassen bersicht verworfener Funktionen bersicht verworfener Eigenschaften bersicht verworfener Operatoren

nderungen bei der ActionScript-Bearbeitung


Der ActionScript-Editor im Bedienfeld Aktionen und im Skriptfenster wurde auf mehrfache Weise verbessert und ist nun robuster und benutzerfreundlicher als in frheren Versionen. In diesem Abschnitt werden diese nderungen zusammengefasst.
Versteckte Zeichen anzeigen

Beim Schreiben von Skriptdateien im Bedienfeld Aktionen und im Skriptfenster knnen versteckte Zeichen jetzt im Skriptbereich und in den Bedienfeldern Debugger und Ausgabe im Optionsmen ein- und ausgeblendet werden. Weitere Informationen zu dieser Funktion finden Sie unter Flash verwenden.

28

Neue Funktionen in Flash ActionScript

Bedienfeld Aktionen enthlt jetzt Skripthilfe In frheren Versionen von Flash konnten Sie im Bedienfeld Aktionen entweder im Normalmodus arbeiten, in dem Sie zur Erstellung von Code Optionen und Parameter eingefgt haben, oder im Expertenmodus, in dem Sie Befehle direkt im Skriptbereich hinzugefgt haben. Diese Optionen standen in Flash MX 2004 und Flash MX Professional 2004 nicht zur Verfgung. In Flash Basic 8 und Flash Professional 8 knnen Sie jedoch mit der Skripthilfe arbeiten, die dem normalen Modus aus frheren Flash-Versionen zwar hnelt, aber wesentlich robuster ist. Weitere Informationen und ein Tutorial zur Skripthilfe finden Sie in Flash verwenden. Modifizierte Dateien neu laden

Bei der Arbeit an einer Anwendung knnen Sie genderte Skriptdateien neu laden. In einer Warnmeldung werden Sie dazu aufgefordert, die genderten Skriptdateien der aktuellen Anwendung neu zu laden. Diese Option eignet sich besonders fr die Anwendungsentwicklung im Team, da Sie so vermeiden, dass Sie mit veralteten Skripts arbeiten oder versehentlich neuere Versionen eines Skripts berschreiben. Wenn eine Skriptdatei verschoben oder gelscht wurde, werden Sie in einer Warnmeldung dazu aufgefordert, die Dateien wie erforderlich zu speichern. Weitere Informationen finden Sie im Handbuch Flash verwenden unter ActionScript-Voreinstellungen festlegen.

nderungen am Sicherheitsmodell fr lokal installierte SWF-Dateien


Flash Player 9.x fhrt die Untersttzung fr ein neues HTML-Tag ein, allowNetworking. Weitere Informationen finden Sie im Kapitel Sicherheit des Handbuchs Programmieren mit ActionScript 3.0. Flash Player 8 hat ein neues, verbessertes Sicherheitsmodell eingefhrt. Flash-Anwendungen und SWF-Dateien auf einem lokalen Computer knnen nun mit dem Internet und dem lokalen Dateisystem kommunizieren, anstatt von einem Remote-Webserver ausgefhrt zu werden. Bei der Entwicklung einer Flash-Anwendung mssen Sie angeben, ob SWF-Dateien mit einem Netzwerk oder mit einem lokalen Dateisystem kommunizieren drfen.
H IN W E I S

In diesem Zusammenhang ist eine lokale SWF-Datei eine SWF-Datei, die auf dem lokalen Computer des Benutzers installiert ist, nicht von einer Website bereitgestellt wird und keine Projektordateien (EXE) enthlt.

nderungen am Sicherheitsmodell fr lokal installierte SWF-Dateien

29

In bisherigen Flash Player-Versionen konnten lokale SWF-Dateien mit anderen SWF-Dateien interagieren und Daten von externen oder lokalen Computern laden, ohne dass hierzu Sicherheitseinstellungen konfiguriert werden mussten. In Flash Player 8 und hher sind Verbindungen zwischen einer SWF-Datei und dem lokalen Dateisystem und einem Netzwerk (wie dem Internet) nicht in derselben Anwendung mglich, ohne dass dies in den Sicherheitseinstellungen konkret erlaubt wird. Mit dieser Sicherheitsmanahme wird vermieden, dass eine SWF-Datei Dateien auf Ihrer Festplatte liest und dann den Inhalt dieser Dateien ber das Internet sendet. Diese Sicherheitsbeschrnkung gilt fr alle lokal bereitgestellten Inhalte, d. h. Legacyinhalte (eine FLA-Datei, die in einer frheren Flash-Version erstellt wurde) und in Flash 8 erstellte Inhalte. Mithilfe von Flash MX 2004 oder einem lteren Authoring-Tool knnen Sie eine Flash-Anwendung testen, die lokal ausgefhrt wird und auch auf das Internet zugreift. In Flash Player 8 und hher muss der Benutzer dieser Anwendung nun eine explizite Berechtigung fr die Kommunikation mit Internet erteilen. Beim Testen einer Datei auf Ihrer Festplatte wird mit mehreren Schritten bestimmt, ob es sich um ein vertrauenswrdiges (sicheres) Dokument handelt oder um ein Dokument, das mglicherweise nicht vertrauenswrdig (nicht sicher) ist. Wenn Sie die Datei in der FlashAuthoring-Umgebung erstellen (zum Beispiel durch Auswahl von Steuerung > Film testen), wird die Datei als vertrauenswrdig eingestuft, da sie sich in der Testumgebung befindet. In Flash Player 7 und frheren Versionen hatten lokale SWF-Dateien die Berechtigung, sowohl auf das lokale Dateisystem als auch auf das Netzwerk zuzugreifen. In Flash Player 8 und hher knnen lokale SWF-Dateien ber drei verschiedene Berechtigungsstufen verfgen:

Nur Zugriff auf das lokale Dateisystem (Standardstufe). Die lokale SWF-Datei kann Daten aus dem lokalen Dateisystem und aus UNC-Netzwerkpfaden (Universal Naming Convention) lesen, aber nicht mit dem Internet kommunizieren. Nur Zugriff auf das Netzwerk. Die lokale SWF-Datei kann nur auf das Netzwerk (wie das Internet) zugreifen, nicht aber auf das lokale Dateisystem, in dem sie installiert ist. Zugriff auf das lokale Dateisystem und das Netzwerk. Die lokale SWF-Datei kann Daten aus dem lokalen Dateisystem lesen, in dem sie installiert ist, Lese- und Schreibvorgnge mit Servern ausfhren, die der Datei eine entsprechende Berechtigung erteilen, und Skripts in anderen SWF-Dateien referenzieren, die sich entweder im Netzwerk oder im lokalen Dateisystem befinden, sofern eine entsprechende Berechtigung vorhanden ist.

Einzelheiten zu den Berechtigungsstufen finden Sie unter Lokale Dateisicherheit und Flash Player auf Seite 703. Auerdem wurden geringfgige nderungen an System.security.allowDomain sowie Verbesserungen an System.security.allowInsecureDomain vorgenommen. Einzelheiten zur Sicherheit von lokalen Dateien finden Sie in Kapitel 16, Sicherheit .

30

Neue Funktionen in Flash ActionScript

KAPITEL 2

Einfhrung in ActionScript
Die objektorientierten Programmierungsfunktionen in ActionScript 2.0 basieren auf dem ECMAScript 4-Entwurf, der sich derzeit bei ECMA TC39-TG1 in der Entwicklung befindet (siehe www.mozilla.org/js/language/es4/index.html). Da es sich bei diesem Entwurf noch nicht um einen Standard handelt und weiterhin nderungen vorgenommen werden, lehnt sich ActionScript 2.0 nur an diese Vorgaben an. ActionScript 2.0 untersttzt alle Standardelemente der ActionScript-Sprache. Dadurch knnen Sie Skripts schreiben, die nher an den Standards anderer objektorientierter Sprachen wie z. B. Java liegen. ActionScript 2.0 ist vor allem fr Entwickler mit durchschnittlichen oder fortgeschrittenen Kenntnissen beim Erstellen von Anwendungen interessant, fr die eine Implementierung von Klassen und Unterklassen erforderlich ist. Mit ActionScript 2.0 knnen Sie auerdem beim Erstellen von Variablen deren Objekttyp deklarieren (siehe Datentypen zuweisen und strikte Datentypisierung auf Seite 46). Darber hinaus werden erheblich verbesserte Compiler-Fehlerbehandlungen bereitgestellt (siehe Anhang A, Fehlermeldungen auf Seite 787). Zu den Schlsselmerkmalen von ActionScript 2.0 gehren folgende Punkte:

Skripts, die ActionScript 2.0 zum Definieren von Klassen oder Oberflchen verwenden, mssen als externe Skriptdateien mit einer in jedem Skript einzeln definierten Klasse gespeichert werden, d. h., dass Klassen und Oberflchen nicht im Bedienfeld Aktionen definiert werden knnen. Sie knnen einzelne Klassendateien implizit importieren, indem Sie sie in einem durch globale oder dokumentspezifische Suchpfade angegebenen Ordner speichern und danach in einem Skript verwenden, oder explizit importieren, indem Sie den Befehl import verwenden. Pakete (Sammlungen von Klassendateien in einem Verzeichnis) knnen Sie mit Platzhaltern importieren.

31

Anwendungen, die mit ActionScript 2.0 entwickelt wurden, werden von Flash Player ab Version 6 untersttzt.
A C H T UN G

Die standardmige Verffentlichungseinstellung fr neu erstellte Dateien in Flash 9 ist ActionScript 3.0. Wenn Sie eine bereits vorhandene FLA-Datei mit ActionScript 1.0 oder ActionScript 2.0 so ndern mchten, dass die ActionScript 2.0-Syntax verwendet wird, vergewissern Sie sich, dass ActionScript 2.0 in den Verffentlichungseinstellungen der FLA-Datei festgelegt ist. Ist dies nicht der Fall, wird die Datei fehlerhaft kompiliert, obwohl Flash mglicherweise keine Compiler-Fehler ausgibt.

Weitere Informationen zur Verwendung von ActionScript 2.0 zum Schreiben von objektorientierten Programmen in Flash finden Sie in Kapitel 6, Klassen auf Seite 205. Obwohl Adobe das Verwenden von ActionScript 3.0 empfiehlt, knnen Sie auch weiterhin die ActionScript 1.0 und ActionScript 2.0-Syntax verwenden.

ActionScript Definition
Zu den wichtigsten Funktionsmerkmalen von ActionScript 2.0 gehren: Das Hauptmerkmal von ActionScript 2.0 ist ein bekanntes Modell zum Erstellen objektorientierter Programme. Mit ActionScript 2.0 werden mehrere objektorientierte Konzepte und Schlsselwrter implementiert, wie z. B. Klasse, Schnittstelle und Pakete, die Ihnen sicherlich bekannt sind, wenn Sie bereits mit Java programmiert haben.
Bekanntes OOP-Modell

Das OOP-Modell von ActionScript 2.0 ist eine syntaktische Formalisierung der Prototypketten-Methode, die in frheren Versionen von Flash verwendet wurde, um Objekte zu erstellen und die Vererbung zu etablieren. Mit ActionScript 2.0 knnen Sie benutzerdefinierte Klassen erstellen und die in Flash integrierten Klassen erweitern.
Strikte Typisierung

Mit ActionScript 2.0 knnen Sie Datentypen fr Variablen, Funktionsparameter und Funktionsrckgabetypen explizit festlegen. Der folgende Code deklariert beispielsweise die Variable namens userName mit dem Typ String (integrierter ActionScript-Datentyp oder Klasse). Dank der beiden oben genannten Funktionsmerkmale (OOP-Modell und strikte Typisierung) knnen vom Authoring-Tool und vom Compiler Warn- und Fehlermeldungen ausgegeben werden, mit denen Sie Fehler in Ihrer Anwendung schneller finden knnen.

var userName:String = ""; Compiler Warn- und Fehlermeldungen

32

Einfhrung in ActionScript

Wenn Sie ActionScript 2.0 verwenden, mssen Sie die Verffentlichungseinstellungen fr die FLA-Datei auf ActionScript 2.0 setzen (die Standardeinstellung fr Flash 9 ist ActionScript 3.0). Wenn Sie jedoch eine ltere FLA-Datei, fr die ActionScript 1.0 verwendet wurde, ffnen und in ActionScript 2.0 neu schreiben, mssen Sie die Verffentlichungseinstellungen der FLA-Datei auf ActionScript 2.0 setzen. Andernfalls kann Ihre FLA-Datei nicht korrekt kompiliert werden, und es werden keine Fehler generiert.

Entscheidung fr ActionScript 1.0 oder ActionScript 2.0


Wenn Sie mit der Erstellung eines neuen Dokuments oder einer neuen Anwendung in Flash beginnen, mssen Sie sich berlegen, wie Sie die damit verknpften Dateien strukturieren. In einigen Projekten werden Sie Klassen verwenden, z. B. bei der Erstellung von Anwendungen oder komplexen FLA-Dateien. Es benutzen jedoch nicht alle Dokumente Klassen. Viele der kurzen Beispiele in dieser Dokumentation verwenden z. B. keine Klassen. Fr kleine Anwendungen oder einfache FLA-Dateien ist die Verwendung von Klassen zum Speichern der Funktionalitt nicht die einfachste oder beste Lsung. Hufig ist es effizienter, ActionScript-Code im Dokument zu speichern. Versuchen Sie in einem solchen Fall, Ihren gesamten Code in so wenig Bildern in der Zeitleiste wie mglich unterzubringen, und vermeiden Sie es, Code auf oder in den Instanzen (z. B. Schaltflchen oder Movieclips) in einer FLA-Datei zu platzieren. Wenn Sie ein kleines Projekt erstellen, ist es oft aufwndiger, ActionScript in Klassen oder externen Codedateien zu organisieren, als ActionScript einer FLA-Datei hinzuzufgen. Es ist manchmal einfacher, den gesamten ActionScript-Code in einer FLA-Datei unterzubringen, als in einer Klasse, die Sie importieren. Dies bedeutet nicht, dass Sie notwendigerweise ActionScript 1.0 verwenden sollten. Sie knnen sich auch dafr entscheiden, Ihren Code mit ActionScript 2.0 und seiner strikten Typisierung und seinen neuen Methoden und Eigenschaften in einer FLA-Datei zu speichern. ActionScript 2.0 bietet auerdem eine Syntax, die sich an die Standards anderer Programmiersprachen hlt. Das Erlernen der Sprache ist damit einfacher und erleichtert das Verstndnis anderer Sprachen. ActionScript wird Ihnen vertraut vorkommen, wenn Sie bereits eine andere Sprache kennen, die auf derselben Struktur und denselben Syntaxstandards aufbaut. Sie knnen Ihre Kenntnisse jedoch auch auf andere Sprachen anwenden, die Sie vielleicht zu einem spteren Zeitpunkt erlernen. Mit ActionScript 2.0 knnen Sie einen objektorientierten Ansatz bei der Entwicklung von Anwendungen whlen. Hierbei knnen Sie zustzliche Sprachelemente verwenden, die bei der Entwicklung der Anwendung von Vorteil sein knnen.

Entscheidung fr ActionScript 1.0 oder ActionScript 2.0

33

In manchen Fllen steht Ihnen die Auswahl zwischen den beiden ActionScript-Versionen nicht offen. Wenn Sie eine SWF-Datei erstellen, die fr eine ltere Version von Flash Player gedacht ist, z. B. fr mobile Endgerte, mssen Sie ActionScript 1.0 verwenden, das mit Flash Player fr verschiedene Gerte kompatibel ist. Denken Sie daran, die empfohlenen Verfahren anzuwenden, gleichgltig, welche Version von ActionScript Sie verwenden. Viele dieser Verfahren gelten fr beide Versionen, z. B. die konsistente Verwendung der Gro- und Kleinschreibung, Codevervollstndigung, bessere Lesbarkeit, Instanznamen, fr die keine Schlsselwrter verwendet werden, und konsistente Namenskonventionen. Wenn Sie vorhaben, Ihre Anwendungen fr zuknftige Versionen von Flash zu aktualisieren oder sie zu erweitern und komplexer zu gestalten, sollten Sie ActionScript 2.0 und Klassen verwenden, um Ihnen diese Arbeiten zu erleichtern.

Einfhrung in ActionScript und Flash Player


Wenn Sie eine SWF-Datei, die ActionScript 2.0 enthlt, mit den Verffentlichungseinstellungen Flash Player 6 und ActionScript 1.0 kompilieren, kann der Code ausgefhrt werden, vorausgesetzt, es werden keine ActionScript 2.0-Klassen verwendet. Die Unterscheidung zwischen Gro- und Kleinschreibung wird nicht im Code beachtet, sondern nur in Flash Player. Wenn Sie jedoch eine SWF-Datei mit den Verffentlichungseinstellungen Flash Player 7 und hher und ActionScript 1.0 kompilieren, erzwingt Flash die Beachtung der Gro- und Kleinschreibung. Datentypanmerkungen (strikte Datentypen) werden fr Flash Player 7 und hher bei der Kompilierung erzwungen, wenn Sie die Einstellungen fr Verffentlichungen auf ActionScript 2.0 gesetzt haben. Beim Verffentlichen der Anwendungen wird ActionScript 2.0 in ActionScript 1.0-Bytecode kompiliert, so dass Sie mit ActionScript 2.0 Anwendungen fr Flash Player 6 und hher erstellen knnen.

34

Einfhrung in ActionScript

KAPITEL 3

Daten und Datentypen


Dieses Kapitel ist das erste von mehreren Kapiteln, in denen die grundlegenden Konzepte von ActionScript vorgestellt werden. Sie werden einige einfache Kodierungstechniken kennen lernen, damit Sie komplexe Anwendungen erstellen knnen. Auerdem erfahren Sie in diesem Kapitel mehr ber die Arbeit mit den Daten in einer FLA-Datei und welche Datentypen verfgbar sind. Das nchste Kapitel, Kapitel 4, Syntax- und Sprachgrundlagen enthlt Einzelheiten zur Syntax und zu Formularanweisungen von ActionScript. Darauf folgt Kapitel 5, Funktionen und Methoden , in dem die Funktionen und Methoden der ActionScript-Sprache beschrieben werden. Weitere Informationen zu Daten und Datentypen finden Sie unter den folgenden Themen:
Daten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Daten in Objekten organisieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Umwandlung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

Daten
Der Begriff Daten bezieht sich auf die Zahlen, Strings und anderen Daten, die Sie innerhalb von Flash manipulieren knnen. Die Verwendung von Daten ist bei der Erstellung von Anwendungen und Websites meist unerlsslich. Daten werden auch zur Erstellung von ausgereiften Grafiken verwendet sowie fr Animationen, die von Skripts generiert werden. Mglicherweise mssen Sie die Werte bearbeiten, mit denen Effekte gesteuert werden. Sie knnen Daten in Variablen innerhalb von Flash definieren oder aus externen Dateien oder Sites laden, indem Sie beispielsweise XML, Web Services, integrierte ActionScript-Klassen usw. verwenden. Daten knnen in einer Datenbank gespeichert und dann auf verschiedene Weise in einer SWF-Datei dargestellt werden. Beispielsweise knnen die Informationen in Textfeldern oder Komponenten oder in Form von Bildern in Movieclip-Instanzen angezeigt werden.

35

Zu den hufigsten Datentypen zhlen Strings (Zeichenfolgen wie beispielsweise Namen oder Text), Zahlen, Objekte (wie Movieclips) sowie Boolesche Werte (true und false). In diesem Kapitel werden die Datentypen in Flash und ihre Verwendung genauer beschrieben. Weitere Informationen zu Datentypen finden Sie unter Datentypen auf Seite 36. Einzelheiten zu Variablen finden Sie unter Variablen auf Seite 53.

Datentypen
Ein Datentyp beschreibt einen Datenabschnitt und die Vorgnge, die damit ausgefhrt werden knnen. Daten werden in einer Variablen gespeichert. Sie verwenden Datentypen bei der Erstellung von Variablen, Objektinstanzen und Funktionsdefinitionen, um den Datentyp zuzuweisen, mit dem Sie arbeiten. Bei der Erstellung von ActionScript-Code verwenden Sie zahlreiche verschiedene Datentypen. In ActionScript 2.0 sind mehrere hufige Datentypen definiert. Datentypen beschreiben die Art des Werts, den eine Variable oder ein ActionScript-Element enthalten kann. Eine Variable, der ein Datentyp zugewiesen ist, kann nur einen Wert enthalten, der sich innerhalb des gltigen Wertebereichs dieses Datentyps befindet. Einzelheiten zu Variablen finden Sie unter Variablen auf Seite 53. ActionScript verfgt ber zahlreiche grundlegende Datentypen, die Sie in Ihren Anwendungen voraussichtlich hufig verwenden werden. Weitere Informationen finden Sie in der Tabelle unter Grunddatentypen und komplexe Datentypen auf Seite 37. Auerdem verfgt ActionScript ber Kernklassen wie Array und Date, die als komplexe Datentypen oder Referenzdatentypen betrachtet werden. Weitere Informationen zu komplexen Datentypen und Referenzdatentypen finden Sie unter Grunddatentypen und komplexe Datentypen auf Seite 37. Eine vollstndige Erluterung der einzelnen Datentypen und Klassen finden Sie im ActionScript 2.0-Referenzhandbuch. Sie knnen auch benutzerdefinierte Klassen fr Ihre Anwendungen erstellen. Klassen, die Sie mithilfe der Deklaration class definieren, gelten ebenfalls als Datentyp. Weitere Informationen zu den Kernklassen und anderen integrierten Klassen finden Sie unter bergeordnete und integrierte Klassen auf Seite 275. Einzelheiten zur Erstellung von benutzerdefinierten Klassen finden Sie in Kapitel 6, Klassen auf Seite 205. In ActionScript 2.0 knnen Sie Variablen bei der Deklarierung Datentypen zuweisen. Beim Datentyp kann es sich um einen der Kerntypen oder um eine von Ihnen erstellte benutzerdefinierte Klasse handeln. Weitere Informationen finden Sie unter Datentypen zuweisen und strikte Datentypisierung auf Seite 46.

36

Daten und Datentypen

Beim Debuggen von Skripts mssen Sie mglicherweise den Datentyp eines Ausdrucks oder einer Variablen bestimmen, um festzustellen, warum der Ausdruck oder die Variable sich auf eine bestimmte Weise verhlt. Zu diesem Zweck knnen Sie die Operatoren instanceof und typeof verwenden (siehe Datentypen ermitteln auf Seite 52). Ein Datentyp kann zur Laufzeit mithilfe einer der folgenden Umwandlungsfunktionen in einen anderen Datentyp umgewandelt werden: Array(), Boolean(), Number(), Object(), String(). Ein Beispiel der Datei datatypes.fla, das die Verwendung von Datentypen in einer Anwendung verdeutlicht, finden Sie auf der Webseite mit Flash-Beispielen unter www.adobe.com/go/learn_fl_samples_de. Laden Sie die komprimierte Beispieldatei herunter, dekomprimieren Sie sie, und wechseln Sie in den Ordner ActionScript2.0/DataTypes, um auf das Beispiel zuzugreifen.

Grunddatentypen und komplexe Datentypen


Alle Datentypwerte lassen sich in zwei Hauptkategorien einteilen: Grundwert und komplexer Wert. Ein Grundwert (oder Grunddatentyp) wird von ActionScript auf der niedrigsten Abstraktionsebene gespeichert. Deshalb sind Vorgnge mit Grunddatentypen meist schneller und effizienter als Vorgnge mit komplexen Datentypen. Die folgenden Datentypen definieren einen oder mehrere Grundwerte: Boolean, Null, Number, String und Undefined. Ein komplexer Wert (oder komplexer Datentyp) ist kein Grundwert, sondern verweist auf Grundwerte. Komplexe Datentypen werden hufig als Referenzdatentypen bezeichnet. Komplexe Werte gehren zum Object-Datentyp oder zu einem Datentyp, der auf dem Object-Datentyp beruht. Zu den Datentypen, die komplexe Werte definieren, gehren Array, Date, Error, Function und XML. Weitere Informationen zu diesen komplexen Datentypen finden Sie unter den entsprechenden Eintrgen im ActionScript 2.0-Referenzhandbuch. Variablen, die Grunddatentypen enthalten, verhalten sich in bestimmten Situationen anders als solche, die komplexe Datentypen enthalten. Weitere Informationen finden Sie unter Variablen in einem Projekt verwenden auf Seite 75.

Datentypen

37

ActionScript verfgt ber die folgenden grundlegenden Datentypen, die Sie in Ihren Anwendungen verwenden knnen:
Datentyp
Boolean

Beschreibung
Grunddatentyp. Der Boolean-Datentyp besteht aus zwei Werten: true und false. Fr Variablen dieses Typs sind keine anderen Werte zulssig. Der Standardwert einer Boolean-Variable, die zwar deklariert, aber nicht initialisiert wurde, lautet false. Weitere Informationen finden Sie unter Boolean-Datentyp auf Seite 39. Komplexer Datentyp. Der MovieClip-Datentyp ermglicht die Steuerung von Movieclip-Symbolen mithilfe der Methoden der MovieClip-Klasse. Weitere Informationen finden Sie unter MovieClip-Datentyp auf Seite 41. Grunddatentyp. Der Null-Datentyp enthlt den Wert null. Dieser Wert steht fr kein Wert und gibt an, dass keine Daten vorhanden sind. Sie knnen den Wert null in verschiedenen Situationen zuweisen, um anzuzeigen, dass eine Eigenschaft oder eine Variable noch nicht mit einem Wert versehen wurde. Der Null-Datentyp ist der Standarddatentyp fr alle Klassen, die komplexe Datentypen definieren. Eine Ausnahme bildet die Object-Klasse, die standardmig den Wert undefined hat. Weitere Informationen finden Sie unter Null-Datentyp auf Seite 42. Grunddatentyp. Als Wert fr diesen Datentyp sind Ganzzahlen, vorzeichenlose Ganzzahlen und Gleitkommazahlen mglich. Zum Speichern einer Gleitkommazahl muss die Zahl einen Punkt als Dezimalzeichen enthalten. Ohne den Dezimalpunkt wird die Zahl als Ganzzahl gespeichert. Der Number-Datentyp kann Werte von Number.MAX_VALUE (sehr hoch) bis Number.MIN_VALUE (sehr niedrig) enthalten. Weitere Informationen finden Sie im ActionScript 2.0Referenzhandbuch und unter Number-Datentyp auf Seite 43. Komplexer Datentyp. Der Object-Datentyp wird von der Object-Klasse definiert. Die Object-Klasse bildet die Basisklasse fr alle Klassendefinitionen in ActionScript und ermglicht es Ihnen, Objekte innerhalb von anderen Objekten anzuordnen (verschachtelte Objekte). Weitere Informationen finden Sie unter Object-Datentyp auf Seite 43. Grunddatentyp. Der String-Datentyp enthlt eine Folge aus 16-Bit-Zeichen, bei denen es sich um Buchstaben, Ziffern und Satzzeichen enthalten kann. Strings werden als Unicode-Zeichen im Format UTF-16 gespeichert. Eine Operation mit einem String-Wert gibt eine neue Instanz des Strings zurck. Weitere Informationen finden Sie unter String-Datentyp auf Seite 44.

MovieClip

null

Number

Object

String

38

Daten und Datentypen

Datentyp
undefined

Beschreibung
Grunddatentyp. Der Undefined-Datentyp enthlt einen Wert: undefined. Dies ist der Standardwert fr Instanzen der Object-Klasse. Der Wert undefined kann nur Variablen zugewiesen werden, die zur Object-Klasse gehren. Weitere Informationen finden Sie unter Undefined-Datentyp auf Seite 46. Komplexer Datentyp. Der Void-Datentyp enthlt nur einen Wert:
void. Mit diesem Datentyp werden Funktionen gekennzeichnet, die

Void

keinen Wert zurckgeben. Void ist ein komplexer Datentyp, der auf den Void-Grunddatentyp verweist. Weitere Informationen finden Sie unter Void-Datentyp auf Seite 46.

Ein Beispiel fr die Datei datatypes.fla finden Sie auf der Webseite mit Flash-Beispielen unter www.adobe.com/go/learn_fl_samples_de. Laden Sie die komprimierte Beispieldatei herunter, dekomprimieren Sie sie, und wechseln Sie in den Ordner ActionScript2.0/DataTypes, um auf das Beispiel zuzugreifen.

Boolean-Datentyp
Die beiden mglichen Booleschen Werte sind true (wahr) und false (falsch). ActionScript wandelt die Werte true und false gegebenenfalls in 1 und 0 um. Boolesche Werte werden zumeist in Verbindung mit logischen Operatoren in ActionScript-Anweisungen verwendet, die anhand eines Vergleichs den Ablauf eines Skripts steuern. Der folgende Beispielcode ldt eine Textdatei in eine SWF-Datei. Wenn die Textdatei nicht richtig geladen werden kann, wird eine Meldung im Bedienfeld Ausgabe angezeigt, andernfalls werden die Parameter angezeigt. Einzelheiten finden Sie in den Kommentaren im Code.
var my_lv:LoadVars = new LoadVars(); //success ist ein Boolescher Wert. my_lv.onLoad = function(success:Boolean) { //wenn success wahr ist, monthNames ausgeben if (success) { trace(my_lv.monthNames); //wenn success falsch ist, Meldung ausgeben } else { trace("unable to load text file"); } }; my_lv.load("http://www.helpexamples.com/flash/params.txt");

Datentypen

39

Im folgenden Beispiel wird berprft, ob Benutzer Werte in zwei TextInputKomponenteninstanzen eingegeben haben. Die beiden Booleschen Variablen userNameEntered und isPasswordCorrect werden erstellt. Sind beide Variablen true, wird der String-Variablen titleMessage eine Willkommensbotschaft zugeordnet.
// Zwei TextInput-Komponenten und je eine Label- und Button-Komponente auf // der Bhne hinzufgen // Die drei Komponenteninstanzen strikt typisieren var userName_ti:mx.controls.TextInput; var password_ti:mx.controls.TextInput; var submit_button:mx.controls.Button; var welcome_lbl:mx.controls.Label; // Bezeichnung ausblenden welcome_lbl.visible = false; // Listener-Objekt erstellen, das mit der Button-Komponente verwendet wird // Wenn auf die Schaltflche geklickt wird, werden Benutzername und Kennwort // berprft var btnListener:Object = new Object(); btnListener.click = function(evt:Object) { // Es wird berprft, ob der Benutzer mindestens ein Zeichen in // TextInput-Instanzen eingegeben hat, und der Boolesche Wert true oder // false wird zurckgegeben. var userNameEntered:Boolean = (userName_ti.text.length > 0); var isPasswordCorrect:Boolean = (password_ti.text == "vertigo"); if (userNameEntered && isPasswordCorrect) { var titleMessage:String = "Welcome " + userName_ti.text + "!"; welcome_lbl.text = titleMessage; //Bezeichnung anzeigen welcome_lbl.visible = true; } }; submit_button.addEventListener("click", btnListener);

Weitere Informationen hierzu finden Sie unter Funktionen in Flash verwenden auf Seite 192 und Logische Operatoren auf Seite 170.

40

Daten und Datentypen

MovieClip-Datentyp
Movieclips sind Symbole, die Animationen in einer Flash-Anwendung abspielen knnen. Sie stellen den einzigen Datentyp dar, der auf ein Grafikelement verweist. Der MovieClipDatentyp ermglicht die Steuerung von Movieclip-Symbolen mit den Methoden der MovieClip-Klasse. Fr den Aufruf der Methoden der MovieClip-Klasse wird kein Konstruktor verwendet. Sie knnen eine MovieClip-Instanz auf der Bhne erstellen oder dynamisch eine Instanz erstellen. Danach rufen Sie die Methoden der MovieClip-Klasse einfach mit dem PunktOperator (.) auf. Im folgenden Beispiel werden die Methoden und getURL() fr verschiedene Movieclip-Instanzen aufgerufen, die sich auf der Bhne befinden:
Movieclips auf der Bhne verwenden startDrag() my_mc.startDrag(true); parent_mc.getURL("http://www.adobe.com/support/" + product);

Das zweite Beispiel gibt die Breite eines Movieclips auf der Bhne mit dem Namen my_mc wieder. Bei der Zielinstanz muss es sich um einen Movieclip handeln, und der Rckgabewert muss numerisch sein.
function getMCWidth(target_mc:MovieClip):Number { return target_mc._width; } trace(getMCWidth(my_mc)); Movieclips dynamisch erstellen Wenn Sie Movieclips nicht manuell auf der Bhne erstellen und keine Clips aus der Bibliothek anfgen mchten, kommt die dynamische Erstellung von Movieclips mit ActionScript zum Einsatz. Sie knnen beispielsweise eine Bildergalerie mit zahlreichen Piktogrammen erstellen, die auf der Bhne angeordnet werden sollen. Unter Verwendung von MovieClip.createEmptyMovieClip() knnen Sie eine Anwendung ausschlielich mit ActionScript erstellen. MovieClip.createEmptyMovieClip(),

Zur dynamischen Erstellung eines Movieclips verwenden Sie wie im folgenden Beispiel gezeigt:

// Erstellt Movieclip fr den Container. this.createEmptyMovieClip("image_mc", 9); // Ldt ein Bild in image_mc. image_mc.loadMovie("http://www.helpexamples.com/flash/images/image1.jpg");

Datentypen

41

Im zweiten Beispiel wird ein Movieclip mit dem Namen square_mc erstellt, der die Drawing-API verwendet, um ein Rechteck zu zeichnen. Ereignisprozeduren und die Methoden startDrag() und stopDrag() der MovieClip-Klasse werden hinzugefgt, damit das Rechteck gezogen werden kann.
this.createEmptyMovieClip("square_mc", 1); square_mc.lineStyle(1, 0x000000, 100); square_mc.beginFill(0xFF0000, 100); square_mc.moveTo(100, 100); square_mc.lineTo(200, 100); square_mc.lineTo(200, 200); square_mc.lineTo(100, 200); square_mc.lineTo(100, 100); square_mc.endFill(); square_mc.onPress = function() { this.startDrag(); }; square_mc.onRelease = function() { this.stopDrag(); };

Weitere Informationen finden Sie in Kapitel 10, Mit Movieclips arbeiten auf Seite 351 und unter dem Eintrag MovieClip im ActionScript 2.0-Referenzhandbuch.

Null-Datentyp
Der Null-Datentyp hat nur den Wert null. Dieser Wert steht fr kein Wert und gibt an, dass keine Daten vorhanden sind. Sie knnen den Wert null in verschiedenen Situationen zuweisen, um anzuzeigen, dass eine Eigenschaft oder eine Variable noch nicht mit einem Wert versehen wurde. Der Wert null kann beispielsweise in den folgenden Situationen zugewiesen werden:

Eine Variable existiert, hat aber noch keinen Wert erhalten. Eine Variable existiert, enthlt aber keinen Wert mehr. Eine Funktion kann keinen Wert zurckgeben, weil kein entsprechender Wert verfgbar ist; in diesem Fall wird der Nullwert zurckgegeben. Ein erwarteter Parameter fehlt; in diesem Fall wird der Nullwert als Parameter bergeben.

Mehrere Methoden und Funktionen geben null zurck, wenn kein Wert festgelegt wurde. Im folgenden Beispiel wird gezeigt, wie Sie mit null prfen knnen, ob Formularfelder derzeit den Formularfokus haben:
if (Selection.getFocus() == null) { trace("no selection"); }

42

Daten und Datentypen

Number-Datentyp
Der Number-Datentyp gibt eine Gleitkommazahl mit zwei Dezimalstellen an. Der Mindestwert eines Number-Objekts betrgt etwa 5e-324, der Maximalwert ca. 1.79E+308. Zahlen lassen sich mithilfe der entsprechenden arithmetischen Operatoren addieren (+), subtrahieren (-), multiplizieren (*), dividieren (/), modulieren (%), inkrementieren (++) und dekrementieren (--). Weitere Informationen finden Sie unter Numerische Operatoren verwenden auf Seite 164. Auerdem knnen Sie Zahlen mit den integrierten Math- und Number-Klassen manipulieren. Weitere Informationen zu den Methoden und Eigenschaften dieser Klassen finden Sie unter den Eintrgen Math und Number im ActionScript 2.0-Referenzhandbuch. Im folgenden Beispiel wird die Methode sqrt() der Math-Klasse verwendet, um die Quadratwurzel (engl: square root) der Zahl 100 zu berechnen und zurckzugeben:
Math.sqrt(100);

Im folgenden Beispiel wird eine zufllige Ganzzahl zwischen 10 und 17 (inklusive) ausgegeben:
var bottles:Number = 0; bottles = 10 + Math.floor(Math.random() * 7); trace("There are " + bottles + " bottles");

Im folgenden Beispiel wird festgestellt, zu welchem Prozentsatz der Movieclip intro_mc geladen ist, und dieser Wert wird als Ganzzahl dargestellt.:
var percentLoaded:Number = Math.round((intro_mc.getBytesLoaded() / intro_mc.getBytesTotal()) * 100);

Object-Datentyp
Ein Objekt ist eine Sammlung von Eigenschaften. Eine Eigenschaft ist ein Attribut, das das Objekt beschreibt. Beispielsweise ist die Transparenz eines Objekts (wie eines Movieclips) ein Attribut, das die Darstellungsweise beschreibt. Daher ist _alpha (Transparenz) eine Eigenschaft. Jede Eigenschaft hat einen Namen und einen Wert. Da es sich bei dem Wert einer Eigenschaft um einen beliebigen Flash-Datentyp, also auch um einen Object-Datentyp handeln kann, lassen sich Objekte durch Festlegen ihrer Eigenschaften ineinander verschachteln. Zum Angeben von Objekten und ihren Eigenschaften verwenden Sie den Punkt-Operator (.). Im folgenden Code ist hoursWorked eine Eigenschaft von weeklyStats und dies wiederum eine Eigenschaft von employee:
employee.weeklyStats.hoursWorked

Datentypen

43

Das MovieClip-Objekt in ActionScript verfgt ber Methoden, mit denen Sie MovieclipSymbolinstanzen auf der Bhne steuern knnen. In diesem Beispiel werden die Methoden play() und nextFrame() verwendet:
mcInstanceName.play(); mc2InstanceName.nextFrame();

Sie knnen auch benutzerdefinierte Objekte erstellen, um die Informationen in Ihrer Flash-Anwendung zu strukturieren. Fr die Gestaltung einer interaktiven Anwendung mit ActionScript bentigen Sie die unterschiedlichsten Informationen, zum Beispiel den Namen, das Alter und die Telefonnummer eines Benutzers, die Geschwindigkeit eines Balls, die Namen der Artikel in einem Einkaufswagen, die Anzahl der geladenen Bilder oder die zuletzt gedrckte Taste. Mithilfe selbst definierter Objekte knnen Sie diese Informationen zu Gruppen zusammenfassen, die Skripterstellung vereinfachen und Ihre Skripts wieder verwenden. Im folgenden Beispiel wird ActionScript-Code gezeigt, mit dem benutzerdefinierte Objekte fr die Organisation von Informationen eingesetzt werden. Der Code erstellt ein neues Objekt namens user sowie die drei Eigenschaften name, age und phone, die die String- und Number-Datentypen haben.
var user:Object = new Object(); user.name = "Irving"; user.age = 32; user.phone = "555-1234";

Weitere Informationen finden Sie unter Beispiel: Benutzerdefinierte Klassen schreiben auf Seite 247.

String-Datentyp
Ein String ist eine Zeichenfolge aus Buchstaben, Ziffern und Satzzeichen. Strings stehen in ActionScript-Anweisungen stets in einfachen (') oder doppelten (") Anfhrungszeichen Eine bliche Verwendung von Strings ist die Zuordnung von Strings zu einer Variablen. In der folgenden Anweisung wurde beispielsweise der String "L7" der Variablen favoriteBand_str zugeordnet:
var favoriteBand_str:String = "L7";

Mit dem Additionsoperator (+) lassen sich zwei Strings verketten, d. h. miteinander verbinden. ActionScript behandelt Leerzeichen am Anfang oder Ende eines Strings als tatschlichen Bestandteil der Zeichenfolge. Der folgende Ausdruck enthlt ein Leerzeichen nach dem Komma:
var greeting_str:String = "Welcome, " + firstName;

44

Daten und Datentypen

Wenn Sie ein Anfhrungszeichen in den String selbst einfgen mchten, mssen Sie ihm einen umgekehrten Schrgstrich (\) voranstellen. Die Kombination eines Zeichens mit einem vorangestellten Schrgstrich wird als Escape-Zeichen bezeichnet. Auer dem Anfhrungszeichen knnen noch eine Reihe weiterer Zeichen in ActionScript nur durch ein solches Escape-Zeichen dargestellt werden. Eine vollstndige Liste der in ActionScript verwendeten Escape-Zeichen finden Sie in der folgenden Tabelle:
Escape-Sequenz
\b \f \n \r \t \" \' \\ \000 - \377 \x00 - \xFF \u0000 - \uFFFF

Zeichen
Rckschritt (Backspace, ASCII 8) Seitenvorschub (Form Feed, ASCII 12) Zeilenvorschub (Line Feed, ASCII 10) Wagenrcklauf (Carriage Return, ASCII 13) Tabulator (Tab, ASCII 9) Doppeltes Anfhrungszeichen Einfaches Anfhrungszeichen Umgekehrter Schrgstrich Ein oktaler Byte-Wert Ein hexadezimaler Byte-Wert Ein 16-Bit-Unicode-Zeichen in Hexadezimalschreibweise

Strings sind in ActionScript genauso wie in Java unvernderbar. Vorgnge, die einen String modifizieren, geben einen neuen String zurck. Bei der String-Klasse handelt es sich um eine integrierte ActionScript-Klasse. Informationen zu den Methoden und Eigenschaften der String-Klasse finden Sie unter dem Eintrag String im ActionScript 2.0-Referenzhandbuch.

Datentypen

45

Undefined-Datentyp
Der Undefined-Datentyp hat nur einen Wert, undefined. Dieser Wert wird automatisch Variablen zugewiesen, denen weder durch den Code noch durch eine Benutzereingabe ein Wert zugeordnet wurde. Im Gegensatz zum Wert null wird Variablen oder Eigenschaften der Wert undefined nicht von Ihnen zugewiesen, sondern die Zuweisung erfolgt automatisch. Sie knnen den Undefined-Datentyp verwenden, um zu berprfen, ob eine Variable gesetzt oder definiert ist. Wie Sie im folgenden Beispiel sehen, knnen Sie mit diesem Datentyp Code schreiben, der nur ausgefhrt wird, wenn die Anwendung luft:
if (init == undefined) { trace("initializing app"); init = true; }

Wenn Ihre Anwendung mehrere Bilder verwendet, wird der Code das zweite Mal nicht ausgefhrt, weil die Variable init nicht mehr den Wert undefined hat.

Void-Datentyp
Der Void-Datentyp verfgt ber einen Wert, void. Er wird in Funktionsdefinitionen eingesetzt, um wie im folgenden Beispiel zu zeigen, dass die Funktion keinen Wert zurckgibt:
//Erstellt eine Funktion mit dem Rckgabetyp Void function displayFromURL(url:String):Void {}

Datentypen zuweisen und strikte Datentypisierung


In Flash verwenden Sie Variablen zum Speichern der Werte in Ihrem Code. Bei der Erstellung einer Variablen knnen Sie ihren Objekttyp explizit deklarieren. Dies wird als strikte Datentypisierung bezeichnet. Wenn Sie nicht explizit festlegen, ob ein Element eine Zahl, einen String oder einen anderen Datentyp enthlt, versucht Flash Player zur Laufzeit, den Datentyp eines zugewiesenen Elements zu erkennen. Wenn Sie einer Variablen wie im folgenden Beispiel einen Wert zuordnen, wertet Flash Player zur Laufzeit das Element auf der rechten Seite des Operators aus und stellt fest, dass es sich um den Number-Datentyp handelt:
var x = 3;

46

Daten und Datentypen

Da x nicht mit strikter Typisierung deklariert wurde, kann der Compiler nicht feststellen, um welchen Typ es sich handelt. Fr den Compiler kann die Variable x einen Wert beliebigen Typs annehmen. (Siehe Datentypen zuweisen auf Seite 48.) Durch eine sptere Zuweisung wird der Typ von x mglicherweise gendert. Die Anweisung x = "hallo" ndert den Typ beispielsweise von x in einen String. ActionScript konvertiert Grunddatentypen (wie Boolean, Number, String, Null oder Undefined) immer automatisch, wenn die Umwandlung fr einen Ausdruck erforderlich ist und fr die Variablen keine strikte Typisierung gilt. Die strikte Typisierung bietet zur Kompilierzeit mehrere Vorteile. Durch die Deklarierung von Datentypen (strikte Datentypisierung) knnen Fehler im Code zur Kompilierzeit einfacher diagnostiziert oder ganz vermieden werden. Zum Deklarieren einer Variablen mit der strikten Datentypisierung verwenden Sie das folgende Format:
var variableName:datatype;
H I N WE I S

Die strikte Datentypisierung wird auch als strenge Typisierung einer Variablen bezeichnet.

Bei nicht bereinstimmenden Datentypen werden Compiler-Fehler ausgelst. Durch die strikte Typisierung knnen Sie Fehler in Ihrem Code whrend der Kompilierung leichter finden und es wird verhindert, dass Sie vorhandenen Variablen den falschen Datentyp zuweisen. Whrend des Authorings aktiviert die strikte Typisierung die Codehinweise im ActionScript-Editor. (Sie sollten jedoch weiterhin Instanznamensuffixe fr grafische Elemente verwenden.) Durch die strikte Typisierung wird verhindert, dass Sie einer Variablen versehentlich den falschen Datentyp zuweisen. Zur Kompilierzeit berprft Flash, ob Fehler durch eine nicht bereinstimmende Typisierung vorliegen. Wenn Sie einen falschen Werttyp angegeben haben, wird eine Fehlermeldung eingeblendet. Durch die strikte Typisierung wird deshalb auch vermieden, dass Sie auf Eigenschaften oder Methoden zugreifen, die nicht zum jeweiligen Objekttyp gehren. Bei Verwendung der strikten Datentypisierung zeigt der ActionScriptEditor automatisch Codehinweise fr Objekte an. Weitere Informationen zur Erstellung von Variablen finden Sie unter Variablen auf Seite 53. Informationen zum Benennen von Variablen finden Sie unter Variablen benennen auf Seite 58. Weitere Informationen zum Zuweisen von Datentypen und zu den verfgbaren Datentypen finden Sie unter Datentypen zuweisen auf Seite 48.

Datentypen

47

Ein Beispiel der Datei datatypes.fla, das die Verwendung von Datentypen in einer Anwendung verdeutlicht, finden Sie auf der Webseite mit Flash-Beispielen unter www.adobe.com/go/learn_fl_samples_de. Laden Sie die komprimierte Beispieldatei herunter, dekomprimieren Sie sie, und wechseln Sie in den Ordner ActionScript2.0/DataTypes, um auf das Beispiel zuzugreifen.

Datentypen zuweisen
Datentypen mssen immer beim Definieren einer Variablen zugewiesen werden. Dabei spielt es keine Rolle, ob Sie die Variable mit dem Schlsselwort var deklarieren, ein Funktionsargument erstellen, den Rckgabetyp einer Funktion festlegen oder eine Variable zur Verwendung in einer Schleife for oder for..in festlegen. Zum Zuweisen eines Datentyps verwenden Sie die Doppelpunktsyntax, das heit, auf den Variablennamen folgt ein Doppelpunkt und dann der Datentyp:
var my_mc:MovieClip;

Zahlreiche Datentypen stehen zur Verfgung, darunter die nativen Datentypen wie Number, String und Boolean, sowie die integrierten Klassen von Flash Player 8, wie BitmapData und FileReference. Auerdem knnen Sie oder andere Entwickler benutzerdefinierte Klassen erstellen. Die am hufigsten verwendeten Datentypen sind die integrierten Datentypen, wie Number, String, Boolean, Array und Object. Diese Datentypen werden in den folgenden Codebeispielen gezeigt. Um einem Element einen bestimmten Datentyp zuzuweisen, verwenden Sie wie im folgenden Beispiel das Schlsselwort var und die Doppelpunktsyntax:
// Strikte Variablen- oder Objekttypisierung var myNum:Number = 7; var birthday:Date = new Date(); // strikte Parametertypisierung function welcome(firstName:String, age:Number) { } // strikte Typisierung des Parameters und des Rckgabewerts function square(myNum:Number):Number { var squared:Number = myNum * myNum; return squared; }

48

Daten und Datentypen

Sie knnen den Datentyp von Objekten deklarieren, die auf integrierten Klassen (Button, Date usw.) und auf von Ihnen erstellten Klassen und Schnittstellen basieren. Wenn Sie beispielsweise in der Datei Student.as die Student-Klasse definieren, knnen Sie festlegen, dass von Ihnen erstellte Objekte den Typ Student aufweisen:
var myStudent:Student = new Student();

Angenommen, Sie geben folgenden Code ein:


// in der Student.as-Klassendatei class Student { public var status:Boolean; // Eigenschaft des Student-Objekts } // in der FLA-Datei var studentMaryLago:Student = new Student(); studentMaryLago.status = "enrolled"; /* Typdiskrepanz in Zuweisungsanweisung: String gefunden, aber Boolean ist erforderlich. */

Wenn Flash dieses Skript kompiliert, wird ein Typdiskrepanzfehler erzeugt, weil die SWFDatei einen Booleschen Wert erwartet. Wenn Sie eine Funktion schreiben, die keinen Rckgabetyp hat, knnen Sie fr die Funktion den Rckgabetyp Void angeben. Bei der Erstellung einer Verknpfung fr eine Funktion knnen Sie der neuen Variablen den Function-Datentyp zuweisen. Im folgenden Beispiel wird gezeigt, wie Sie fr Objekte den Function- oder Void-Datentyp festlegen:
function sayHello(name_str:String):Void { trace("Hello, " + name_str); } sayHello("world"); // Hello, world var greeting:Function = sayHello; greeting("Augustus"); // Hello, Augustus

Ein weiterer Vorteil ist, dass Flash automatisch Codehinweise fr integrierte Objekte anzeigt, wenn sie strikt typisiert werden. Weitere Informationen finden Sie unter Datentypen zuweisen und strikte Datentypisierung auf Seite 46. Mit ActionScript 1.0 verffentlichte Dateien befolgen die strikten Typzuweisungen whrend der Kompilierung nicht. Wenn Sie also einer strikt typisierten Variablen einen falschen Werttyp zuweisen, wird kein Compiler-Fehler erzeugt.
var myNum:String = "abc"; myNum = 12; /* Kein Fehler in ActionScript 1.0, aber Typdiskrepanzfehler in ActionScript 2.0 */

Datentypen

49

Der Grund hierfr ist, dass Flash eine Anweisung wie beispielsweise var myNum:String = "abc" beim Verffentlichen einer Datei fr ActionScript 1.0 als Schrgstrichsyntax statt als strikte Typisierung interpretiert. (ActionScript 2.0 untersttzt keine Schrgstrichsyntax.) Dieses Verhalten kann dazu fhren, dass der Compiler durch Objekte, die einer Variablen des falschen Typs zugewiesen sind, ohne Meldung illegale Methodenaufrufe und nicht definierte Verweise auf Eigenschaften durchfhrt. Fr Dateien, die mit ActionScript 2.0 verffentlicht werden, kann wahlweise die Datentypisierung verwendet werden. Wenn Sie die strikte Datentypisierung in Ihrem Code implementieren, sollten Sie deshalb fr die Verffentlichungseinstellungen ActionScript 2.0 whlen. Zum Festlegen der Verffentlichungseinstellungen und zum Definieren der ActionScript-Version, mit der die Dateien verffentlicht werden sollen, whlen Sie im Hauptmen Datei > Einstellungen fr Verffentlichungen, oder klicken Sie im Eigenschafteninspektor auf die Schaltflche Einstellungen (stellen Sie sicher, dass keine Instanzen ausgewhlt sind). Um eine bestimmte Version von ActionScript oder Flash Player anzugeben, klicken Sie im Dialogfeld Einstellungen fr Verffentlichungen auf die Registerkarte Flash, und whlen Sie dann im Popupmen die gewnschte ActionScriptVersion aus. Informationen zur Typberprfung finden Sie unter Typberprfung auf Seite 50.

Typberprfung
Bei der Typberprfung wird geprft, ob der Typ einer Variablen und ein Ausdruck miteinander kompatibel sind. Deshalb berprft Flash, ob der Typ, den Sie fr eine Variable festlegen, zu den Werten passt, die Sie der Variablen zuweisen. Weitere Informationen zur strikten Datentypisierung und zum Zuweisen von Datentypen finden Sie unter Datentypen zuweisen und strikte Datentypisierung auf Seite 46 und Datentypen zuweisen auf Seite 48. Die Typberprfung kann zur Kompilierzeit oder zur Laufzeit erfolgen. Wenn Sie die strikte Datentypisierung verwenden, erfolgt die Typberprfung zur Kompilierzeit. Da ActionScript eine Sprache mit dynamischer Eingabe ist, kann die Typberprfung in ActionScript auch zur Laufzeit ausgefhrt werden.

50

Daten und Datentypen

Im folgenden Code wird beispielsweise kein Datentyp fr den Parameter xParam angegeben. Zur Laufzeit enthlt der Parameter erst einen Wert des Typs Number und dann einen Wert des Typs String. Die Funktion dynamicTest() verwendet dann den Operator typeof, um zu bestimmen, ob der Parameter den Typ String oder Number hat.
function dynamicTest(xParam) { if (typeof(xParam) == "string") { var myStr:String = xParam; trace("String: " + myStr); } else if (typeof(xParam) == "number") { var myNum:Number = xParam; trace("Number: " + myNum); } } dynamicTest(100); dynamicTest("one hundred");

Es ist nicht erforderlich, dem ActionScript-Code explizit Informationen zum Datentyp hinzuzufgen. Der ActionScript-Compiler ermglicht die Verwendung von Eigenschaften sowie den Aufruf von Methoden, die zur Kompilierzeit noch nicht vorhanden sind. So knnen Sie zur Laufzeit Eigenschaften erstellen und Methoden dynamisch zuweisen. Ein Beispiel fr die Flexibilitt der dynamischen Typberprfung ist die Verwendung von Eigenschaften und Methoden, die zur Kompilierzeit noch nicht bekannt sind. Da fr den Code weniger Einschrnkungen gelten, sind bei der Erstellung von Code hufig deutliche Vorteile realisierbar. Im folgenden Beispiel erstellt der Code beispielsweise eine Funktion namens runtimeTest(), die eine Methode aufruft und eine Eigenschaft zurckgibt weder Methode noch Eigenschaft sind dem Compiler bekannt. Zur Kompilierzeit wird kein Fehler generiert, doch wenn die Eigenschaft oder die Methode zur Laufzeit nicht verfgbar ist, wird ein Laufzeitfehler ausgegeben.
function runtimeTest(myParam) { myParam.someMethod(); return myParam.someProperty; }

Datentypen

51

Datentypen ermitteln
Beim Prfen und Debuggen Ihrer Programme stoen Sie mglicherweise auf Probleme, die mit den Datentypen von verschiedenen Elementen zusammenhngen. Wenn Sie Variablen verwenden, denen kein Datentyp explizit zugewiesen ist, kann es hilfreich sein, den Datentyp einer bestimmten Variablen zu kennen. Mithilfe von ActionScript knnen Sie den Datentyp eines Elements ermitteln. Sie knnen den Operator typeof verwenden, um Informationen ber Daten zurckzugeben. Mit dem Operator typeof rufen Sie die Datentypen ab, es werden aber keine Informationen darber zurckgegeben, zu welcher Klasse eine Instanz gehrt. Im folgenden Beispiel wird veranschaulicht, wie Sie mit dem Operator typeof den Objekttyp zurckgeben knnen:
// Neue Instanz der LoadVars-Klasse erstellen. var my_lv:LoadVars = new LoadVars(); /* typeof-Operator gibt keine Klasse an, gibt nur an, dass my_lv ein Objekt ist */ var typeResult:String = typeof(my_lv); trace(typeResult); // Objekt

In diesem Beispiel erstellen Sie eine neue String-Variable namens myName und konvertieren sie dann in den Number-Datentyp:
var myName:String = new String("17"); trace(myName instanceof String); // true var myNumber:Number = new Number(myName); trace(myNumber instanceof Number); // true

Weitere Informationen zu diesen Operatoren finden Sie unter den Eintrgen typeofOperator und instanceof-Operator im ActionScript 2.0-Referenzhandbuch. Weitere Informationen zum Prfen und Debuggen finden Sie in Flash verwenden. Weitere Informationen zur Vererbung und zu Schnittstellen finden Sie in Kapitel 7, Vererbung auf Seite 293. Weitere Informationen zu Klassen finden Sie in Kapitel 6, Klassen auf Seite 205.

52

Daten und Datentypen

Variablen
Eine Variable ist ein Container fr Daten. Der folgende ActionScript-Code zeigt, wie eine Variable in ActionScript aussieht:
var myVariable:Number = 10;

Diese Variable enthlt einen numerischen Wert. Durch :Number im vorherigen Code wird der Typ des Werts zugewiesen, den die Variable enthlt. Dies wird als Datentypisierung bezeichnet. Weitere Informationen zur Datentypisierung finden Sie unter Datentypen zuweisen und strikte Datentypisierung auf Seite 46 und Datentypen zuweisen auf Seite 48. Der Container (dargestellt vom Namen der Variablen) bleibt im gesamten ActionScript-Code gleich, doch der Inhalt (also der Wert) kann sich ndern. Der Wert einer Variablen kann in einem Skript beliebig oft gendert werden. Wenn Sie beim Abspielen einer SWF-Datei den Wert einer Variablen ndern, knnen Sie Informationen ber Benutzeraktionen aufzeichnen und speichern, die nderung von Werten beim Abspielen der SWF-Datei aufzeichnen und feststellen, ob eine bestimmte Bedingung true oder false ist. Mglicherweise muss die Variable beim Abspielen der SWF-Datei kontinuierlich aktualisiert werden. Dies ist beispielsweise der Fall, wenn die Punktezahl in einem Flash-Spiel sich ndert. Variablen sind bei der Erstellung und Verwaltung der Benutzerinteraktion in einer SWF-Datei unerlsslich. Es empfiehlt sich, einer Variablen beim ersten Deklarieren stets einen Wert zuzuweisen. Das Zuweisen eines Ausgangswerts wird als Initialisierung der Variablen bezeichnet. Dieser Ausgangswert wird hufig in Bild 1 der Zeitleiste zugewiesen, oder er stammt aus einer Klasse, die geladen wird, wenn das Abspielen der SWF-Datei gestartet wird. Verschiedene Arten von Variablen stehen zur Verfgung, die vom Gltigkeitsbereich beeinflusst werden. Weitere Informationen zu den verschiedenen Variablenarten und zum Gltigkeitsbereich finden Sie unter Variablen und Gltigkeitsbereiche auf Seite 64.
TIPP H IN W E I S

Die Initialisierung ermglicht es Ihnen, den Wert der Variablen whrend der SWFWiedergabe zu berwachen und nderungen zu erfassen. Flash Player 7 und neuere Versionen werten nicht initialisierte Variablen anders aus als Flash Player 6 und ltere Versionen. Wenn Sie Skripts fr Flash Player 6 geschrieben haben und planen, Skripts fr Flash Player 7 zu schreiben oder zu portieren, sollten Sie diese Unterschiede kennen, um zu vermeiden, dass sich die Skripts nicht wie erwartet verhalten.

Variablen knnen unterschiedliche Datentypen enthalten. Einzelheiten hierzu finden Sie unter Datentypen auf Seite 36. Der Datentyp des Werts einer Variablen bestimmt, wie der Wert sich bei der Zuweisung in einem Skript ndert.

Variablen

53

Zu den am hufigsten in Variablen gespeicherten Informationen gehren URLs (String), Benutzernamen (String), Ergebnisse mathematischer Berechnungen (Number), Ereigniszhler (Number) und Schaltflchenstatus (Boolean). Jede SWF-Datei und jede Objektinstanz (wie ein Movieclip) verfgt ber einen Satz von Variablen, wobei jede Variable unabhngig von den Variablen anderer SWF-Dateien oder Movieclips einen Wert enthlt. Wenn Sie den Wert einer Variablen anzeigen mchten, senden Sie ihn mit der Anweisung trace() an das Bedienfeld Ausgabe. Der Wert wird dann im Bedienfeld Ausgabe angezeigt, wenn Sie die SWF-Datei in der Testumgebung testen. Der Ausdruck trace(hoursWorked) bewirkt beispielsweise, dass der Wert der Variablen hoursWorked in der Testumgebung an das Bedienfeld Ausgabe gesendet wird. Sie knnen die Werte von Variablen auch in der Testumgebung im Debugger berprfen und einstellen. Weitere Informationen zu Variablen finden Sie unter den folgenden Themen:

Variablen deklarieren auf Seite 54 Werte zuweisen auf Seite 55 Variablen benennen auf Seite 58 Variablen in einer Anwendung einsetzen auf Seite 59 Variablen und Gltigkeitsbereiche auf Seite 64 Standardwerte auf Seite 55 Operatoren und Variablen auf Seite 57 Variablen laden auf Seite 69 Variablen in einem Projekt verwenden auf Seite 75

Variablen deklarieren
Variablen knnen in einem Bild der Zeitleiste, direkt in einem Objekt oder innerhalb einer externen Klassendatei deklariert werden. Verwenden Sie zur Definition von Variablen das Schlsselwort var, und beachten Sie die Konventionen zum Benennen von Variablen. Sie knnen eine Variable namens firstName deklarieren, wie im folgenden Beispiel gezeigt:
var firstName:String;

Beim Deklarieren einer Variablen weisen Sie ihr einen Datentyp zu. In diesem Fall weisen Sie der Variablen firstName den String-Datentyp zu. Weitere Informationen zum Zuweisen von Datentypen finden Sie in Datentypen zuweisen und strikte Datentypisierung auf Seite 46.

54

Daten und Datentypen

Standardwerte
Ein Standardwert ist der Wert, den eine Variable enthlt, bevor Sie ihren Wert festlegen. Sie initialisieren eine Variable, wenn Sie ihren Wert zum ersten Mal festlegen. Wenn Sie eine Variable deklarieren, ohne ihren Wert festzulegen, ist die Variable nicht initialisiert. Der Wert einer nicht initialisierten Variablen ist standardmig undefined. Weitere Informationen zur Erstellung und Verwendung von Variablen finden Sie unter Variablen auf Seite 53.

Werte zuweisen
Sie knnen einen Wert als aktuellen Inhalt einer Variablen definieren. Bei Werten kann es sich um Strings, Zahlen, Arrays, Objekte, XML-Objekte, Datumsangaben oder um benutzerdefinierte Klassen handeln. Beachten Sie, dass Variablen in Flash mit dem Schlsselwort var deklariert werden. Beim Deklarieren einer Variablen weisen Sie ihr auch einen Datentyp zu. Sie knnen einer Variablen auch einen Wert zuweisen, der jedoch zu dem Datentyp passen muss, den Sie der Variablen zugewiesen haben. Im folgenden Beispiel wird gezeigt, wie Sie eine Variable namens catName erstellen knnen:
var catName:String;

Nachdem Sie die Variable deklariert haben, knnen Sie ihr einen Wert zuweisen. Auf die vorherige ActionScript-Zeile knnte beispielsweise diese Zeile folgen:
catName = "Pirate Eye";
H IN W E I S

Da Pirate Eye ein String ist, muss der Wert in gerade Anfhrungszeichen eingeschlossen werden.

Im Beispiel wird der Variablen catName der Wert Pirate Eye zugewiesen. Sie knnen einer Variablen schon beim Deklarieren einen Wert zuweisen, anstatt wie im vorherigen Beispiel erst nach dem Deklarieren. Sie knnen die Variable catName beim Deklarieren festlegen, wie im folgenden Beispiel gezeigt:
var catName:String = "Pirate Eye";

Variablen

55

Wenn Sie den Wert der Variablen catName in der Testumgebung anzeigen mchten, knnen Sie die Anweisung trace() verwenden. Mit dieser Anweisung wird der Wert an das Bedienfeld Ausgabe gesendet. Wenn Sie den Wert der Variablen catName anzeigen, sehen Sie, dass der Wert die Anfhrungszeichen nicht enthlt. Verwenden Sie dazu den folgenden ActionScript-Code:
var catName:String = "Pirate Eye"; trace(catName); // Pirate Eye

Beachten Sie, dass der zugewiesene Wert zu dem jeweiligen Datentyp passen muss (in diesem Fall String). Wenn Sie spter versuchen, der Variablen catName eine Zahl zuzuweisen, wie beispielsweise catName = 10, wird beim Testen der SWF-Datei der folgende Fehler im Bedienfeld Ausgabe eingeblendet:
Type mismatch in assignment statement: found Number where String is required.

In diesem Fehler werden Sie darauf hingewiesen, dass Sie fr eine angegebene Variable den falschen Datentyp festgelegt haben. Wenn Sie einer Variablen einen numerischen Wert zuweisen, sind die Anfhrungszeichen nicht erforderlich, wie im folgenden Code gezeigt:
var numWrinkles:Number = 55;

Wenn Sie den Wert von numWrinkles spter im Code ndern mchten, knnen Sie mit dem folgenden ActionScript-Code einen neuen Wert zuweisen:
numWrinkles = 60;

Wenn Sie einer vorhandenen Variablen einen neuen Wert zuweisen mchten, mssen Sie weder das Schlsselwort var verwenden noch den Datentyp der Variablen definieren (in diesem Beispiel :Number). Ist der Wert numerisch oder Boolesch (true oder false), werden fr den Wert keine geraden Anfhrungszeichen verwendet. Numerische und Boolesche Werte werden im folgenden Codebeispiel gezeigt:
var age:Number = 38; var married:Boolean = true; var hasChildren:Boolean = false;

Im vorherigen Beispiel enthlt die Variable age eine (nichtdezimale) Ganzzahl, aber Sie knnten auch einen Dezimal- oder Gleitkommawert verwenden, wie 38,4. Fr Boolesche Variablen (wie married oder hasChildren) sind nur zwei Werte mglich, und zwar true oder false. Wenn Sie ein Array erstellen und ihm Werte zuweisen mchten, ist das Format etwas unterschiedlich, wie im folgenden Code gezeigt:
var childrenArr:Array = new Array("Pylon", "Smithers", "Gil");

56

Daten und Datentypen

Zur Erstellung eines Arrays ist eine verkrzte Alternativsyntax mit Array-Zugriffsoperatoren verfgbar, fr die eckige Klammern ([]) verwendet werden. Der Code im vorherigen Beispiel kann auch folgendermaen geschrieben werden:
var childrenArr:Array = ["Pylon", "Smithers", "Gil"];

Weitere Informationen zum Erstellen von Arrays und zu den Array-Zugriffsoperatoren finden Sie unter Arrays auf Seite 137 und Mit der Punktsyntax auf Instanzen verweisen auf Seite 89. Auf hnliche Weise knnen Sie ein neues Objekt namens myObj erstellen. Ein neues Objekt kann mit einem der folgenden Verfahren erstellt werden. Das erste und zeitaufwndigere Verfahren zur Array-Kodierung wird im Folgenden gezeigt:
var myObj:Object = new Object(); myObj.firstName = "Steve"; myObj.age = 50; myObj.childrenArr = new Array("Mike", "Robbie", "Chip");

Beim zweiten, schnelleren Verfahren sieht der Code fr das Array myObj folgendermaen aus:
var myObj:Object = {firstName:"Steve", age:50, childrenArr:["Mike", "Robbie", "Chip"]};

Wie aus dem Beispiel ersichtlich ist, knnen Sie mit dem Alternativverfahren viel Zeit und Arbeit sparen, besonders dann, wenn Sie Objektinstanzen definieren. Sie sollten mit dieser Alternativsyntax vertraut sein, da sie nicht nur bei der Arbeit in Teams eingesetzt wird, sondern auch in ActionScript-Code von Drittanbietern, der beispielsweise im Internet oder in Fachbchern verfgbar ist.
H I NW E I S

Nicht alle Variablen mssen explizit definiert werden. Einige Variablen werden in Flash automatisch erstellt. Um beispielsweise die Abmessungen der Bhne zu ermitteln, knnten Sie die Werte der beiden folgenden vordefinierten Variablen verwenden: Stage.width und Stage.height.

Operatoren und Variablen


Wie Sie vermutlich bereits festgestellt haben, enthlt der Code mathematische Symbole. Diese Symbole werden in ActionScript als Operatoren bezeichnet. Operatoren berechnen ausgehend von einem oder mehreren Werten einen neuen Wert. Sie verwenden einen Operator, um einer Variablen in Ihrem Code einen Wert zuzuweisen. Verwenden Sie den Gleichheitsoperator (=), um einer Variablen einen Wert zuzuweisen:
var username:String = "Gus";

Variablen

57

Ein weiteres Beispiel ist der Additionsoperator (+), mit dem Sie mindestens zwei numerische Werte addieren, um einen neuen Wert zu bilden. Wenn Sie den Additionsoperator fr zwei oder mehr Stringwerte verwenden, werden die Strings verkettet. Die Werte, auf die ein Operator angewendet wird, werden als Operanden bezeichnet. Beim Zuweisen eines Werts verwenden Sie einen Operator, um einen Wert fr eine Variable zu definieren. Im folgenden Skript wird beispielsweise der Zuweisungsoperator verwendet, um der Variablen numChildren den Wert 7 zuzuweisen:
var numChildren:Number = 7;

Wenn Sie den Wert der Variablen numChildren ndern mchten, verwenden Sie den folgenden Code:
numChildren = 8;
H I N WE I S

Die Verwendung von var ist nicht erforderlich, da die Variable bereits definiert wurde.

Weitere Informationen zur Verwendung von Operatoren im ActionScript-Code finden Sie unter Operatoren auf Seite 151.

Variablen benennen
Obwohl Sie einer Variablen praktisch jeden Namen zuweisen knnen, gelten einige Namenskonventionen. Der Name einer Variablen muss folgende Bedingungen erfllen: Die Variable muss ein Bezeichner sein.
H I NW E I S 58

Bezeichner sind die Namen von Variablen, Eigenschaften, Objekten, Funktionen oder Methoden. Diese Namen mssen mit einem Buchstaben, einem Unterstrich (_) oder einem Dollarzeichen ($) beginnen, drfen ansonsten jedoch neben diesen Zeichen auch Ziffern enthalten.

Bei einer Variablen darf es sich nicht um ein Schlsselwort oder ein ActionScript-Literal wie true, false, null oder undefined handeln. Weitere Informationen zu Literalen finden Sie unter Literale auf Seite 103. Eine Variable muss innerhalb ihres Gltigkeitsbereichs eindeutig sein (siehe Variablen und Gltigkeitsbereiche auf Seite 64). Eine Variable darf kein Element der ActionScript-Sprache sein, wie beispielsweise ein Klassenname.

Daten und Datentypen

Wenn Sie diese Regeln beim Benennen einer Variablen nicht beachten, knnen Syntaxfehler oder unerwartete Ergebnisse auftreten. Wenn Sie im folgenden Beispiel eine Variable new nennen und dann das Dokument testen, gibt Flash einen Compiler-Fehler aus:
// Dieser Code wird wie erwartet ausgefhrt. var helloStr:String = new String(); trace(helloStr.length); // 0 // Aber wenn Sie einer Variablen denselben Namen wie einer integrierten // Klasse geben... var new:String = "hello"; // Fehler: Bezeichner erwartet var helloStr:String = new String(); trace(helloStr.length); // undefined

Der ActionScript-Editor untersttzt Codehinweise fr integrierte Klassen und fr Variablen, die auf diesen Klassen basieren. Wenn Flash Codehinweise fr einen bestimmten Objekttyp bereitstellen soll, der einer Variablen zugewiesen ist, knnen Sie die Variable strikt typisieren. Codehinweise helfen Ihnen dabei, Ihren Code schnell zu erstellen. Sie bestehen aus Syntaxtipps in Form von Quickinfo sowie aus einem Popupmen. Geben Sie beispielsweise den folgenden Code ein:
var members:Array = new Array(); members.

Sobald Sie den Punkt (.) in das Bedienfeld Aktionen eingeben, zeigt Flash eine Liste der Methoden und Eigenschaften an, die fr Array-Objekte verfgbar sind. Empfohlene Kodierungskonventionen fr das Benennen von Variablen finden Sie unter Variablen benennen auf Seite 748.

Variablen in einer Anwendung einsetzen


In diesem Abschnitt werden Sie Variablen in kurzen ActionScript-Codebeispielen verwenden. Eine Variable muss im Skript deklariert und initialisiert werden, bevor Sie sie in einem Ausdruck verwenden knnen. Ausdrcke sind eine Kombination aus Operanden und Operatoren, die einen Wert darstellen. Im Ausdruck i+2 sind i und 2 beispielsweise Operanden, whrend es sich bei + um einen Operator handelt. Wenn Sie eine Variable vor der Verwendung in einem Ausdruck nicht initialisieren, ist die Variable nicht definiert, was zu unerwarteten Ergebnissen fhren kann. Weitere Informationen zum Schreiben von Ausdrcken finden Sie in Kapitel 4, Syntax- und Sprachgrundlagen auf Seite 83.

Variablen

59

Bei nicht definierten Variablen ist wie im folgenden Beispiel der Variablenwert in Flash Player 7 oder hher NaN, und das Skript kann unter Umstnden unerwartete Ergebnisse liefern:
var squared:Number = myNum * myNum; trace(squared); // NaN var myNum:Number = 6;

Im folgenden Beispiel muss die Anweisung, mit der die Variable myNum deklariert und initialisiert wird, an erster Stelle stehen, damit squared durch einen Wert ersetzt werden kann:
var myNum:Number = 6; var squared:Number = myNum * myNum; trace(squared); // 36

Ein hnliches Verhalten tritt auf, wenn Sie eine nicht definierte Variable an eine Methode oder Funktion bergeben, wie im Folgenden gezeigt.
So vergleichen Sie nicht definierte und definierte Variablen, die an eine Funktion bergeben werden:
1. 2. 3.

Ziehen Sie eine Button-Komponente aus dem Bedienfeld Komponenten auf die Bhne. Geben Sie im Eigenschafteninspektor im Textfeld Instanzname den Text bad_button ein. Geben Sie in Bild 1 der Zeitleiste den folgenden Code ein:
// Funktioniert nicht function badClickListener(evt:Object):Void { getURL(targetUrl); var targetUrl:String = "http://www.adobe.com"; } bad_button.addEventListener("click", badClickListener);

4.

Whlen Sie Steuerung > Film testen. Sie sehen, dass die Schaltflche nicht funktioniert, da die Webseite nicht geffnet wird. Ziehen Sie eine weitere Button-Komponente auf die Bhne. Whlen Sie die Schaltflche aus. Geben Sie im Eigenschafteninspektor im Textfeld Instanzname den Text good_button ein. Fgen Sie den folgenden ActionScript-Code in Bild 1 der Zeitleiste ein (im Anschluss an den bereits hinzugefgten ActionScript-Code):
// Funktioniert function goodClickListener(evt:Object):Void { var targetUrl:String = "http://www.adobe.com"; getURL(targetUrl); } good_button.addEventListener("click", goodClickListener);

5.

6.

7.

60

Daten und Datentypen

8.

Whlen Sie Steuerung > Film testen, und klicken Sie auf die zweite Schaltflche, die Sie der Bhne hinzugefgt haben. Durch Klicken auf die Schaltflche wird die Webseite geffnet.

Der Datentyp einer Variablen wirkt sich darauf aus, wann und wie der Wert der Variablen sich ndert. Grunddatentypen wie Strings und Zahlen werden nach Wert bergeben, es wird also der aktuelle Wert der Variablen verwendet, nicht ein Verweis auf den Wert. Zu den komplexen Datentypen zhlen Array und Object. Im folgenden Beispiel stellen Sie myNum auf 15 ein und kopieren den Wert in otherNum. Wenn Sie myNum in 30 ndern (in Codezeile 3), bleibt der Wert von otherNum unverndert 15, da die Variable otherNum ihren Wert nicht von myNum erhlt. Die Variable otherNum enthlt den Wert von myNum, den sie in Codezeile 2 erhlt.
So verwenden Sie Variablen im ActionScript-Code:
1.

Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen var_example.fla. Whlen Sie das erste Bild in der Zeitleiste aus, und geben Sie im Bedienfeld Aktionen den folgenden Code ein:
var myNum:Number = 15; var otherNum:Number = myNum; myNum = 30; trace(myNum); // 30 trace(otherNum); // 15

2.

Wenn Sie myNum in 30 ndern (in Codezeile 3), bleibt der Wert von otherNum unverndert 15, da die Variable otherNum ihren Wert nicht von myNum erhlt. Die Variable otherNum enthlt den Wert von myNum, den sie in Codezeile 2 erhlt. 3. Whlen Sie Steuerung > Film testen, damit die Werte im Bedienfeld Ausgabe angezeigt werden.
4.

Geben Sie nun nach dem Code, den Sie in Schritt 2 hinzugefgt haben, den folgenden ActionScript-Code ein:
function sqr(myNum:Number):Number { myNum *= myNum; return myNum; } var inValue:Number = 3; var outValue:Number = sqr(inValue); trace(inValue); // 3 trace(outValue); // 9

In diesem Codebeispiel enthlt die Variable inValue den Grundwert 3. Deshalb wird der Wert an die Funktion sqr() bergeben, und der zurckgegebene Wert lautet 9. Der Wert der Variablen inValue ndert sich nicht, obwohl sich der Wert von myNum in der Funktion ndert.
Variablen 61

5.

Whlen Sie Steuerung > Film testen, damit die Werte im Bedienfeld Ausgabe angezeigt werden.

Der Object-Datentyp kann derart viele komplexe Informationen enthalten, dass eine Variable dieses Typs nicht den eigentlichen Wert, sondern einen Verweis auf einen Wert enthlt. Dieser Verweis dient sozusagen als Platzhalter fr den tatschlichen Inhalt der Variablen. Wenn die Variable ihren Wert bentigt, fragt der Verweis den Inhalt der Variablen ab und gibt ihn zurck, ohne den Wert an die Variable selbst zu bertragen. Informationen zum bergeben von Variablen ber einen Verweis finden Sie unter Variablen ber einen Verweis bergeben auf Seite 62.

Variablen ber einen Verweis bergeben


Die Array- und Object-Datentypen enthalten anstelle eines tatschlichen Werts einen Verweis auf einen Wert. Deshalb mssen Sie bei der Arbeit mit diesen Datentypen sorgfltig vorgehen. Im folgenden Beispiel wird gezeigt, wie ein Objekt nach einem Verweis bergeben wird. Bei der Erstellung einer Array-Kopie erstellen Sie im Grunde genommen nur eine Kopie des Verweises auf den Inhalt des Arrays (ein Alias). Wenn Sie den Inhalt des zweiten Arrays bearbeiten, ndern Sie den Inhalt des ersten und des zweiten Arrays, da beide auf denselben Wert verweisen.
So bergeben Sie ein Objekt ber einen Verweis:
1.

Whlen Sie Datei > Neu > Flash-Dokument, um eine neue FLA-Datei zu erstellen, und speichern Sie sie unter dem Namen copybyref.fla. Whlen Sie das erste Bild in der Zeitleiste aus, und geben Sie im Bedienfeld Aktionen den folgenden Code ein:
var myArray:Array = new Array("tom", "josie"); var newArray:Array = myArray; myArray[1] = "jack"; trace(myArray); // tom,jack trace(newArray); // tom,jack

2.

62

Daten und Datentypen

3.

Whlen Sie Steuerung > Film testen, um den ActionScript-Code zu testen. Dieser ActionScript-Code erzeugt ein Array-Objekt namens myArray, das zwei Elemente enthlt. Sie erstellen die Variable newArray und bergeben einen Verweis an myArray. Wenn das zweite Element von myArray in jack gendert wird, wirkt sich dies auf alle Variablen aus, die einen Verweis auf dieses Array enthalten. Die Anweisung trace() sendet tom,jack an das Bedienfeld Ausgabe.
HINWEIS

Flash verwendet einen von Null ausgehenden Index, 0 ist also das erste Element im Array, 1 ist das zweite Element usw.

Im folgenden Beispiel enthlt myArray ein Array-Objekt. Deshalb bergeben Sie das Array ber einen Verweis an die Funktion zeroArray(). Die Funktion zeroArray() erhlt als Parameter ein Array-Objekt und setzt alle Elemente des Arrays auf 0. Sie kann das Array modifizieren, weil das Array ber einen Verweis an sie bergeben wird.
So bergeben Sie ein Array ber einen Verweis:
1.

Whlen Sie Datei > Neu > Flash-Dokument, um eine neue FLA-Datei zu erstellen, und speichern Sie sie unter dem Namen arraybyref.fla. Fgen Sie Bild 1 der Zeitleiste den folgenden ActionScript-Code hinzu:
function zeroArray (theArr:Array):Void { var i:Number; for (i = 0; i < theArr.length; i++) { theArr[i] = 0; } } var myArr:Array = new Array(); myArr[0] = 1; myArr[1] = 2; myArr[2] = 3; trace(myArr); // 1,2,3 zeroArray(myArr); trace(myArr); // 0,0,0

2.

Variablen

63

3.

Whlen Sie Steuerung > Film testen, um den ActionScript-Code zu testen. Die erste Anweisung trace() in diesem ActionScript-Code zeigt den ursprnglichen Inhalt des Arrays myArray an (1,2,3). Nachdem Sie die Funktion zeroArray() aufrufen und einen Verweis an das Array myArray bergeben, werden alle Werte des Arrays berschrieben und auf Null gesetzt. Die folgende Anweisung trace() zeigt den neuen Inhalt des Arrays myArray an (0,0,0). Da Sie das Array ber einen Verweis und nicht nach einem Wert bergeben, ist es nicht erforderlich, den aktualisierten Inhalt des Arrays von der Funktion zeroArray() aus zurckzugeben.

Weitere Informationen zu Arrays finden Sie unter Arrays auf Seite 137.

Variablen und Gltigkeitsbereiche


Der Gltigkeitsbereich einer Variablen ist der Bereich, innerhalb dessen sie erkannt werden kann (definiert ist). Er bestimmt auch, in welchem Bereich auf die Variable verwiesen werden kann. Der Gltigkeitsbereich einer Variablen kann beispielsweise eine bestimmte Zeitleiste oder eine Funktion sein, oder die Variable kann global in der ganzen Anwendung bekannt sein. Weitere Informationen zum Gltigkeitsbereich finden Sie unter Gltigkeitsbereich und Verweise auf Seite 94. Bei der Entwicklung von Flash-Anwendungen mit ActionScript ist ein gutes Verstndnis des Gltigkeitsbereichs wichtig. Der Gltigkeitsbereich bestimmt nicht nur, wo und wann Sie auf Variablen verweisen knnen, sondern auch, wie lange eine bestimmte Variable in einer Anwendung vorhanden ist. Wenn Sie Variablen im Hauptteil einer Funktion definieren, existieren die Variablen nur so lange, bis die angegebene Funktion beendet ist. Wenn Sie auf Objekte im falschen Gltigkeitsbereich verweisen oder auf Variablen, deren Gltigkeit abgelaufen ist, treten Fehler im Flash-Dokument auf. Dies kann zu einem unerwarteten Verhalten oder zu einer fehlerhaften Funktionsweise fhren. ActionScript kennt drei verschiedene Gltigkeitsbereiche fr Variablen:

Globale Variablen und Funktionen sind in allen Zeitleisten und Gltigkeitsbereichen in Ihrem Dokument sichtbar. Deshalb ist eine globale Variable in allen Codebereichen definiert. Zeitleistenvariablen sind fr alle Skripts auf der Zeitleiste verfgbar. Lokale Variablen sind im Hauptteil der Funktion verfgbar, in der sie deklariert sind (innerhalb des von den geschweiften Klammern begrenzten Abschnitts). Deshalb sind lokale Variablen nur in einem bestimmten Teil des Codes definiert.

64

Daten und Datentypen

Richtlinien zur Verwendung von Gltigkeitsbereichen und Variablen finden Sie in Kapitel 4, Gltigkeitsbereich und Verweise auf Seite 94.
HINWEIS

Benutzerdefinierte ActionScript 2.0-Klassen untersttzen ffentliche, private und statische Gltigkeitsbereiche fr Variablen. Weitere Informationen hierzu finden Sie unter Klassenmitglieder auf Seite 233 und Mitgliedszugriff in Klassen steuern auf Seite 259.

Globale Variablen knnen nicht strikt typisiert werden. Weitere Informationen hierzu finden Sie unter Globale Variablen auf Seite 65. Hier wird auch beschrieben, wie Sie diese Einschrnkung umgehen knnen.

Globale Variablen
Globale Variablen und Funktionen sind in allen Zeitleisten und Gltigkeitsbereichen in Ihrem Dokument sichtbar. Zum Deklarieren (oder Erstellen) einer Variablen mit einem globalen Gltigkeitsbereich fgen Sie den Bezeichner _global vor dem Variablennamen ein. Verwenden Sie nicht die Syntax var =. Der folgende Code erstellt beispielsweise die globale Variable myName:
var _global.myName = "George"; // Falsche Syntax fr globale Variable _global.myName = "George"; // Richtige Syntax fr globale Variable

Wenn Sie jedoch eine lokale Variable mit demselben Namen wie eine globale Variable initialisieren, haben Sie keinen Zugriff auf die globale Variable, wenn Sie sich im Gltigkeitsbereich der lokalen Variablen befinden, wie im folgenden Beispiel gezeigt:
_global.counter = 100; // Deklariert globale Variable trace(counter); // Greift auf globale Variable zu und zeigt 100 an function count():Void { for (var counter:Number = 0; counter <= 2; counter++) { // Lokale Variable trace(counter); // Greift auf lokale Variable zu und zeigt 0 bis 2 an } } count(); trace(counter); // Greift auf globale Variable zu und zeigt 100 an

In diesem Beispiel wird gezeigt, dass im Gltigkeitsbereich der Funktion count() nicht auf die globale Variable zugegriffen wird. Sie knnten jedoch auf die Variable mit globalem Gltigkeitsbereich zugreifen, wenn Sie ihr das Prfix _global voranstellen. Beispielsweise knnten Sie auf die Variable zugreifen, wenn Sie dem Zhler _global voranstellen, wie im folgenden Codebeispiel gezeigt:
trace(_global.counter);

Variablen

65

Sie knnen den Variablen, die Sie im Gltigkeitsbereich _global erstellen, keine strikten Datentypen zuweisen, da Sie zum Zuweisen eines Datentyps das Schlsselwort var verwenden mssen. Folgendes ist beispielsweise nicht mglich:
_global.foo:String = "foo"; // Syntaxfehler var _global.foo:String = "foo"; // Syntaxfehler

Flash Player Version 7 und neuere Security Sandbox-Versionen erzwingen Einschrnkungen, wenn ber SWF-Dateien, die aus anderen Sicherheitsdomnen geladen werden, auf globale Variablen zugegriffen wird. Weitere Informationen finden Sie unter Kapitel 16, Sicherheit auf Seite 701.

Zeitleistenvariablen
Zeitleistenvariablen sind fr alle Skripts auf der jeweiligen Zeitleiste verfgbar. Um eine Zeitleistenvariable zu deklarieren, verwenden Sie die Anweisung var, und initialisieren Sie die Variable in einem beliebigen Bild der Zeitleiste. Die Variable ist dann in diesem Bild und allen folgenden Bildern verfgbar, wie im nchsten Beispiel gezeigt.
So verwenden Sie Zeitleistenvariablen in einem Dokument:
1. 2.

Erstellen Sie ein neues Flash-Dokument, und nennen Sie es timelinevar.fla. Fgen Sie Bild 1 der Zeitleiste den folgenden ActionScript-Code hinzu:
var myNum:Number = 15; /* In Bild 1 initialisiert, deshalb in allen Bildern verfgbar */

3. 4. 5.

Whlen Sie Bild 20 der Zeitleiste aus. Whlen Sie Einfgen > Zeitleiste > Leeres Schlsselbild. Whlen Sie das neue Schlsselbild aus, und geben Sie den folgenden ActionScript-Code in das Bedienfeld Aktionen ein.
trace(myNum);

6.

Whlen Sie Steuerung > Film testen, um das neue Dokument zu testen. Nach ungefhr einer Sekunde wird der Wert 15 im Bedienfeld Ausgabe angezeigt. Da Flash-Dokumente standardmig wiederholt wiedergegeben werden, erscheint der Wert 15 immer im Bedienfeld Ausgabe, wenn der Abspielkopf Bild 20 in der Zeitleiste erreicht. Um die wiederholte Wiedergabe zu stoppen, fgen Sie stop(); nach der Anweisung trace() hinzu.

Sie mssen die Zeitleistenvariable deklarieren, bevor Sie in einem Skript darauf zugreifen knnen. Wenn Sie beispielsweise den Code var myNum:Number = 15; in Bild 20 einfgen, knnen Skripts, die sich vor Bild 20 befinden, nicht auf myNum zugreifen. Sie sind undefiniert und enthalten deshalb nicht den Wert 15.

66

Daten und Datentypen

Lokale Variablen
Wenn Sie die Anweisung var innerhalb eines Funktionsblocks verwenden, deklarieren Sie lokale Variablen. Eine lokale Variable, die in einem Funktionsblock deklariert ist (auch als Funktionsdefinition bezeichnet), ist innerhalb des Gltigkeitsbereichs des Funktionsblocks definiert und ist deshalb nach dem Ende des Funktionsblocks nicht mehr gltig. Die lokale Variable existiert also nur innerhalb dieser Funktion. Wenn Sie beispielsweise eine Variable namens myStr innerhalb der Funktion localScope deklarieren, steht diese Variable auerhalb der Funktion nicht zur Verfgung.
function localScope():Void { var myStr:String = "local"; } localScope(); trace(myStr); // Nicht definiert, da myStr nicht global definiert ist

Wenn der Name der lokalen Variablen bereits als Zeitleistenvariable deklariert ist, hat die lokale Definition Vorrang vor der Zeitleistendefinition, solange die lokale Variable sich im Gltigkeitsbereich befindet. Die Zeitleistenvariable existiert nach wie vor auerhalb der Funktion. Der folgende Code erstellt beispielsweise eine Zeitleisten-Stringvariable namens str1 und dann eine lokale Variable mit demselben Namen innerhalb der Funktion scopeTest(). Die Anweisung trace innerhalb der Funktion generiert die lokale Definition der Variablen, und die Anweisung trace auerhalb der Funktion generiert die Zeitleistendefinition der Variablen.
var str1:String = "Timeline"; function scopeTest():Void { var str1:String = "Local"; trace(str1); // Lokal } scopeTest(); trace(str1); // Zeitleiste

Im nchsten Beispiel wird veranschaulicht, dass bestimmte Variablen nur innerhalb einer bestimmten Funktion existieren und dass Fehler entstehen, wenn Sie auerhalb des Gltigkeitsbereichs der Funktion auf diese Variablen verweisen.

Variablen

67

So verwenden Sie lokale Variablen in einer Anwendung:


1. 2.

Erstellen Sie ein neues Flash-Dokument. ffnen Sie das Bedienfeld Aktionen (Fenster > Aktionen), und geben Sie in Bild 1 der Zeitleiste den folgenden ActionScript-Code ein:
function sayHello(nameStr:String):Void { var greetingStr:String = "Hello, " + nameStr; trace(greetingStr); } sayHello("world"); // Hello, world trace(nameStr); // undefined trace(greetingStr); // nicht definiert

3.

Whlen Sie Steuerung > Film testen, um das Dokument zu testen. Flash zeigt den String Hello, world im Bedienfeld Ausgabe an. Fr die Werte von nameStr und greetingStr wird undefined angezeigt, da die Variablen im aktuellen Gltigkeitsbereich nicht mehr verfgbar sind. Auf nameStr und greetingStr kann nur bei der Ausfhrung der Funktion sayHello verwiesen werden. Sobald die Funktion beendet wird, existieren die Variablen nicht mehr.

Die Variablen i und j werden hufig als Schleifenzhler verwendet. Im folgenden Code wird i als lokale Variable verwendet, die nur innerhalb der Funktion initArray() existiert:
var myArr:Array = new Array(); function initArray(arrayLength:Number):Void { var i:Number; for(i = 0; i < arrayLength; i++) { myArr[i] = i + 1; } } trace(myArr); // <leer> initArray(3); trace(myArr); // 1,2,3 trace(i); // undefined
H I NW E I S 68

Fr eine for-Schleife wird hufig auch folgende Syntax verwendet: for (var i:Number = 0; i < arrayLength; i++) {...}.

In diesem Beispiel wird undefined in der Flash-Testumgebung angezeigt, da die Variable i nicht auf der Hauptzeitleiste definiert ist, sondern nur in der Funktion initArray() existiert.

Daten und Datentypen

Die Verwendung lokaler Variablen trgt auch dazu bei, Namenskonflikte zu vermeiden, die zu unerwarteten Ergebnissen in Ihrer Anwendung fhren knnen. Wenn Sie beispielsweise age als lokale Variable verwenden, knnen Sie in einem bestimmten Kontext das Alter einer Person in dieser Variablen speichern und in einem anderen Kontext das Alter einer anderen Person. In diesem Fall tritt kein Konflikt auf, da die Variablen in unterschiedlichen Gltigkeitsbereichen verwendet werden. Es empfiehlt sich, lokale Variablen im Hauptteil einer Funktion zu verwenden, damit die Funktion als in sich abgeschlossener Code verfgbar ist. Eine lokale Variable kann nur innerhalb ihres eigenen Codeblocks gendert werden. Wenn ein Ausdruck in einer Funktion eine globale Variable enthlt, kann deren Wert auch durch Code oder Ereignisse auerhalb dieser Funktion gendert werden, was sich wiederum auf die Funktion selbst auswirkt. Sie knnen einer lokalen Variablen bei der Deklaration einen Datentyp zuweisen, wodurch verhindert wird, dass Sie vorhandenen Variablen den falschen Datentyp zuweisen. Weitere Informationen finden Sie unter Datentypen zuweisen und strikte Datentypisierung auf Seite 46.

Variablen laden
In den folgenden Abschnitten laden Sie Variablen mit verschiedenen Verfahren vom Server oder von einem URL-String oder FlashVars in den HTML-Code Ihres Dokuments (mit FlashVars knnen Variablen an Flash bergeben werden). Diese Beispiele zeigen, dass es verschiedene Mglichkeiten zur Verwendung von Variablen auerhalb einer SWF-Datei gibt. Weitere Informationen zum Laden von Variablen (wie Name-Wert-Paare) finden Sie in Kapitel 15, Mit externen Daten arbeiten auf Seite 655. Je nach dem Verwendungszweck einer Variablen knnen Sie sie auf verschiedene Weise in einer SWF-Datei einsetzen. Weitere Informationen finden Sie unter den folgenden Themen:

Variablen von URLs verwenden auf Seite 70 FlashVars in einer Anwendung einsetzen auf Seite 73 Variablen von einem Server laden auf Seite 74

Variablen

69

Variablen von URLs verwenden


Bei der Entwicklung einer Anwendung oder eines einfachen Beispiels in Flash knnen Sie Werte von einer HTML-Seite an das Flash-Dokument bergeben. Die bergebenen Werte werden auch als Abfragestring oder URL-kodierte Variablen bezeichnet. URL-Variablen sind beispielsweise dann ntzlich, wenn Sie in Flash ein Men erstellen mchten. Sie knnen das Men so initialisieren, dass standardmig die korrekte Navigation angezeigt wird. Oder Sie knnen in Flash einen Bildanzeigebereich erstellen und ein Bild definieren, das standardmig auf der Website angezeigt wird.
So verwenden Sie URL-Variablen in einem Dokument:
1. 2. 3.

Erstellen Sie ein Flash-Dokument, und nennen Sie es urlvariables.fla. Whlen Sie Datei > Speichern unter, und speichern Sie das Dokument auf dem Desktop. Whlen Sie das erste Bild in der Zeitleiste aus, und geben Sie im Bedienfeld Aktionen den folgenden Code ein:
this.createTextField("myTxt", 100, 0, 0, 100, 20); myTxt.autoSize = "left"; myTxt.text = _level0.myURL;

4.

Whlen Sie Steuerung > Film testen, um die SWF-Datei in Flash Player zu testen. Im Textfeld wird undefined angezeigt. Wenn Sie zunchst sicherstellen mchten, dass die Variablen richtig definiert sind, mssen Sie berprfen, ob die Variablen in Flash vorhanden sind. Dazu berprfen Sie, ob die Variablen undefined sind.

5.

Um festzustellen, ob eine Variable definiert ist, ndern Sie den ActionScript-Code, den Sie in Schritt 3 im Bedienfeld Aktionen hinzugefgt haben, folgendermaen: Fgen Sie den Code hinzu, der in Fettdruck angezeigt wird:
this.createTextField("myTxt", 100, 0, 0, 100, 20); myTxt.autoSize = "left"; if (_level0.myURL == undefined) { myTxt.text = "myURL is not defined"; } else { myTxt.text = _level0.myURL; }

Wenn Sie das Flash-Dokument verffentlichen, wird standardmig ein HTML-Dokument in dem Verzeichnis erstellt, in dem sich die SWF-Datei befindet. Wenn keine HTML-Datei erstellt wurde, whlen Sie Datei > Einstellungen fr Verffentlichungen, und whlen Sie auf der Registerkarte Formate die Option HTML aus. Verffentlichen Sie das Dokument dann noch einmal.

70

Daten und Datentypen

Im Folgenden wird der HTML-Code im Dokument gezeigt, mit dem das FlashDokument in einer HTML-Seite eingebettet wird. Dieser HTML-Code veranschaulicht, wie URL-Variablen im folgenden Schritt funktionieren (beim Hinzufgen von zustzlichem Code fr URL-Variablen).
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.adobe.com/pub/shockwave/cabs/flash/ //swflash.cab#version=8,0,0,0" width="550" height="400" //id="urlvariables" align="middle"> <param name="allowScriptAccess" value="sameDomain" /> <param name="movie" value="urlvariables.swf" /> <param name="quality" value="high" /> <param name="bgcolor" value="#ffffff" /> <embed src="urlvariables.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="urlvariables" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" /> </object> 6.

Um Variablen vom erstellten HTML-Dokument an das Flash-Dokument zu bergeben, knnen Sie Variablen nach dem Pfad und dem Dateinamen bergeben (urlvariables.swf). Fgen Sie den fett gedruckten Text der HTML-Datei hinzu, die auf dem Desktop gespeichert ist.
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.adobe.com/pub/shockwave/cabs/flash/ //swflash.cab#version=8,0,0,0" width="550" height="400" //id="urlvariables" align="middle"> <param name="allowScriptAccess" value="sameDomain" /> <param name="movie" value="urlvariables.swf?myURL=http:// weblogs.macromedia.com" /> <param name="quality" value="high" /> <param name="bgcolor" value="#ffffff" /> <embed src="urlvariables.swf?myURL=http://weblogs.macromedia.com" quality="high" bgcolor="#ffffff" width="550" height="400" name="urlvariables" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http:// www.adobe.com/go/getflashplayer" /> </object>

Variablen

71

7.

Wenn Sie mehrere Variablen an Flash bergeben mchten, mssen Sie die Name-WertPaare mit dem &-Zeichen voneinander trennen. Suchen Sie den folgenden Code aus Schritt 6:
?myURL=http://weblogs.macromedia.com

Ersetzen Sie ihn durch den folgenden Text:


?myURL=http://weblogs.macromedia.com&myTitle=adobe+News+Aggregator

Beachten Sie, dass die nderungen sowohl am object-Tag als auch am embed-Tag vorgenommen werden mssen, um die Einheitlichkeit in allen Browsern zu gewhrleisten. Sie sehen, dass die Wrter durch ein Pluszeichen (+) voneinander getrennt sind. Der Grund hierfr ist, dass die Werte URL-kodiert sind und das Pluszeichen ein einzelnes Leerzeichen darstellt.
H I NW E I S

Eine Liste hufiger URL-kodierter Sonderzeichen finden Sie in der Flash-TechNote zum Lesen von Sonderzeichen aus einer Textdatei: URL Encoding: Reading special characters from a text file.

Das &-Zeichen dient als Trennzeichen fr die verschiedenen Name-Wert-Paare. Wenn die Werte, die Sie bergeben, selbst &-Zeichen enthalten, knnen deshalb unerwartete Ergebnisse auftreten. Wenn die folgenden Werte an Flash bergeben werden, bewirkt die Art der Name-Wert-Paare und das Parsing,
my.swf?name=PB+&+J&flavor=strawberry+rhubarb

dass Flash die folgenden Variablen (und Werte) in den Stammgltigkeitsbereich einfgt:
'name': 'PB ' (note space at end of value) ' J': '' (note space at beginning of variable name and an empty value) 'flavor': 'strawberry rhubarb'

Um dies zu vermeiden, mssen Sie dem &-Zeichen im Name-Werte-Paar die URL-kodierte Entsprechung (%26) als Escape-Zeichen voranstellen.
8.

ffnen Sie die Datei urlvariables.html, und suchen Sie den folgenden Code:
?myURL=http://weblogs.macromedia.com&myTitle=Adobe+News+Aggregator

Ersetzen Sie ihn durch folgenden Code:


?myURL=PB+%26+J&flavor=strawberry+rhubarb 9.

Speichern Sie die genderte HTML-Datei, und testen Sie das Flash-Dokument noch einmal. Flash hat die folgenden Name-Wert-Paare erstellt.

72

Daten und Datentypen

'name': 'PB & J' 'flavor': 'strawberry rhubarb'


H I NW E I S

Alle Browser untersttzen Strings mit einer Lnge von 64 KB (65535 Byte). FlashVars muss sowohl im object-Tag als auch im embed-Tag zugewiesen sein, um die Funktionsweise in allen Browsern zu ermglichen.

FlashVars in einer Anwendung einsetzen


Die bergabe von Variablen an Flash mit FlashVars hnelt der bergabe von Variablen ber die URL im HTML-Code. Mit FlashVars werden Variablen jedoch nicht nach dem Dateinamen bergeben, sondern in einem separaten param-Tag und im embed-Tag.
So verwenden Sie FlashVars in einem Dokument:
1. 2.

Erstellen Sie ein neues Flash-Dokument, und nennen Sie es myflashvars.fla. Whlen Sie Datei > Einstellungen fr Verffentlichungen, aktivieren Sie die Option HTML, und klicken Sie dann auf OK, um das Dialogfeld zu schlieen. Fgen Sie Bild 1 der Hauptzeitleiste den folgenden ActionScript-Code hinzu:
this.createTextField("myTxt", 100, 0, 0, 100, 20); myTxt.autoSize = "left"; if (_level0.myURL == undefined) { myTxt.text = "myURL is not defined"; } else { myTxt.text = _level0.myURL; }
H I NW E I S

3.

Standardmig wird HTML-Code im selben Verzeichnis verffentlicht wie myflashvars.fla.

4.

Whlen Sie Datei > Verffentlichen, um die SWF- und HTML-Dateien zu verffentlichen. ffnen Sie das Verzeichnis, in dem sich die verffentlichten Dateien befinden (dies ist das Verzeichnis, in dem Sie myflashvars.fla auf der Festplatte gespeichert haben). ffnen Sie dann das HTML-Dokument (standardmig myflashvars.html) in einem HTML-Editor wie Dreamweaver oder dem Editor in Windows.

5.

Variablen

73

6.

Fgen Sie den unten gezeigten fett gedruckten Code hinzu, damit Ihr HTML-Dokument folgendermaen aussieht:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.adobe.com/pub/shockwave/cabs/flash/ swflash.cab#version=8,0,0,0" width="550" height="400" id="myflashvars" align="middle"> <param name="allowScriptAccess" value="sameDomain" /> <param name="movie" value="myflashvars.swf" /> <param name="FlashVars" value="myURL=http://weblogs.adobe.com/"> <param name="quality" value="high" /> <param name="bgcolor" value="#ffffff" /> <embed src="myflashvars.swf" FlashVars="myURL=http://weblogs.adobe.com/" quality="high" bgcolor="#ffffff" width="550" height="400" name="myflashvars" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http:// www.adobe.com/go/getflashplayer" /> </object>

Mit diesem Code wird eine Variable namens myURL bergeben, die den String http://weblogs.macromedia.com enthlt. Beim Laden der SWF-Datei wird eine Eigenschaft namens myURL im Gltigkeitsbereich _level0 erstellt. Wenn Sie FlashVars verwenden oder Variablen ber die URL bergeben, hat dies den Vorteil, dass die Variablen beim Laden der SWF-Datei umgehend in Flash zur Verfgung stehen. Sie mssen also keine Funktionen schreiben, um zu berprfen, ob die Variablen vollstndig geladen wurden, wie dies bei Verwendung von LoadVars oder XML der Fall wre.
7. 8.

Speichern und schlieen Sie das HTML-Dokument. Doppelklicken Sie auf myflashvars.html, um die Anwendung zu testen. Der Text http://weblogs.macromedia.com wird in der SWF-Datei angezeigt. Es handelt sich dabei um eine Variable in der HTML-Datei.
H I NW E I S

Alle Browser untersttzen Strings mit einer Lnge von 64 KB (65.535 Byte). FlashVars muss sowohl im object-Tag als auch im embed-Tag zugewiesen sein, um die Funktionsweise in allen Browsern zu ermglichen.

Variablen von einem Server laden


Variablen knnen mit mehreren Verfahren aus externen Quellen (wie Textdateien, XML-Dokumenten usw.) in Flash geladen werden. Weitere Informationen zum Laden von Variablen sowie zu Name-Wert-Paaren finden Sie in Kapitel 15, Mit externen Daten arbeiten auf Seite 655. In Flash knnen Variablen ganz einfach mit der LoadVars-Klasse geladen werden, wie im folgenden Beispiel gezeigt.

74

Daten und Datentypen

So laden Sie Variablen von einem Server:


1. 2.

Erstellen Sie ein neues Flash-Dokument. Whlen Sie das erste Bild in der Zeitleiste aus, und geben Sie im Bedienfeld Aktionen den folgenden ActionScript-Code ein:
var my_lv:LoadVars = new LoadVars(); my_lv.onLoad = function(success:Boolean):Void { if (success) { trace(this.dayNames); // Sonntag, Montag, Dienstag... } else { trace("Error"); } } my_lv.load("http://www.helpexamples.com/flash/params.txt");

Dieser Code ldt eine Textdatei von einem Remote-Server und analysiert die enthaltenen Name-Wert-Paare.
TIPP

Sie knnen die Textdatei (http://www.helpexamples.com/flash/params.txt) in einem Browser herunterladen oder anzeigen, um die Formatierungsweise der Variablen zu sehen.

3.

Whlen Sie Steuerung > Film testen, um das Dokument zu testen. Wenn die Datei erfolgreich geladen werden kann, wird das Ereignis complete aufgerufen, und im Bedienfeld Ausgabe wird der Wert von dayNames angezeigt. Wenn die Textdatei nicht heruntergeladen werden kann, wird das Argument success auf false eingestellt, und im Bedienfeld Ausgabe wird der Text Fehler angezeigt.

Variablen in einem Projekt verwenden


Bei der Erstellung von Animationen oder Anwendungen mit Flash mssen Sie fast immer die eine oder andere Variable in Ihrem Projekt verwenden. Wenn Sie beispielsweise ein Anmeldesystem erstellen, bentigen Sie wahrscheinlich Variablen, um festzustellen, ob Benutzername und Kennwort eingegeben wurden und gltig sind. Weitere Informationen zum Laden von Variablen (wie Name-Wert-Paare) finden Sie in Kapitel 15, Mit externen Daten arbeiten auf Seite 655. Im folgenden Beispiel verwenden Sie Variablen zum Speichern des Pfades fr ein Bild, das mit der Loader-Klasse geladen wird, eine Variable fr die Instanz der Loader-Klasse sowie einige Funktionen, deren Aufruf sich danach richtet, ob die Datei erfolgreich geladen wurde oder nicht.

Variablen

75

So verwenden Sie Variablen in einem Projekt:


1.

Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen imgloader.fla. Whlen Sie das erste Bild in der Zeitleiste aus, und geben Sie im Bedienfeld Aktionen den folgenden ActionScript-Code ein:
/* Standardbild angeben fr den Fall, dass kein Wert mit FlashVars bergeben wurde. */ var imgUrl:String = "http://www.helpexamples.com/flash/images/ image1.jpg"; if (_level0.imgURL != undefined) { // Wenn ein Bild angegeben wurde, Standardwert berschreiben. imgUrl = _level0.imgURL; } this.createEmptyMovieClip("img_mc", 10); var mclListener:Object = new Object(); mclListener.onLoadInit = function(target_mc:MovieClip):Void { target_mc._x = (Stage.width - target_mc._width) / 2; target_mc._y = (Stage.height - target_mc._height) / 2; } mclListener.onLoadError = function(target_mc:MovieClip):Void { target_mc.createTextField("error_txt", 1, 0, 0, 100, 20); target_mc.error_txt.autoSize = "left"; target_mc.error_txt.text = "Error downloading specified image;\n\t" + target_mc._url; } var myMCL:MovieClipLoader = new MovieClipLoader(); myMCL.addListener(mclListener); myMCL.loadClip(imgUrl, img_mc);

2.

In der ersten Codezeile wird das Bild angegeben, das dynamisch in das Flash-Dokument geladen werden soll. Dann berprfen Sie, ob ein neuer Wert fr imgURL mit FlashVars oder URL-kodierten Variablen angegeben wurde. Wenn ein neuer Wert angegeben wurde, wird die Standard-URL des Bilds durch den neuen Wert berschrieben. Informationen zur Verwendung von URL-Variablen finden Sie unter Variablen von URLs verwenden auf Seite 70. Einzelheiten zu FlashVars finden Sie unter FlashVars in einer Anwendung einsetzen auf Seite 73.

76

Daten und Datentypen

Die nchsten Codezeilen definieren die MovieClip-Instanz und ein Listener-Objekt fr die zuknftige MovieClipLoader-Instanz. Das Listener-Objekt von MovieClipLoader definiert zwei Ereignisprozeduren, und zwar onLoadInit und onLoadError. Diese Prozeduren werden aufgerufen, wenn das Bild erfolgreich auf die Bhne geladen und initialisiert wird bzw. wenn das Bild nicht geladen werden kann. Dann erstellen Sie eine MovieClipLoader-Instanz und verwenden die Methode addListener(), um MovieClipLoader das bereits definierte Listener-Objekt hinzuzufgen. Abschlieend wird das Bild heruntergeladen und ausgelst, wenn Sie die Methode MovieClipLoader.loadClip() aufrufen. Diese Methode definiert die zu ladende Bilddatei sowie den Ziel-Movieclip, in den das Bild geladen werden soll.
3.

Whlen Sie Steuerung > Film testen, um das Dokument zu testen.


imgUrl

Da Sie das Flash-Dokument in der Authoring-Umgebung testen, wird kein Wert fr von FlashVars oder ber die URL zurckgegeben. Deshalb wird das Standardbild angezeigt.

4.

Speichern Sie das Flash-Dokument, und whlen Sie Datei > Verffentlichen, um die Datei als SWF- und HTML-Dokument zu verffentlichen.
HINWEIS

Stellen Sie sicher, dass im Dialogfeld Einstellungen fr Verffentlichungen Flash und HTML ausgewhlt sind. Whlen Sie Datei > Einstellungen fr Verffentlichungen, und klicken Sie auf die Registerkarte Formate. Whlen Sie dann beide Optionen aus.

5.

Beim Testen des Dokuments in Flash (Steuerung > Film testen) oder in einem lokalen Browser (Datei > Vorschau fr Verffentlichungen > HTML) sehen Sie, dass das Bild vertikal und horizontal auf der Bhne zentriert wird. Bearbeiten Sie das erstellte HTML-Dokument in einem Editor (wie Dreamweaver oder dem Editor von Windows), und ndern Sie den standardmigen HTML-Code folgendermaen:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.adobe.com/pub/shockwave/cabs/flash/ swflash.cab#version=8,0,0,0" width="550" height="400" id="imgloader" align="middle"> <param name="allowScriptAccess" value="sameDomain" /> <param name="movie" value="imgloader.swf" /> <param name="FlashVars" value="imgURL=http://www.helpexamples.com/flash/ images/image2.jpg"> <param name="quality" value="high" /> <param name="bgcolor" value="#ffffff" />

6.

Variablen

77

<embed src="imgloader.swf" quality="high" FlashVars="imgURL=http:// www.helpexamples.com/flash/images/image2.jpg" bgcolor="#ffffff" width="550" height="400" name="imgloader" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" /> </object> 7.

Testen Sie das HTML-Dokument, um die nderungen zu sehen. Ein Bild, das Sie im HTML-Code angeben, wird in der SWF-Datei angezeigt. Um dieses Beispiel so zu ndern, dass Ihre eigenen Bilder verwendet werden, mssen Sie den FlashVars-Wert ndern (den String in den doppelten Anfhrungszeichen).

Daten in Objekten organisieren


Mglicherweise sind Sie bereits mit den Objekten vertraut, die auf der Bhne platziert werden. So knnte die Bhne beispielsweise ein MovieClip-Objekt enthalten, das wiederum weitere Movieclips enthlt. Textfelder, Movieclips und Schaltflchen werden hufig als Objekte bezeichnet, wenn sie auf der Bhne platziert werden. ActionScript-Objekte bestehen aus Eigenschaften und Methoden. Jedes Objekt verfgt ber einen eigenen Namen und ist eine Instanz einer bestimmten Klasse. Integrierte Objekte stammen aus den Klassen, die in ActionScript vordefiniert sind. Die integrierte Date-Klasse zeigt beispielsweise Informationen der Systemuhr auf dem Computer des Benutzers an. Mit der integrierten LoadVars-Klasse knnen Sie Variablen in Ihre SWF-Datei laden. Objekte und Klassen knnen auch unter Verwendung von ActionScript erstellt werden. Sie knnen ein Objekt erstellen, das eine Datenmenge enthlt, wie beispielsweise den Namen, die Adresse und die Telefonnummer einer bestimmten Person. Oder Sie erstellen ein Objekt mit Farbinformationen fr ein Bild. Durch die Anordnung von Daten in Objekten lassen sich Flash-Dokumente effizienter organisieren. Allgemeine Informationen zum Erstellen einer benutzerdefinierten Klasse, die Methoden und Eigenschaften enthlt, finden Sie unter Benutzerdefinierte Klassendateien schreiben auf Seite 216. Ausfhrliche Einzelheiten zu integrierten und benutzerdefinierten Klassen finden Sie in Kapitel 6, Klassen auf Seite 205. ActionScript bietet mehrere Mglichkeiten zur Erstellung eines Objekts. Im nchsten Beispiel werden mit zwei verschiedenen Verfahren einfache Objekte erstellt, und dann wird der Inhalt dieser Objekte durchlaufen.

78

Daten und Datentypen

So erstellen Sie einfache Objekte in Flash:


1.

Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen simpleObjects.fla. Whlen Sie das erste Bild in der Zeitleiste aus, und geben Sie im Bedienfeld Aktionen den folgenden Code ein:
// Das erste Verfahren var firstObj:Object = new Object(); firstObj.firstVar = "hello world"; firstObj.secondVar = 28; firstObj.thirdVar = new Date(1980, 0, 1); // 1. Januar 1980

2.

Dieser Code zeigt ein Verfahren zur Erstellung eines einfachen Objekts. Er erstellt eine neue Objektinstanz und definiert einige Eigenschaften innerhalb des Objekts.
3.

Geben Sie nun nach dem Code, den Sie in Schritt 2 hinzugefgt haben, den folgenden ActionScript-Code ein:
// Das zweite Verfahren var secondObj:Object = {firstVar:"hello world", secondVar:28, thirdVar:new Date(1980, 0, 1)};

Dies ist ein anderes Verfahren zur Erstellung eines Objekts. Beide Objekte sind gleich. Der oben gezeigte Code erstellt ein neues Objekt und initialisiert einige Eigenschaften unter Verwendung der Kurzschrift fr Objekte.
4.

Um die vorherigen Objekte zu durchlaufen und ihren Inhalt anzuzeigen, fgen Sie in Bild 1 der Zeitleiste (nach dem bereits eingegebenen Code) den folgenden ActionScript-Code hinzu:
var i:String; for (i in secondObj) { trace(i + ": " + secondObj[i]); }

5.

Whlen Sie Steuerung > Film testen. Der folgende Text wird im Bedienfeld Ausgabe angezeigt:
firstVar: hello world secondVar: 28 thirdVar: Tue Jan 1 00:00:00 GMT-0800 1980
H IN W E I S

Die Variablen werden nicht unbedingt in dieser Reihenfolge im Bedienfeld Ausgabe angezeigt. Sie knnen die Reihenfolge nicht garantieren, wenn Sie eine for..inSchleife verwenden; der Player zeigt die Inhalte eines Objekts in einer zuflligen Reihenfolge an.

Zur Erstellung von Objekten knnen Sie auch Arrays verwenden. Anstatt mehrere Variablen zu verwenden, wie firstname1, firstname2 und firstname3, knnen Sie auch ein Objekt-Array erstellen, das dieselben Daten enthlt. Dieses Verfahren wird im Folgenden veranschaulicht.

Daten in Objekten organisieren

79

So erstellen Sie ein Objekt mithilfe eines Arrays:


1.

Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen arrayObject.fla. Whlen Sie das erste Bild in der Zeitleiste aus, und geben Sie im Bedienfeld Aktionen den folgenden Code ein:
var usersArr:Array = new Array(); usersArr.push({firstname:"George"}); usersArr.push({firstname:"John"}); usersArr.push({firstname:"Thomas"});

2.

Das Anordnen von Variablen in Arrays und Objekten bietet den Vorteil, dass es so wesentlich einfacher ist, die Variablen zu durchlaufen und ihre Werte zu sehen, wie im Folgenden gezeigt.
3.

Geben Sie nach dem Code, den Sie in Schritt 2 hinzugefgt haben, den folgenden ActionScript-Code ein:
var i:Number; for (i = 0; i < usersArr.length; i++) { trace(usersArr[i].firstname); // George, John, Thomas }

4.

Whlen Sie Steuerung > Film testen. Der folgende Text wird im Bedienfeld Ausgabe angezeigt:
George John Thomas

Das folgende Beispiel zeigt ein weiteres Verfahren zum Durchlaufen der Objekte. In diesem Beispiel wird ein Objekt erstellt und dann mit einer Schleife for..in durchlaufen. Dabei wird jede Eigenschaft im Bedienfeld Ausgabe angezeigt:
var myObj:Object = {var1:"One", var2:"Two", var3:18, var4:1987}; var i:String; for (i in myObj) { trace(i + ": " + myObj[i]); } // Gibt Folgendes aus: /* var1: One var2: Two var3: 18 var4: 1987 */

Weitere Informationen zum Erstellen von Schleifen finden Sie in Kapitel 4, for-Schleifen verwenden auf Seite 131. Einzelheiten zu for..in-Schleifen finden Sie unter for..inSchleifen verwenden auf Seite 132. Weitere Informationen zu Objekten finden Sie in Kapitel 6, Klassen auf Seite 205.
80 Daten und Datentypen

Umwandlung
Mit ActionScript 2.0 knnen Sie einen Objekttyp in einen anderen konvertieren. Wenn Sie ein Objekt in einen anderen Typ umwandeln, wird der Wert, den das Objekt oder die Variable enthlt, in einen anderen Typ konvertiert. Die Ergebnisse einer Typumwandlung richten sich nach den betroffenen Datentypen. Um ein Objekt in einen anderen Typ umzuwandeln, schlieen Sie den Objektnamen in Klammern ein (()) und stellen ihm den Namen des neuen Typs voran. Im folgenden Codebeispiel wird ein Boolescher Wert in eine Ganzzahl umgewandelt.
var myBoolean:Boolean = true; var myNumber:Number = Number(myBoolean);

Weitere Informationen zur Umwandlung finden Sie unter den folgenden Themen:

Objekte umwandeln auf Seite 81

Objekte umwandeln
Die Syntax fr die Umwandlung ist type(item). Dabei soll der Compiler sich so verhalten, als ob der Datentyp von item auf type eingestellt ist. Beim Umwandeln handelt es sich im Prinzip um einen Funktionsaufruf, der den Wert null zurckgibt, wenn die Umwandlung zur Laufzeit fehlschlgt (dies ist bei Dateien der Fall, die fr Flash Player 7 oder hher verffentlicht werden; fr Dateien, die fr Flash Player 6 verffentlicht werden, gibt es keine Laufzeituntersttzung fr fehlgeschlagene Umwandlungen). Wenn die Umwandlung erfolgreich war, gibt der Funktionsaufruf das ursprngliche Objekt zurck. Der Compiler kann jedoch nicht feststellen, ob eine Umwandlung zur Laufzeit fehlschlagen wird, und erzeugt in diesen Fllen zur Kompilierzeit keine Fehler. Der folgende Code ist ein Beispiel hierfr:
// Die Klassen Cat und Dog sind Unterklassen der Animal-Klasse function bark(myAnimal:Animal) { var foo:Dog = Dog(myAnimal); foo.bark(); } var curAnimal:Animal = new Dog(); bark(curAnimal); // Funktioniert curAnimal = new Cat(); bark(curAnimal); // Funktioniert nicht

Umwandlung

81

In diesem Beispiel haben Sie dem Compiler gegenber angegeben, dass foo ein Dog-Objekt ist, der Compiler geht daher davon aus, dass foo.bark() eine gltige Anweisung ist. Der Compiler wei jedoch nicht, dass die Umwandlung fehlschlagen wird (d. h., dass Sie versucht haben, ein Cat-Objekt in einen Animal-Typ umzuwandeln), daher tritt zur Kompilierzeit kein Fehler auf. Wenn Sie Ihrem Skript jedoch eine berprfung hinzufgen, um sicherzustellen, dass die Umwandlung erfolgreich ist, knnen Sie Umwandlungsfehler zur Laufzeit feststellen, wie im folgenden Beispiel gezeigt.
function bark(myAnimal:Animal) { var foo:Dog = Dog(myAnimal); if (foo) { foo.bark(); } }

Sie knnen einen Ausdruck in eine Schnittstelle umwandeln. Wenn der Ausdruck ein Objekt ist, das die Schnittstelle implementiert, oder eine Basisklasse hat, die die Schnittstelle implementiert, ist die Umwandlung erfolgreich. Ist dies nicht der Fall, schlgt die Umwandlung fehl.
H I NW E I S 82

Eine Umwandlung zu null oder undefined gibt den Wert undefined zurck.

Grunddatentypen, die ber eine entsprechende globale Konvertierungsfunktion verfgen, knnen nicht mit einem Typumwandlungsoperator desselben Namens auer Kraft gesetzt werden. Globale Konvertierungsfunktionen haben Vorrang vor Typumwandlungsoperatoren. Sie knnen beispielsweise keine Umwandlung in ein Array vornehmen, weil die Konvertierungsfunktion Array() Vorrang vor dem Typumwandlungsoperator hat. Dieses Beispiel definiert zwei Stringvariablen (firstNum und secondNum), die addiert werden. Im ersten Ergebnis werden die Zahlen nicht addiert, sondern verkettet, da es sich um den String-Datentyp handelt. In der zweiten trace-Anweisung werden die beiden Zahlen in den Number-Datentyp umgewandelt. Dann wird die Addition vorgenommen, die das richtige Ergebnis liefert. Die Datenkonvertierung ist wichtig, wenn Sie mit Daten arbeiten, die mit XML oder FlashVars geladen werden. Dies wird im folgenden Beispiel gezeigt:
var firstNum:String = "17"; var secondNum:String = "29"; trace(firstNum + secondNum); // 1729 trace(Number(firstNum) + Number(secondNum)); // 46

Weitere Informationen zu Datenkonvertierungsfunktionen finden Sie in den Eintrgen zu den einzelnen Konvertierungsfunktionen im ActionScript 2.0-Referenzhandbuch: ArrayFunktion, Boolean-Funktion, Number-Funktion, Object-Funktion und String-Funktion.

Daten und Datentypen

KAPITEL 4

Syntax- und Sprachgrundlagen


Das Erlernen der ActionScript-Syntax und -Anweisungen hnelt der Bildung von Stzen aus Wrtern, wobei die Stze wiederum in Abstzen zusammengefasst werden knnen. ActionScript kann sehr einfach sein. In der deutschen Sprache zum Beispiel wird ein Satz durch einen Punkt beendet. In ActionScript wird eine Anweisung durch ein Semikolon abgeschlossen. In der ActionScript-Sprache knnen Sie die Aktion stop() eingeben, um den Abspielkopf einer Movieclip-Instanz oder die Schleifenwiedergabe einer SWF-Datei zu stoppen. Oder Sie knnen Tausende von Codezeilen fr eine interaktive Bankanwendung erstellen. Mit anderen Worten: Mit ActionScript lassen sich sehr einfache oder auch sehr komplexe Aufgaben erledigen. In Kapitel 3, Daten und Datentypen haben Sie gelernt, wie Daten in der ActionScriptSprache verwendet werden, und wie Sie Daten im Code formatieren. In diesem Kapitel wird gezeigt, wie Sie in ActionScript Anweisungen mit der richtigen Syntax bilden. Das Kapitel enthlt zahlreiche kurze Codebeispiele, mit denen die grundlegenden Sprachkonzepte veranschaulicht werden sollen. In den folgenden Kapiteln finden Sie lngere und zunehmend komplexere Codebeispiele, in denen die in diesem Kapitel beschriebenen Grundlagen kombiniert und gebt werden. Die in diesem Abschnitt beschriebenen allgemeinen Regeln gelten fr ActionScript in seiner Gesamtheit. Darber hinaus erfordern die meisten ActionScript-Begriffe die Einhaltung bestimmter Syntaxregeln, die Sie unter den jeweiligen Eintrgen im ActionScript 2.0Referenzhandbuch nachlesen knnen. Fr Benutzer, die ActionScript zum ersten Mal verwenden, mag es zunchst schwer sein, sich an die Grundlagen von ActionScript zu halten und gleichzeitig elegante Programme zu schreiben. Weitere Informationen zur Anwendung der in diesem Abschnitt beschriebenen Regeln finden Sie unter Kapitel 17, Bewhrte Verfahren und Kodierungskonventionen fr ActionScript 2.0 auf Seite 743.
H I N WE I S

In diesem Kapitel fgen Sie ActionScript-Code direkt in ein Bild der Zeitleiste ein. In folgenden Kapiteln verwenden Sie Klassen, um ActionScript von der FLA-Datei zu trennen.

83

Weitere Informationen zur ActionScript-Syntax und zu Sprachgrundlagen finden Sie unter den folgenden Themen:
Syntax, Anweisungen und Ausdrcke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Punktsyntax und Zielpfade. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Interpunktionszeichen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Konstanten und Schlsselwrter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Anweisungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 Operatoren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151

Syntax, Anweisungen und Ausdrcke


Die ActionScript-Sprache umfasst mehrere integrierte Klassen. Sie mssen die richtige ActionScript-Syntax fr Anweisungen verwenden, damit der Code ordnungsgem kompiliert und in Flash ausgefhrt werden kann. In diesem Zusammenhang bezieht sich der Begriff Syntax auf die Grammatik und Schreibweise einer Programmiersprache. Der Compiler kann eine fehlerhafte Syntax nicht verarbeiten, so dass Fehler oder Warnungen im Bedienfeld Ausgabe angezeigt werden, wenn Sie versuchen, das Dokument in der Testumgebung zu testen. Die Syntax ist im Prinzip eine Sammlung aus Regeln und Richtlinien, die Ihnen beim Schreiben von korrektem ActionScript-Code helfen. Mit Anweisungen werden in einer FLA-Datei bestimmte Aktionen ausgefhrt. Beispielsweise knnen Sie eine Bedingungsanweisung verwenden, um festzustellen, ob eine Bedingung zutrifft oder nicht. Dann knnten Sie je nachdem, ob die Bedingung zutrifft oder nicht, bestimmte Aktionen ausfhren, wie Funktionen oder Ausdrcke. Mit der Bedingungsanweisung if wird eine Bedingung ausgewertet, um die nchste auszufhrende Aktion im Code zu bestimmen.
// if-Anweisung if (condition) { // Anweisungen; }

Weitere Informationen zu Anweisungen finden Sie unter Anweisungen auf Seite 114.

84

Syntax- und Sprachgrundlagen

Ausdrcke unterscheiden sich von Anweisungen, denn es handelt sich hierbei um zulssige Kombinationen aus ActionScript-Symbolen, die einen Wert darstellen. Ausdrcke haben Werte, whrend Werte und Eigenschaften einen bestimmten Typ aufweisen. Ein Ausdruck kann aus Operatoren, Operanden, Werten, Funktionen und Verfahren bestehen. Fr Ausdrcke gelten die ActionScript-Regeln in Bezug auf Rangfolge und Zuordnung. Normalerweise interpretiert Flash Player einen Ausdruck und gibt dann einen Wert zurck, den Sie in Ihrer Anwendung einsetzen knnen. Beim folgenden Code handelt es sich beispielsweise um einen Ausdruck:
x + 2

In diesem Beispielausdruck sind x und 2 Operanden, und + ist ein Operator. Weitere Informationen zu Operatoren und Operanden finden Sie unter Operatoren auf Seite 151. Weitere Informationen zu Objekten und Eigenschaften finden Sie unter Object-Datentyp auf Seite 43. Die Formatierung des ActionScript-Codes bestimmt auch, wie leicht der Code sich pflegen und verwalten lsst. Es wre zum Beispiel sehr schwierig, die Logik einer FLA-Datei nachzuvollziehen, die keine Einrckungen oder Kommentare enthlt, die nicht konsistent formatiert wurde und in der keine einheitlichen Namenskonventionen befolgt wurden. Wenn Sie ActionScript-Codeblcke einrcken (wie Schleifen und if-Anweisungen), lsst sich der Code besser lesen und auch die Fehlerbehebung gestaltet sich einfacher. Weitere Informationen zur Formatierung von ActionScript-Code finden Sie unter ActionScript-Syntax formatieren auf Seite 778. Die richtige Formatierung von ActionScript wird ebenfalls in diesen Abschnitten gezeigt. Weitere Informationen zur Syntax und zu Sprachgrundlagen finden Sie unter den folgenden Themen:

Unterschiede zwischen ActionScript und JavaScript Gro- und Kleinschreibung

Syntax, Anweisungen und Ausdrcke

85

Unterschiede zwischen ActionScript und JavaScript


ActionScript weist groe hnlichkeit mit der JavaScript-Programmiersprache auf. Sie mssen JavaScript nicht beherrschen, um ActionScript erlernen und einsetzen zu knnen. Wenn Sie jedoch mit JavaScript vertraut sind, wird Ihnen ActionScript gleich bekannt vorkommen. Dieses Handbuch ist lediglich als allgemeine Einfhrung in die Grundlagen der Anwendungsprogrammierung vorgesehen. Informationen ber grundlegende Programmierverfahren und die JavaScript-Sprache finden Sie in einer Vielzahl anderer Quellen.

Die Sprachspezifikation ECMAScript (ECMA-262) Edition 3 wurde von JavaScript abgeleitet und dient als internationaler Standard fr die JavaScript-Sprache. ActionScript beruht auf dieser Spezifikation. Weitere Informationen hierzu finden Sie im Internet unter www.ecma-international.org/publications/standards/Ecma-262.htm. Auf der Java Technology-Website finden Sie Tutorials zur objektorientierten Programmierung (http://java.sun.com/docs/books/tutorial/java/index.html), die auf Java zugeschnitten sind, Ihnen aber auch beim Verstndnis verschiedener ActionScriptKonzepte helfen knnen.

Die folgende Liste enthlt einen berblick ber einige der wesentlichen Unterschiede zwischen ActionScript und JavaScript:

ActionScript bietet keine Untersttzung fr browserspezifische Objekte wie Document, Window und Anchor. In ActionScript werden nicht alle integrierten JavaScript-Objekte vollstndig untersttzt. Einige JavaScript-Syntaxkonstrukte, wie zum Beispiel Anweisungsbezeichnungen, werden in ActionScript nicht untersttzt. In ActionScript kann die Funktion eval() nur Variablenverweise ausfhren. ActionScript 2.0 untersttzt mehrere Funktionsmerkmale, die nicht in der ECMA-262Spezifikation enthalten sind, wie Klassen und strikte Datentypisierung. Viele dieser Funktionen wurden gem der Sprachspezifikation ECMAScript (ECMA-262) Edition 3 entwickelt (siehe www.ecma-international.org/publications/standards/Ecma-262.htm). ActionScript untersttzt keine regulren Ausdrcke mit dem RegExp-Objekt, Adobe Central bietet jedoch Untersttzung fr das RegExp-Objekt. Weitere Informationen zu Adobe Center finden Sie unter www.adobe.com/products/central.

86

Syntax- und Sprachgrundlagen

Gro- und Kleinschreibung


Bei ActionScript-Code, den Sie fr Flash Player 7 und sptere Versionen schreiben, wird zwischen der Gro- und Kleinschreibung unterschieden. Variablen, deren Gro- und Kleinschreibung sich unterscheidet, gelten also als separate Variablen, wie im folgenden ActionScript-Code gezeigt:
// Gro- und Kleinschreibung var firstName:String = "Jimmy"; // Nur Kleinschreibung trace(firstname); // undefined

Sie knnten auch den folgenden Code schreiben:


// In Datei, die Flash Player 8 anspricht // und entweder ActionScript 1.0 oder ActionScript 2.0 // // Legt Eigenschaften von zwei verschiedenen Objekten fest cat.hilite = true; CAT.hilite = true; // Erstellt drei var myVar:Number var myvar:Number var mYvAr:Number
H I N WE I S

verschiedene Variablen = 10; = 10; = 10;

Es empfiehlt sich jedoch nicht, nur auf Grundlage der Gro- und Kleinschreibung zwischen Variablen oder anderen Bezeichnern zu unterscheiden. Weitere Informationen zum Benennen von Variablen finden Sie in Kapitel 17, Bewhrte Verfahren und Kodierungskonventionen fr ActionScript 2.0 auf Seite 743.

Wenn Sie Material fr Flash Player 6 und ltere Versionen verffentlichen, zeigt Flash den String Jimmy im Bedienfeld Ausgabe an. Da bei Flash Player ab Version 7 die Gro- und Kleinschreibung bercksichtigt wird, sind firstName und firstname zwei verschiedene Variablen (wenn Sie ActionScript 1.0 oder ActionScript 2.0 verwenden). Ein Verstndnis dieses Konzepts ist sehr wichtig. Wenn Sie fr Flash Player 6 oder frhere Versionen FLA-Dateien erstellen, in denen die Gro- und Kleinschreibung der Variablen sich unterscheidet, funktionieren die Dateien eventuell nicht mehr, wenn die Dateien oder die Anwendung fr eine neuere Version von Flash Player konvertiert werden.

Syntax, Anweisungen und Ausdrcke

87

Deshalb sollten Sie auf eine einheitliche Gro- und Kleinschreibung achten, wie in diesem Handbuch gezeigt. Dies erleichtert auch die Unterscheidung zwischen Variablen, Klassen und Funktionsnamen. Zwei Bezeichner sollten sich nicht nur hinsichtlich der Gro- und Kleinschreibung voneinander unterscheiden; achten Sie auch auf unterschiedliche Namen der Instanz, der Variable oder der Klasse. Weitere Informationen zu Kodierungskonventionen finden Sie in Kapitel 17, Bewhrte Verfahren und Kodierungskonventionen fr ActionScript 2.0 auf Seite 743. Die Gro- und Kleinschreibung kann weitere Auswirkungen haben, wenn Sie mit einem Web Service arbeiten, der seine eigenen Regeln fr die Benennung von Variablen verwendet und fr die Gro- und Kleinschreibung der Variablen, die vom Server an die SWF-Datei zurckgegeben werden. Wenn Sie beispielsweise einen ColdFusion-Web-Service verwenden, werden die Eigenschaftennamen einer Struktur oder eines Objekts mglicherweise vollstndig in Grobuchstaben angegeben, z. B. FIRSTNAME. Wenn Sie nicht genau dieselbe Groschreibung in Flash verwenden, knnen unerwartete Ergebnisse auftreten.
HINWEIS 88

Die Gro- und Kleinschreibung wirkt sich auch auf externe Variablen aus, die Sie in eine SWF-Datei laden, beispielsweise mit LoadVars.load().

Die Gro- und Kleinschreibung betrifft externe Skripts, wie z. B. Klassendateien in ActionScript 2.0, Skripts, die ber den Befehl #include importiert werden, sowie Skripts in FLA-Dateien. Wenn Sie in mehrere Versionen von Flash Player exportieren und Laufzeitfehler auftreten, sollten Sie sowohl die externen Skriptdateien als auch die Skripts in FLA-Dateien berprfen, um sicherzustellen, dass die Gro- und Kleinschreibung konsequent befolgt wurde. Die Gro- und Kleinschreibung wird auf Basis einzelner SWF-Dateien implementiert. Wenn eine strikte Flash Player 8-Anwendung (mit Bercksichtigung von Gro- und Kleinschreibung) eine nicht strikte SWF-Datei aus Flash Player 6 aufruft, ist der in Flash Player 6 ausgefhrte ActionScript-Code nicht strikt. Wenn Sie z. B. eine SWF-Datei aus Flash Player 6 mit loadMovie() in eine SWF-Datei aus Flash Player 8 laden, ist die Gro- und Kleinschreibung fr die SWF-Datei der Version 6 weiterhin unerheblich, whrend sie fr die SWF-Datei der Version 8 beachtet werden muss. Wenn die Option Syntaxfarbkodierungen aktiviert ist, werden korrekt geschriebene Sprachelemente automatisch blau dargestellt. Weitere Informationen finden Sie unter Reservierte Wrter auf Seite 113.

Syntax- und Sprachgrundlagen

Punktsyntax und Zielpfade


In ActionScript verwenden Sie einen Punktoperator (.) (Punktsyntax), um auf Eigenschaften und Methoden zuzugreifen, die zu einem Objekt oder einer Instanz auf der Bhne gehren. Weiterhin verwenden Sie den Punktoperator, um den Zielpfad fr Instanzen (wie Movieclips), Variablen, Funktionen oder Objekte zu bestimmen. Ein in der Punktsyntax geschriebener Ausdruck beginnt mit dem Namen des Objekts oder Movieclips, gefolgt von einem Punkt, und endet mit dem Element, das Sie angeben mchten. In den folgenden Abschnitten wird gezeigt, wie Sie Ausdrcke mit der Punktsyntax schreiben. Wenn Sie einen Movieclip, eine geladene SWF-Datei oder eine Schaltflche steuern mchten, mssen Sie den entsprechenden Zielpfad angeben. Zielpfade sind hierarchische Adressen von Movieclip-Instanznamen, Variablen und Objekten in einer SWF-Datei. Um einen Zielpfad fr einen Movieclip oder eine Schaltflche anzugeben, mssen Sie dem Movieclip oder der Schaltflche einen Instanznamen zuweisen. Sie benennen eine Movieclip-Instanz, indem Sie sie auswhlen und den Instanznamen in den Eigenschafteninspektor eingeben. Sie knnen den Instanznamen aber auch im Code angeben, wenn Sie die Instanz mit ActionScript erstellen. Mithilfe eines Zielpfades knnen Sie eine Aktion einem bestimmten Movieclip zuordnen oder den Wert einer Variablen oder Eigenschaft abfragen oder einstellen. In den folgenden Themen wird genauer beschrieben, wie Sie Instanznamen zuweisen und mit der Punktsyntax auf Instanzen verweisen:

Mit der Punktsyntax auf Instanzen verweisen auf Seite 89. Gltigkeitsbereich und Verweise auf Seite 94 Die Schaltflche Zielpfad einfgen auf Seite 96 Schrgstrichsyntax auf Seite 96

Weitere Informationen zu Objekten und Eigenschaften finden Sie unter Object-Datentyp auf Seite 43.

Mit der Punktsyntax auf Instanzen verweisen


Um ActionScript-Code zu schreiben, der eine Instanz wie einen Movieclip steuert oder Bestnde in einer geladenen SWF-Datei manipuliert, mssen Sie den Namen und die Adresse im Code angeben. Dies wird als Zielpfad bezeichnet. Um auf Objekte in einer SWF-Datei zu verweisen (sie zu adressieren), verwenden Sie die Punktsyntax (auch Punktnotation genannt). Beispielsweise mssen Sie auf einen Movieclip oder eine Schaltflcheninstanz verweisen, bevor Sie eine Aktion darauf anwenden knnen. Mit der Punktsyntax knnen Sie einen Pfad zu der Instanz erstellen, auf die Sie verweisen mchten. Dieser Pfad wird auch als Zielpfad bezeichnet.

Punktsyntax und Zielpfade

89

Eine FLA-Datei hat eine besondere Hierarchie. Sie knnen Instanzen auf der Bhne oder mithilfe von ActionScript erstellen. Es ist sogar mglich, Instanzen innerhalb von anderen Instanzen zu erstellen oder in mehreren anderen Instanzen zu verschachteln. Jede Instanz kann bearbeitet werden, vorausgesetzt, sie verfgt ber einen Namen. Zum Benennen von Instanzen verwenden Sie einen Instanznamen, den Sie auf zwei verschieden Arten festlegen knnen, wie im Folgenden beschrieben:

Manuell, indem Sie eine Instanz auswhlen und den Instanznamen in den Eigenschafteninspektor eingeben (wenn eine Instanz sich auf der Bhne befindet). Dynamisch durch Verwendung von ActionScript. Sie erstellen eine Instanz mit ActionScript und weisen ihr bei der Erstellung einen Instanznamen zu.

Um den Instanznamen im Eigenschafteninspektor zuzuweisen, geben Sie den Namen in das Textfeld Instanzname ein. Sie knnen auch Objekten, die Sie erstellen, mit ActionScript einen Instanznamen zuweisen. Dies kann sehr einfach sein, wie im folgenden Code gezeigt:
this.createEmptyMovieClip("pic_mc", this.getNextHighestDepth()); pic_mc.loadMovie("http://www.helpexamples.com/flash/images/image1.jpg");

Dieser Code erstellt einen neuen Movieclip und weist ihm den Instanznamen pic_mc zu. Dann knnen Sie die Instanz pic_mc mithilfe von Code bearbeiten und beispielsweise ein Bild in die Instanz laden, wie im vorherigen Codebeispiel gezeigt. Weitere Informationen zu Gltigkeitsbereichen finden Sie unter Gltigkeitsbereich und Verweise auf Seite 94 und Variablen und Gltigkeitsbereiche auf Seite 64.

Auf Instanzen verweisen


Um eine Aktion in einer SWF-Datei auszufhren, mssen Sie auf eine Instanz verweisen und sie dann anweisen, eine Aktion auszufhren. Dazu weisen Sie der Instanz eine Aktion zu oder ndern ihre Eigenschaften. Normalerweise mssen Sie angeben, wo die Instanz sich in der SWF-Datei befindet, indem Sie einen Zielpfad erstellen (beispielsweise legen Sie so fest, auf welcher Zeitleiste die Instanz sich befindet oder in welcher anderen Instanz sie verschachtelt ist). Denken Sie daran, dass Sie zahlreichen Instanzen in der FLA-Datei einen Instanznamen zugewiesen und der FLA-Datei dann Code hinzugefgt haben, in dem diese Instanznamen verwendet werden. Dabei verweisen Sie auf die jeweilige Instanz und weisen sie an, eine Aktion durchzufhren (wie den Abspielkopf zu verschieben oder eine Webseite zu ffnen). Weitere Informationen zu Objekten und Eigenschaften finden Sie unter Object-Datentyp auf Seite 43.

90

Syntax- und Sprachgrundlagen

So verweisen Sie auf eine Instanz:


1. 2. 3.

Whlen Sie Datei > Neu und dann Flash-Dokument. Whlen Sie Datei > Speichern unter, und nennen Sie die Datei target.fla. Zeichnen Sie mit dem Ellipsenwerkzeug eine Form auf der Bhne. Zeichnen Sie ein Oval mit beliebiger Gre und Farbe. Whlen Sie das Oval auf der Bhne mit dem Auswahlwerkzeug aus.
TI P P

4.

Stellen Sie bei Bedarf Fllung und Strich ein.

5.

Whlen Sie Modifizieren > In Symbol konvertieren. Whlen Sie dann die Option Movieclip, und klicken Sie auf OK, um das Symbol zu erstellen. Whlen Sie den Movieclip auf der Bhne aus, und weisen Sie ihm im Eigenschafteninspektor den Instanznamen myClip zu. Fgen Sie eine neue Ebene ein, und nennen Sie sie actions. Fgen Sie in Bild 1 der Ebene actions den folgenden ActionScript-Code ein:
myClip._xscale = 50;

6.

7. 8.

Diese Codezeile verweist auf die Instanz myClip auf der Bhne. Der ActionScript-Code bewirkt, dass die Instanz auf die Hlfte ihrer ursprnglichen Breite skaliert wird. Da der ActionScript-Code sich auf derselben Zeitleiste wie das Movieclip-Symbol befindet, bentigen Sie nur den Instanznamen, um auf die Instanz zu verweisen. Bei einer Instanz, die sich auf einer anderen Zeitleiste befindet oder in einer anderen Instanz verschachtelt ist, mssen Sie den Zielpfad entsprechend ndern.

Auf eine verschachtelte Instanz verweisen


Sie knnen auf Instanzen verweisen, die innerhalb von anderen Instanzen verschachtelt sind. Vielleicht mchten Sie eine zweite Movieclip-Instanz in der Instanz myClip aus bung Auf Instanzen verweisen auf Seite 90 platzieren. Auch auf diese verschachtelte Instanz kann mit ActionScript verwiesen werden. Bevor Sie mit der folgenden bung beginnen, mssen Sie die bung unter Auf Instanzen verweisen auf Seite 90 abschlieen. Fhren Sie dann folgende Schritte aus, um auf eine verschachtelte Instanz zu verweisen.
So verweisen Sie auf eine verschachtelte Instanz:
1.

ffnen Sie die Datei target.fla aus dem Abschnitt zum Verweisen auf Instanzen, und benennen Sie sie in target2.fla um. Doppelklicken Sie auf der Bhne auf die Instanz myClip.

2.

Punktsyntax und Zielpfade

91

3.

Whlen Sie das Ellipsenwerkzeug aus, und zeichnen Sie ein Oval innerhalb der Instanz myClip. Whlen Sie die neue Form aus, und whlen Sie anschlieend Modifizieren > In Symbol konvertieren. Whlen Sie die Option Movieclip aus, und klicken Sie auf OK. Whlen Sie die neue Instanz aus, und geben Sie im Eigenschafteninspektor myOtherClip in das Textfeld Instanzname ein. Klicken Sie in der Bearbeitungsleiste auf Szene 1, um zur Hauptzeitleiste zurckzukehren. Fgen Sie in Bild 1 der Ebene actions den folgenden ActionScript-Code ein:
myClip.myOtherClip._xscale = 50;

4.

5. 6.

7. 8.

Mit diesem ActionScript-Code wird die Instanz myOtherClip auf die Hlfte ihrer ursprnglichen Breite skaliert. Da die Datei target.fla die Eigenschaft _xscale der Instanz myClip gendert hat und myOtherClip ein verschachteltes Symbol ist, betrgt die Breite von myOtherClip nur noch 25 % der ursprnglichen Breite. Wenn Sie mit verschachtelten Movieclips arbeiten, die ber eine eigene Zeitleiste verfgen, knnen Sie den Abspielkopf in der Zeitleiste der verschachtelten Instanz mithilfe von Code manipulieren, wie im folgenden Beispiel gezeigt:
myClip.nestedClip.gotoAndPlay(15); myClip.someOtherClip.gotoAndStop("tweenIn");

Sie sehen, dass der Clip, den Sie manipulieren (wie nestedClip), unmittelbar vor der Aktion steht. Sie werden dies auch noch in folgenden Abschnitten sehen. In den bisherigen Beispielen wurde gezeigt, wie Sie auf vordefinierte Methoden und Eigenschaften der Instanzen auf der Bhne zugreifen. Sie haben jedoch auch die Mglichkeit, eine Variable in einem Movieclip einzustellen. Dies wird im folgenden Codebeispiel gezeigt, in dem eine Variable fr den Movieclip starClip festgelegt wird:
starClip.speed = 1.1; starClip.gravity = 0.8;

Wenn die Movieclip-Instanz starClip bisher die speed- oder gravity-Variablen enthielt, wrden die bisherigen Werte durch das Einstellen der neuen Werte berschrieben. Sie knnen dem Movieclip starClip neue Eigenschaften hinzufgen, da die MovieClip-Klasse mit dem Schlsselwort dynamic definiert wurde. Das Schlsselwort dynamic legt fest, dass die auf der angegebenen Klasse (in diesem Fall MovieClip) basierenden Objekte zur Laufzeit dynamische Eigenschaften hinzufgen und darauf zugreifen knnen. Weitere Informationen zur Anweisung dynamic finden Sie unter dem Eintrag dynamic-Anweisung im ActionScript 2.0-Referenzhandbuch.

92

Syntax- und Sprachgrundlagen

Auf dynamische Instanzen verweisen und Inhalt laden


Sie knnen auch ein Objekt mit ActionScript erstellen und erst spter mit einem Zielpfad darauf verweisen. Beispielsweise knnen Sie den folgenden ActionScript-Code verwenden, um einen Movieclip zu erstellen. Dann knnen Sie die Drehung des Movieclips mithilfe von ActionScript ndern, wie im nchsten Beispiel gezeigt.
So verweisen Sie auf eine dynamisch erstellte Movieclip-Instanz:
1.

Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen targetClip.fla. Fgen Sie eine neue Ebene ein, und nennen Sie sie actions. Fgen Sie in Bild 1 der Ebene actions den folgenden ActionScript-Code ein:
this.createEmptyMovieClip("rotateClip", this.getNextHighestDepth()); trace(rotateClip); rotateClip._rotation = 50;

2. 3.

4.

Whlen Sie Steuerung > Film testen, um das Dokument zu testen. Anhand der Anweisung trace ist ersichtlich, dass Sie einen Movieclip erstellt haben, doch auf der Bhne wird nichts angezeigt. Obwohl Sie bereits den Code fr die Erstellung der Movieclip-Instanz hinzugefgt haben, ist auf der Bhne nichts sichtbar, bis Sie dem Movieclip Inhalt hinzufgen. Sie knnten beispielsweise ein Bild in den Movieclip laden.

5. 6.

Kehren Sie zur Authoring-Umgebung zurck, und ffnen Sie das Bedienfeld Aktionen. Geben Sie nach dem Code, den Sie in Schritt 3 hinzugefgt haben, den folgenden ActionScript-Code ein:
rotateClip.loadMovie("http://www.helpexamples.com/flash/images/ image1.jpg");

Dieser Code ldt ein Bild in den Movieclip rotateClip, den Sie mithilfe von Code erstellt haben. Sie verwenden ActionScript, um auf die Instanz rotateClip zu verweisen.
7.

Whlen Sie Steuerung > Film testen, um das Dokument zu testen. Nun sollte auf der Bhne ein Bild angezeigt werden, das um 50 im Uhrzeigersinn gedreht ist.

Sie knnen auch auf Teile von SWF-Dateien verweisen, die Sie in eine SWF-Basisdatei laden.

Punktsyntax und Zielpfade

93

So verweisen Sie auf eine geladene SWF-Datei:

Verwenden Sie in einer Anweisung den Ausdruck _levelX, wobei X fr die Nummer der Stufe steht, die Sie beim Laden der SWF-Datei in der Funktion loadMovie() angegeben haben.
_level99.

Der Zielpfad einer SWF-Datei, die in Stufe 99 geladen wurde, lautet beispielsweise Im folgenden Beispiel wird eine SWF-Datei in Stufe 99 geladen und ihre Sichtbarkeitseigenschaft auf false eingestellt:

//SWF in Stufe 99 laden. loadMovieNum("contents.swf", 99); //Sichtbarkeit der Stufe 99 auf false setzen. loaderClip.onEnterFrame = function(){ _level99._visible = false; };
TIPP 94

Im Allgemeinen sollte auf die Verwendung von Stufen verzichtet werden, wenn der Inhalt stattdessen in verschiedene Tiefen des Movieclips geladen werden kann. Mit der Methode MovieClip.getNextHighestDepth() knnen Sie auf der Bhne dynamisch neue Movieclip-Instanzen erstellen, ohne prfen zu mssen, ob bereits eine Instanz an einer bestimmten Tiefe vorhanden ist.

Variablen mit einem Pfad einstellen


Sie knnen Variablen fr Instanzen einstellen, die in anderen Instanzen verschachtelt sind. Beispielsweise knnen Sie mit dem folgenden Code eine Variable fr ein Formular einstellen, das sich innerhalb eines anderen Formulars befindet. Die Instanz submitBtn befindet sich innerhalb von formClip auf der Hauptzeitleiste:
this.formClip.submitBtn.mouseOver = true;

Sie knnen eine Methode oder eine Eigenschaft eines bestimmten Objekts (wie ein Movieclip oder ein Textfeld) mit diesem Muster ausdrcken. Beispielsweise wre die Eigenschaft eines Objekts
myClip._alpha = 50;

Gltigkeitsbereich und Verweise


Wenn Sie Instanzen verschachteln, wird der Movieclip, in dem ein zweiter Movieclip verschachtelt ist, als bergeordnet bezeichnet. Die verschachtelte Instanz ist die untergeordnete Instanz. Bei der Hauptbhne und der Hauptzeitleiste handelt es sich im Prinzip um einen Movieclip, auf den Sie deshalb auch als solchen verweisen knnen. Weitere Informationen zum Gltigkeitsbereich finden Sie unter Variablen und Gltigkeitsbereiche auf Seite 64.

Syntax- und Sprachgrundlagen

Mit ActionScript knnen Sie auf bergeordnete Instanzen und bergeordnete Zeitleisten verweisen. Um auf die aktuelle Zeitleiste zu verweisen, verwenden Sie das Schlsselwort this. Wenn Sie beispielsweise auf einen Movieclip namens myClip verweisen mchten, der sich auf der aktuellen Zeitleiste befindet, verwenden Sie
this.myClip.

Als Alternative lassen Sie das Schlsselwort this weg und verwenden nur
myClip

Mit dem Schlsselwort this lassen sich jedoch hufig Lesbarkeit und Einheitlichkeit verbessern. Weitere Informationen zu empfohlenen Kodierungsverfahren finden Sie in Kapitel 17, Bewhrte Verfahren und Kodierungskonventionen fr ActionScript 2.0 auf Seite 743. Bei beiden oben genannten Codebeispielen wird im Bedienfeld Ausgabe der Text fr den Movieclip angezeigt. Wenn sich jedoch ActionScript-Code innerhalb des Movieclips myClip befindet, Sie aber auf die Hauptzeitleiste verweisen mchten, mssen Sie auf die bergeordnete Komponente des Movieclips verweisen (also auf die Hauptbhne). Doppelklicken Sie auf einen Movieclip, und geben Sie den folgenden ActionScript-Code in die Zeitleiste des Movieclips ein:
_level0.myClip trace("me: " + this); trace("my parent: " + this._parent);

Wenn Sie die SWF-Datei testen, wird die folgende Meldung im Bedienfeld Ausgabe angezeigt:
me: _level0.myClip my parent: _level0

Dies weist darauf hin, dass Sie auf die Hauptzeitleiste verwiesen haben. Sie knnen parent verwenden, um einen relativen Pfad zu einem Objekt zu erstellen. Wenn beispielsweise der Movieclip dogClip im animierten Movieclip animalClip verschachtelt ist, bewirkt die folgende Anweisung fr die Instanz dogClip, dass die Animation von animalClip abgebrochen wird.
this._parent.stop();

Wenn Sie mit Flash und ActionScript vertraut sind, kennen Sie vermutlich bereits den Gltigkeitsbereich root. Der Gltigkeitsbereich _root bezieht sich meist auf die Hauptzeitleiste des aktuellen Flash-Dokuments. Sie sollten den Gltigkeitsbereich _root nur verwenden, wenn dies unbedingt erforderlich ist. Anstelle von _root knnen Sie relative Zielpfade verwenden.

Punktsyntax und Zielpfade

95

Wenn Ihr Code _root enthlt, knnen beim Laden der SWF-Datei in ein anderes Flash-Dokument Fehler auftreten. Wenn die SWF-Datei in eine andere SWF-Datei geladen wird, kann _root in der geladenen Datei auf den root-Gltigkeitsbereich der SWF-Datei verweisen, in die die Datei geladen wird, also nicht wie vorgesehen auf den eigenen rootGltigkeitsbereich. Dies kann zu unerwarteten Ergebnissen oder Funktionsfehlern fhren.

Die Schaltflche Zielpfad einfgen


In manchen Fllen kann es schwierig sein, zu bestimmen, wie ein bestimmter Zielpfad lautet oder welcher Zielpfad fr den Code erforderlich ist. Wenn Sie auf eine Instanz auf der Bhne verweisen, knnen Sie auf die Schaltflche Zielpfad einfgen klicken, um den Pfad dieser Instanz zu ermitteln.
So verwenden Sie die Schaltflche Zielpfad einfgen:
1.

Klicken Sie im Bedienfeld Aktionen (Fenster > Aktionen) auf die Schaltflche Zielpfad einfgen. Die Movieclips im aktuellen Dokument werden in einem Dialogfeld angezeigt. Whlen Sie eine Instanz in der Liste im Dialogfeld aus. Klicken Sie auf OK. Der Zielpfad der ausgewhlten Instanz wird im Skriptbereich eingeblendet.

2. 3. 4.

Schrgstrichsyntax
In Flash 3 und Flash 4 wurde der Zielpfad eines Movieclips oder einer Variablen in der Schrgstrichsyntax angegeben. Diese Syntax wird von ActionScript 1.0 in Flash Player 7 und frheren Versionen untersttzt, nicht aber in ActionScript 2.0 und Flash Player 7 oder Flash Player 8. Sie sollten die Schrgstrichsyntax nur verwenden, wenn keine andere Mglichkeit verfgbar ist, beispielsweise wenn Sie Material erstellen, das konkret fr Flash Player 4 oder Flash Lite 1.1 (und frher) vorgesehen ist. Weitere Informationen zu Flash Lite finden Sie auf der Flash Lite-Produktseite.

96

Syntax- und Sprachgrundlagen

Interpunktionszeichen
In Flash werden mehrere Interpunktionszeichen verwendet. Die hufigsten Interpunktionszeichen sind Semikola (;), Doppelpunkte (:) sowie runde [()] und geschweifte Klammern ({}). Diese Interpunktionszeichen haben jeweils eine besondere Bedeutung in der Flash-Sprache und dienen beispielsweise zum Definieren von Datentypen, zum Abschlieen von Anweisungen und zum Strukturieren des ActionScript-Codes. In den folgenden Abschnitten wird beschrieben, wie Sie Interpunktionszeichen im Code verwenden. Weitere Informationen zu Interpunktionszeichen finden Sie unter den folgenden Themen:

Semikola und Doppelpunkte auf Seite 97 Geschweifte Klammern auf Seite 98 Runde Klammern auf Seite 102 Literale auf Seite 103 Kommentare auf Seite 105

Weiter Informationen zum Punkt-Operator (.) und zu Array-Zugriffsoperatoren ([]) finden Sie unter Punktoperatoren und Array-Zugriffsoperatoren verwenden auf Seite 159. Einzelheiten zu Leerrumen und zur Codeformatierung finden Sie unter ActionScript-Syntax formatieren auf Seite 778.

Semikola und Doppelpunkte


ActionScript-Anweisungen werden mit einem Semikolon (;) abgeschlossen, wie in den beiden folgenden Codezeilen gezeigt:
var myNum:Number = 50; myClip._alpha = myNum;

Wenn Sie das Semikolon weglassen, geht der ActionScript-Compiler davon aus, dass jede Codezeile eine einzelne Anweisung darstellt. Es empfiehlt sich jedoch meist, Semikola zu verwenden, weil sie die Lesbarkeit des Codes verbessern. Wenn Sie im Bedienfeld Aktionen oder im Skriptfenster auf die Schaltflche Auto-Format klicken, werden standardmig Semikola an das Ende der Anweisungen angefgt.
H IN W E I S

Durch die Verwendung von Semikola knnen Sie zwar mehrere Anweisungen in eine Codezeile platzieren, doch wirkt sich dies meist negativ auf die Lesbarkeit des Codes aus.

Interpunktionszeichen

97

Semikola werden auch in for-Schleifen verwendet, und zwar um Parameter voneinander zu trennen, wie im folgenden Beispiel gezeigt. Das Beispiel bewirkt eine Schleife von 0 - 9 und zeigt dann jede Zahl im Bedienfeld Ausgabe an:
var i:Number; for (i = 0; i < 10; i++) { trace(i); // 0,1,...,9 }

Sie verwenden Doppelpunkte (:) im Code, um den Variablen Datentypen zuzuweisen. Um einem Element einen bestimmten Datentyp zuzuweisen, verwenden Sie wie im folgenden Beispiel das Schlsselwort var und die Doppelpunktsyntax:
// strikte Variablen- oder Objekttypisierung var myNum:Number = 7; var myDate:Date = new Date(); // strikte Parametertypisierung function welcome(firstName:String, myAge:Number) { } // strikte Typisierung des Parameters und des Rckgabewerts function square(num:Number):Number { var squared:Number = num * num; return squared; }

Sie knnen den Datentyp von Objekten deklarieren, die auf integrierten Klassen (Button, Date, MovieClip usw.) und auf benutzerdefinierten Klassen und Schnittstellen basieren. Im folgenden Codebeispiel erstellen Sie ein neues Objekt des benutzerdefinierten Typs Student:
var firstStudent:Student = new Student();

Auerdem knnen Sie festlegen, dass Objekte den Datentyp Function oder Void aufweisen. Weitere Informationen zum Zuweisen von Datentypen finden Sie in Kapitel 3, Daten und Datentypen auf Seite 35.

Geschweifte Klammern
Sie verwenden geschweifte Klammern ({}), um ActionScript-Ereignisse, -Klassendefinitionen und -Funktionen in Blcken zu gruppieren. Die rechte Klammer befindet sich auf derselben Zeile wie die Deklaration.
H I N W E IS 98

Sie knnen die rechte Klammer zwar auch in die Zeile setzen, die auf die Deklaration folgt, doch empfiehlt es sich der Einheitlichkeit wegen, die rechte Klammer in derselben Zeile wie die Deklaration zu platzieren. Informationen zu geschweiften Klammern und Kodierungskonventionen finden Sie in Kapitel 17, Bewhrte Verfahren und Kodierungskonventionen fr ActionScript 2.0 auf Seite 743.

Syntax- und Sprachgrundlagen

Setzen Sie Anweisungen, die Teil einer Kontrollstruktur bilden (wie if..else oder for), in geschweifte Klammern, selbst wenn sie nur eine einzige Anweisung enthlt. Durch dieses Verfahren vermeiden Sie Fehler in ActionScript, wenn Sie vergessen, Ihrem Code geschweifte Klammern hinzuzufgen. Das folgende Beispiel zeigt schlecht geschriebenen Code:
var numUsers:Number; if (numUsers == 0) trace("no users found.");

Obwohl dieser Code fehlerfrei ausgefhrt wird, gilt es als schlechter Stil, die Anweisungen nicht in geschweifte Klammern einzuschlieen.
TIPP

Wenn Sie auf die Schaltflche Auto-Format klicken, werden dieser Anweisung geschweifte Klammern hinzugefgt.

Wenn Sie in diesem Fall nach der trace-Anweisung eine zweite Anweisung hinzufgen, wird diese ausgefhrt, auch wenn die Variable numUsers 0 ergibt. Dies kann zu unerwarteten Ergebnissen fhren. Fgen Sie deshalb geschweifte Klammern hinzu, damit der Code wie folgt aussieht:
var numUsers:Number; if (numUsers == 0) { trace("no users found"); }

Im folgenden Beispiel erstellen Sie ein Ereignis-Listener-Objekt und eine MovieClipLoader-Instanz.


var imgUrl:String = "http://www.helpexamples.com/flash/images/image1.jpg"; this.createEmptyMovieClip("img_mc", 100); var mclListener:Object = new Object(); mclListener.onLoadStart = function() { trace("starting"); }; mclListener.onLoadInit = function(target_mc:MovieClip):Void { trace("success"); }; mclListener.onLoadError = function(target_mc:MovieClip):Void { trace("failure"); }; var myClipl:MovieClipLoader = new MovieClipLoader(); myClipl.addListener(mclListener); myClipl.loadClip(imgUrl, img_mc);

Das nchste Beispiel zeigt eine einfache Klassendatei, die zur Erstellung eines Student-Objekts verwendet werden knnte. Weitere Einzelheiten zu Klassendateien finden Sie in Kapitel 6, Klassen auf Seite 205.

Interpunktionszeichen

99

So verwenden Sie geschweifte Klammern in einer ActionScript-Datei:


1. 2. 3.

Whlen Sie Datei > Neu > ActionScript-Datei. Whlen Sie Datei > Speichern unter, und nennen Sie das neue Dokument Student.as. Fgen Sie der AS-Datei den folgenden ActionScript-Code hinzu:
// Student.as class Student private var private var private var private var { _id:String; _firstName:String; _middleName:String; _lastName:String;

public function Student(id:String, firstName:String, middleName:String, lastName:String) { this._id = id; this._firstName = firstName; this._middleName = middleName; this._lastName = lastName; } public function get firstName():String { return this._firstName; } public function set firstName(value:String):Void { this._firstName = value; } // ... } 4. 5. 6. 7.

Speichern Sie die Klassendatei. Whlen Sie Datei > Neu > Flash-Dokument, um eine neue FLA-Datei zu erstellen. Speichern Sie die neue FLA-Datei unter dem Namen student_test.fla. Geben Sie in Bild 1 der Hauptzeitleiste den folgenden ActionScript-Code ein:
// student_test.fla import Student; var firstStudent:Student = new Student("cst94121", "John", "H.", "Doe"); trace(firstStudent.firstName); // John firstStudent.firstName = "Craig"; trace(firstStudent.firstName); // Craig

8. 9.

Whlen Sie Datei > Speichern, um die genderte Datei student_test.fla zu speichern. Whlen Sie Steuerung > Film testen, um die FLA- und AS-Dateien zu testen.

Im nchsten Beispiel wird gezeigt, wie Sie geschweifte Klammern bei der Arbeit mit Funktionen einsetzen.

100

Syntax- und Sprachgrundlagen

So verwenden Sie geschweifte Klammern mit Funktionen:


1. 2. 3.

Whlen Sie Datei > Neu > Flash-Dokument, um eine neue FLA-Datei zu erstellen. Whlen Sie Datei > Speichern unter, und nennen Sie die neue Datei checkform.fla. Ziehen Sie eine Instanz der Label-Komponente aus dem Bedienfeld Komponenten auf die Bhne. ffnen Sie den Eigenschafteninspektor (Fenster > Eigenschaften > Eigenschaften), und whlen Sie die Label-Komponenteninstanz aus. Geben Sie dann den Namen status_lbl in das Feld Instanzname ein. Geben Sie den Wert 200 in das Textfeld B (Breite) ein, um die Komponente auf eine Breite von 200 Pixel einzustellen. Ziehen Sie eine Instanz der TextInput-Komponente auf die Bhne, und weisen Sie ihr den Instanznamen firstName_ti zu. Ziehen Sie eine Instanz der Button-Komponente auf die Bhne, und weisen Sie ihr den Instanznamen submit_button zu. Whlen Sie das erste Bild in der Zeitleiste aus, und geben Sie im Bedienfeld Aktionen den folgenden ActionScript-Code ein:
function checkForm():Boolean { status_lbl.text = ""; if (firstName_ti.text.length == 0) { status_lbl.text = "Please enter a first name."; return false; } return true; } function clickListener(evt_obj:Object):Void { var success:Boolean = checkForm(); }; submit_button.addEventListener("click", clickListener);

4.

5.

6.

7.

8.

9.

Whlen Sie Datei > Speichern, um das Flash-Dokument zu speichern. > Film testen, um den Code in der Authoring-Umgebung zu testen. Wenn Sie auf der Bhne auf die Button-Instanz klicken und die TextInput-Komponente firstName_ti keinen Text enthlt, wird in der SWF-Datei eine Fehlermeldung eingeblendet. Dieser Fehler wird in der Label-Komponente angezeigt und weist den Benutzer darauf hin, dass ein Vorname eingegeben werden muss.

10. Whlen Sie Steuerung

Interpunktionszeichen

101

Im nchsten Beispiel mit geschweiften Klammern wird gezeigt, wie Eigenschaften innerhalb eines Objekts erstellt und definiert werden. In diesem Beispiel definieren Sie Eigenschaften im Objekt, indem Sie die Variablennamen innerhalb der geschweiften Klammern ({}) angeben:
var myObject:Object = {id:"cst94121", firstName:"John", middleName:"H.", lastName:"Doe"}; var i:String; for (i in myObject) { trace(i + ": " + myObject[i]); } /* id: cst94121 firstName: John middleName: H. lastName: Doe */

Object()

Sie knnen auch leere geschweifte Klammern als verkrzte Syntax fr die Funktion new verwenden. Der folgende Code erstellt beispielsweise eine leere Object-Instanz:
var myObject:Object = {};
TIPP 102

Achten Sie darauf, dass fr jede rechte geschweifte Klammer das linke Gegenstck vorhanden ist.

Runde Klammern
Wenn Sie eine Funktion in ActionScript definieren, setzen Sie die Parameter in runde Klammern [()], wie in den folgenden Codezeilen gezeigt:
function myFunction(myName:String, myAge:Number, happy:Boolean):Void { // Code hier einfgen. }

Beim Aufrufen einer Funktion werden auch alle zu bergebenden Parameter in runde Klammern gesetzt, wie im folgenden Beispiel:
myFunction("Carl", 78, true);

Mit runden Klammern knnen Sie die ActionScript-Rangfolge auer Kraft setzen oder die Lesbarkeit von ActionScript-Anweisungen verbessern. Sie knnen also die Berechnungsreihenfolge von Werten ndern, indem Sie bestimmte Werte in Klammern einschlieen, wie im folgenden Beispiel gezeigt:
var computedValue:Number = (circleClip._x + 20) * 0.8;

Wenn Sie keine Klammern angeben oder zwei separate Anweisungen verwenden, bewirkt die Rangfolge, dass die Multiplikation zuerst berechnet wird, das heit, die erste Berechnung wre 20 * 0,8. Das Ergebnis 16 wrde dann dem aktuellen Wert von circleClip._x hinzugefgt und der Variablen computedValue zugewiesen.

Syntax- und Sprachgrundlagen

Wenn Sie keine Klammern verwenden, mssen Sie eine Anweisung hinzufgen, um den Ausdruck auszuwerten, wie im folgenden Beispiel gezeigt:
var tempValue:Number = circleClip._x + 20; var computedValue:Number = tempValue * 0.8;

Wie bei eckigen und geschweiften Klammern mssen Sie auch bei runden Klammern sicherstellen, dass eine rechte und eine linke Klammer vorhanden ist.

Literale
Ein Literal ist ein Wert, der direkt im Code angezeigt wird. Literale sind konstante Werte in Flash-Dokumenten, das heit, diese Werte ndern sich nicht. Beispiele fr ein Literal sind true, false, 0, 1, 52 oder selbst der String foo. Bei den folgenden Beispielen handelt es sich um Literale:
17 "hello" -3 9.4 null undefined true false

Literale knnen auch zu zusammengesetzten Literalen gruppiert werden. Array-Literale werden in eckige Klammern ([]) eingeschlossen. Zum Trennen mehrerer Array-Elemente wird ein Komma (,) verwendet. Ein Array-Literal kann zum Initialisieren eines Arrays verwendet werden. Die folgenden Beispiele zeigen zwei Arrays, die mit Array-Literalen initialisiert werden. Sie knnen die Anweisung new verwenden und das zusammengesetzte Literal als Parameter an den Konstruktor der Array-Klasse bergeben. Sie haben jedoch auch die Mglichkeit, Literalwerte beim Erstellen von Instanzen der integrierten ActionScriptKlassen direkt zuzuweisen.
// new-Anweisung verwenden var myStrings:Array = new Array("alpha", "beta", "gamma"); var myNums:Array = new Array(1, 2, 3, 5, 8); // Literal direkt zuweisen var myStrings:Array = ["alpha", "beta", "gamma"]; var myNums:Array = [1, 2, 3, 5, 8];

Interpunktionszeichen

103

Literale knnen auch zum Initialisieren von generischen Objekten verwendet werden. Ein generisches Objekt ist eine Instanz der Object-Klasse. Objekt-Literale werden in geschweifte Klammern ({}) eingeschlossen. Zum Trennen mehrerer Objekteigenschaften wird ein Komma (,) verwendet. Jede Eigenschaft wird mit einem Doppelpunkt (:) deklariert, der den Namen der Eigenschaft von ihrem Wert trennt. Sie knnen ein generisches Objekt mit der Anweisung new erstellen und das Objekt-Literal als Parameter an den Konstruktor der Object-Klasse bergeben. Sie haben aber auch die Mglichkeit, das Objekt-Literal der deklarierten Instanz direkt zuzuweisen. Der folgende Beispielcode erstellt ein neues generisches Objekt und initialisiert es mit den drei Eigenschaften propA, propB und propC, deren Werte auf 1, 2 bzw. 3 eingestellt sind.
// new-Anweisung verwenden var myObject:Object = new Object({propA:1, propB:2, propC:3}); // Literal direkt zuweisen var myObject:Object = {propA:1, propB:2, propC:3};

Verwechseln Sie ein String-Literal nicht mit einem String-Objekt. Im folgenden Beispiel erstellt die erste Codezeile das String-Literal firstStr, die zweite Codezeile hingegen das String-Objekt secondStr.
var firstStr:String = "foo" var secondStr:String = new String("foo")

Sie sollten String-Literale verwenden, es sei denn, Sie bentigen unbedingt ein StringObjekt. Weitere Informationen zu Strings finden Sie unter Strings und die String-Klasse auf Seite 460.

104

Syntax- und Sprachgrundlagen

Kommentare
Sie knnen Code mit Textkommentaren versehen, die nicht vom Compiler ausgewertet werden. Beispielsweise knnen Sie Kommentare im Code verwenden, um zu beschreiben, welche Funktionsweise der Code hat oder welche Daten an das Dokument zurckgegeben werden. Kommentare knnen Ihnen dabei helfen, sich wichtige Kodierungsentscheidungen zu merken. Zudem knnen sie fr andere Personen hilfreich sein, die Ihren Code lesen. Die Kommentare sollen den Code nicht einfach bersetzen, sondern seine Aufgabe deutlich erklren. Ist etwas nicht durch den Code selbst klar ersichtlich, sollten Sie Kommentare hinzufgen. Es wird dringend empfohlen, Kommentare in Skripts einzufgen. Kommentare dokumentieren die Entscheidungen, die Sie beim Verfassen des Codes getroffen haben, und beantworten die Fragen Wie? und Warum?. Kommentare vereinfachen das Verstndnis des ActionScript-Codes. Sie knnen z. B. eine Problemlsung in Kommentaren beschreiben, so dass Sie oder andere Entwickler ganz einfach die Codebereiche finden knnen, die aktualisiert oder korrigiert werden mssen. Wenn das Problem in einer zuknftigen Version von Flash oder Flash Player behoben wird, knnen Sie den ActionScript-Code verbessern, indem Sie die Problemlsung entfernen. Gestalten Sie Ihre Kommentare mglichst bersichtlich. Ein Beispiel fr unbersichtliche Kommentare ist eine Zeile mit Gleichheitszeichen (=) oder Sternchen (*), die einen Block oder eine Abtrennung um Ihre Kommentare bilden. Verwenden Sie stattdessen Leerzeichen, um Ihre Kommentare vom ActionScript-Code zu trennen. Wenn Sie den ActionScript-Code formatieren, indem Sie im Bedienfeld Aktionen oder im Skriptfenster auf die Schaltflche Auto-Format klicken, werden die Leerzeichen entfernt. Fgen Sie dem Code die Leerzeichen wieder hinzu, oder verwenden Sie einzelne Kommentarzeilen (//), um den Abstand wiederherzustellen. Es ist einfacher, diese Zeilen nach der Formatierung des Codes wieder zu entfernen, als festzustellen, wo die Leerzeichen sich befanden. Bevor Sie Ihr Projekt bereitstellen, sollten Sie alle berflssigen Kommentare aus dem Code entfernen, wie beispielsweise X- und Y-Variablen definieren, da solche Kommentare fr andere Entwickler nicht erforderlich sind. Wenn Sie feststellen, dass Ihr ActionScript viele Kommentare enthlt, berlegen Sie sich, ob Sie einen Teil des Codes neu schreiben sollten. Wenn Sie zahlreiche Kommentare ber die Funktionsweise des Codes einschlieen mssen, ist dies meist ein Zeichen dafr, dass der ActionScript-Code umstndlich und nicht sehr intuitiv ist.

Interpunktionszeichen

105

Wenn die farbliche Syntaxhervorhebung aktiviert ist, werden Kommentare automatisch grau dargestellt. Die Lnge der Kommentare hat keinen Einfluss auf die Gre der exportierten Datei. Auerdem unterliegen Kommentare nicht den Regeln, die fr Syntax und Schlsselwrter in ActionScript gelten.
H I NW E I S

Die Verwendung von Kommentaren ist besonders wichtig in ActionScript, mit dem andere unterrichtet werden sollen. Fgen Sie Kommentare in Ihren Code ein, wenn Sie Flash-Musteranwendungen zu Unterrichtszwecken erstellen oder wenn Sie Artikel oder Tutorials fr ActionScript verfassen.

Einzeilige Kommentare
Sie knnen einzeilige Kommentare verwenden, um einer einzelnen Codezeile einen Kommentar hinzuzufgen. Beispielsweise knnen Sie eine Codezeile auskommentieren oder in einer kurzen Beschreibung die Auswirkung eines Codeabschnitts erlutern. Um eine Zeile oder einen Teil der Zeile als Kommentar zu kennzeichnen, stellen Sie dem Kommentar zwei Schrgstriche (//) voran, wie im folgenden Codebeispiel:
// Der folgende Code setzt eine lokale Variable fr das Alter. var myAge:Number = 26;

Mit einzeiligen Kommentaren werden meist kleine Codefragmente erlutert. Sie knnen einzeilige Kommentare fr alle kurzen Kommentare verwenden, die sich auf einer Zeile unterbringen lassen. Das folgende Beispiel enthlt einen einzeiligen Kommentar:
while (condition) { // Bedingung mit Anweisungen verarbeiten }

Mehrzeilige Kommentare
Mehrzeilige Kommentare, auch Blockkommentare genannt, werden fr Kommentare verwendet, die sich ber mehrere Zeilen erstrecken. Entwickler verwenden diese Kommentare hufig, um Dateien, Datenstrukturen, Methoden und Dateibeschreibungen zu erlutern. Kommentarblcke stehen in der Regel am Anfang einer Datei und vor oder in einer Methode. Um einen Kommentarblock zu erstellen, setzen Sie /* an den Anfang der Kommentarzeilen und */ an das Ende des Kommentarblocks. So knnen Sie lange Kommentare erstellen, ohne jede Zeile mit // zu beginnen. Die Verwendung von // fr mehrere aufeinander folgende Zeilen kann bei der Bearbeitung der Kommentare zu Problemen fhren. Das Format fr mehrzeilige Kommentare wird im Folgenden gezeigt.
/* The following ActionScript initializes variables used in the main and sub-menu systems. Variables are used to track what options are clicked. */

106

Syntax- und Sprachgrundlagen

Durch das so genannte Auskommentieren groer Skriptabschnitte, also das Verwandeln der Skriptabschnitte in einen Kommentarblock, knnen Sie gezielt Abschnitte des Skripts testen. Wenn Sie beispielsweise das folgende Skript ausfhren, wird kein Teil des Codes im Kommentarblock ausgefhrt:
// Der folgende Code wird ausgefhrt. var x:Number = 15; var y:Number = 20; // Der folgende Code ist auskommentiert und wird daher nicht ausgefhrt. /* // neues Date-Objekt erstellen var myDate:Date = new Date(); var currentMonth:Number = myDate.getMonth(); // Monatszahl in Monatsnamen umwandeln var monthName:String = calcMonth(currentMonth); var year:Number = myDate.getFullYear(); var currentDate:Number = myDate.getDate(); */ // Der folgende Code wird ausgefhrt. var namePrefix:String = "My name is"; var age:Number = 20;
TIPP

Nachgestellte Kommentare
Mit nachgestellten Kommentaren knnen Sie einen Kommentar auf derselben Zeile wie den Code platzieren. Diese Kommentare werden auf derselben Zeile wie der ActionScript-Code angezeigt. Entwickler verwenden nachgestellte Kommentare hufig, um den Inhalt einer Variablen anzugeben oder um den Wert zu beschreiben, der von einer ActionScript-Zeile zurckgegeben wird. Nachgestellte Kommentare werden folgendermaen formatiert:
var myAge:Number = 26; // Variable fr mein Alter trace(myAge); // 26

TIPP

Wenn Sie die Kommentarzeichen (/* und */) auf separate Zeilen am Anfang und Ende des Kommentars setzen, knnen Sie sie leicht durch doppelte Schrgstriche (//) vor diesen Zeichen auskommentieren (z. B. ///* und //*/). So knnen Sie Ihren Code schnell und einfach kommentieren oder auskommentieren.

Es empfiehlt sich, eine leere Zeile vor einem Kommentarblock einzufgen.

Interpunktionszeichen

107

Versetzen Sie die Kommentare nach rechts, damit sie leicht vom Code zu unterscheiden sind. Versuchen Sie, die Kommentare nach Mglichkeit aneinander auszurichten, wie im folgenden Beispiel:
var myAge:Number = 28; var myCountry:String = "Canada"; var myCoffee:String = "Hortons"; // mein Alter // mein Land // mein Lieblingskaffee

Wenn Sie die automatische Formatierung verwenden (durch Klicken auf die Schaltflche Auto-Format im Bedienfeld Aktionen), werden nachgestellte Kommentare in die nchste Zeile verschoben. Fgen Sie diese Kommentare hinzu, nachdem Sie den Code formatiert haben. Andernfalls mssen Sie die Position des Kommentars nach Verwendung von Auto-Format wieder ndern.

Kommentare in Klassen
Sie knnen Klassen und Schnittstellen mit Kommentaren dokumentieren, um anderen Entwicklern das Verstndnis des Inhalts zu erleichtern. Sie knnen alle Klassendateien mit einem Kommentar beginnen, in dem Sie den Klassennamen, die Versionsnummer, das Datum und Ihr Copyright angeben. Beispielsweise knnen Sie Ihre Klassen mit einem Kommentar wie dem folgenden kommentieren:
/** Pelican class version 1.2 10/10/2005 copyright Adobe Systems Incorporated */

Mit Kommentarblcken werden Dateien, Datenstrukturen, Methoden und Dateibeschreibungen erlutert. Kommentarblcke stehen in der Regel am Anfang einer Datei und vor oder in einer Methode. Eine typische Klassen- oder Schnittstellendatei enthlt zwei Arten von Kommentaren: Dokumentierungskommentare und Implementierungskommentare. Mit den Dokumentierungskommentaren werden die Codespezifikationen, nicht jedoch die Implementierung beschrieben. Sie verwenden Dokumentierungskommentare zum Beschreiben von Schnittstellen, Klassen, Methoden und Konstruktoren. Mit den Implementierungskommentaren knnen Sie Code auskommentieren oder Kommentare zur Implementierung bestimmter Codeabschnitte hinzufgen.

108

Syntax- und Sprachgrundlagen

Fgen Sie pro Klasse, Schnittstelle oder Mitglied einen Dokumentierungskommentar ein, und zwar direkt vor der Deklaration. Wenn Sie weitere Informationen dokumentieren mchten, die sich nicht in die Dokumentierungskommentare einordnen lassen, verwenden Sie Implementierungskommentare (im Format von Kommentarblcken oder einzeiligen Kommentaren). Implementierungskommentare folgen direkt auf die Deklaration. Fr die beiden Kommentararten werden etwas unterschiedliche Trennzeichen verwendet. Dokumentierungskommentare werden durch /** und */ abgegrenzt, whrend bei Implementierungskommentaren die Trennzeichen /* und */ verwendet werden.
TIPP

Fgen Sie keine Kommentare ein, die sich nicht direkt auf die gelesene Klasse beziehen. Fgen Sie z. B. keine Kommentare ein, die das entsprechende Paket beschreiben.

Sie knnen auch einzeilige Kommentare, Kommentarblcke und nachgestellte Kommentare in Klassendateien verwenden. Weitere Informationen zu diesen Kommentartypen finden Sie in den folgenden Abschnitten: Einzeilige Kommentare auf Seite 106 Mehrzeilige Kommentare auf Seite 106 Nachgestellte Kommentare auf Seite 107

Konstanten und Schlsselwrter


Konstanten und Schlsselwrter bilden das Kernstck der ActionScript-Syntax. Konstanten sind Eigenschaften mit einem festen Wert, der sich in der ganzen Anwendung nicht ndert. Flash enthlt mehrere vordefinierte Konstanten, die die Anwendungsentwicklung vereinfachen knnen. Ein Beispiel fr Konstanten finden Sie in der Key-Klasse, die zahlreiche Eigenschaften enthlt, wie Key.ENTER oder Key.PGDN. Wenn Sie Konstanten verwenden, mssen Sie sich beispielsweise nicht merken, dass die Tastencodewerte fr die Eingabetaste und die Bild-ab-Taste 13 bzw. 34 lauten. Der Einsatz von Konstanten vereinfacht nicht nur die Entwicklung und die Fehlerbehebung, sondern verbessert auch die Lesbarkeit des Codes. Schlsselwrter werden in ActionScript zur Ausfhrung bestimmter Aktionen verwendet. Es handelt sich dabei auch um reservierte Wrter, die deshalb nicht als Bezeichner verwendet werden knnen (wie Variablen- oder Funktionsnamen). Beispiele fr reservierte Schlsselwrter sind if, else, this, function und return.

Konstanten und Schlsselwrter

109

Weitere Informationen zu Konstanten und Schlsselwrtern finden Sie unter den folgenden Themen:

Konstanten verwenden auf Seite 110 Schlsselwrter auf Seite 113 Reservierte Wrter auf Seite 113

Weitere Informationen zu Objekten und Eigenschaften finden Sie unter Object-Datentyp auf Seite 43. Eine Liste der sprachspezifischen Konstanten (wie false und NaN) finden Sie unter Elemente der ActionScript-Sprache > Konstanten im ActionScript 2.0Referenzhandbuch.

Konstanten verwenden
Konstanten sind Eigenschaften mit einem festen Wert, der nicht gendert werden kann. Deshalb ndern sich Konstanten in der ganzen Anwendung nicht. ActionScript enthlt zahlreiche vordefinierte Konstanten. Die Konstanten BACKSPACE, ENTER, SPACE und TAB sind beispielsweise Eigenschaften der Key-Klasse und verweisen auf Tasten der Computertastatur. Die Konstante Key.TAB hat stets dieselbe Bedeutung: Sie bezeichnet die Tabulatortaste einer Tastatur. Konstanten eignen sich zum Vergleichen von Werten sowie zum Einsatz von unvernderlichen Werten in einer Anwendung. Mit der folgenden Anweisung wird geprft, ob der Benutzer die Eingabetaste drckt:
var keyListener:Object = new Object(); keyListener.onKeyDown = function() { if (Key.getCode() == Key.ENTER) { trace("Are you ready to play?"); } }; Key.addListener(keyListener);

Mglicherweise mssen Sie Tastaturbefehle in der Authoring-Umgebung deaktivieren, damit der oben gezeigte ActionScript-Code funktioniert. Whlen Sie im Hauptmen Steuerung > Film testen. Whrend der Vorschau der SWF-Datei im Player whlen Sie dann im Vorschaufenster der SWF-Datei Steuerung > Tastenbefehle deaktivieren. In Flash knnen Sie benutzerdefinierte konstante Werte nur erstellen, wenn Sie eigene Klassen mit privaten Mitgliedsvariablen erstellen. Sie knnen keine schreibgeschtzte Variable mit Flash erstellen.

110

Syntax- und Sprachgrundlagen

Variablen sollten in Kleinbuchstaben oder einer Mischung aus Gro- und Kleinbuchstaben angegeben werden. Konstanten (also Variablen, die sich nicht ndern), sollten jedoch in Grobuchstaben angegeben werden. Trennen Sie Wrter wie im folgenden ActionScript mit Unterstrichen:
var BASE_URL:String = "http://www.adobe.com"; // Konstante var MAX_WIDTH:Number = 10; // Konstante

Schreiben Sie statische Konstanten mit Grobuchstaben, und trennen Sie einzelne Wrter durch Unterstriche voneinander. Kodieren Sie numerische Konstanten nicht direkt, es sei denn, es handelt sich um die Konstante 1, 0 oder -1, die in einer for-Schleife als Zhlerwert verwendet werden kann. Sie knnen Konstanten verwenden, wenn Sie auf eine Eigenschaft verweisen mssen, deren Wert sich nie ndert. Hiermit knnen Sie typografische Fehler in Ihrem Code finden, die mglicherweise unentdeckt bleiben, wenn Sie Literale verwenden. Sie knnen hiermit auch den Wert an einer einzigen Stelle ndern. Weitere Informationen zu Literalen finden Sie unter Literale auf Seite 103. Mit der Klassendefinition im nchsten Beispiel werden drei Konstanten erstellt, die den Namenskonventionen von ActionScript 2.0 entsprechen.
So verwenden Sie Konstanten in einer Anwendung:
1. 2. 3.

Whlen Sie Datei > Neu > ActionScript-Datei, um eine AS-Datei zu erstellen. Nennen Sie die neue Datei ConstExample.as. Geben Sie den folgenden Code in das Skriptfenster ein:
class ConstExample { public static var EXAMPLE_STATIC:String = "Global access"; public var EXAMPLE_PUBLIC:String = "Public access"; private var EXAMPLE_PRIVATE:String = "Class access"; }

Bei EXAMPLE_STATIC handelt es sich um eine statische Eigenschaft. Dies bedeutet, dass die Eigenschaft sich nicht auf eine bestimmte Instanz der Klasse, sondern auf die Klasse selbst bezieht. Fr den Zugriff auf eine statische Eigenschaft einer Klasse mssen Sie den Namen der Klasse anstelle des Instanznamens verwenden. Der Zugriff auf eine statische Eigenschaft ber eine Klasseninstanz ist nicht mglich.
4. 5.

Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen const.fla. ffnen Sie das Bedienfeld Aktionen, und geben Sie den folgenden Code in das erste Bild der Zeitleiste ein:
trace(ConstExample.EXAMPLE_STATIC); // Ausgabe: Globaler Zugriff

Wenn Sie die Eigenschaft EXAMPLE_STATIC als statisch deklarieren, verwenden Sie diesen Code fr den Zugriff auf den Wert der Eigenschaft.

Konstanten und Schlsselwrter

111

6.

Whlen Sie Steuerung > Film testen, um das Dokument zu testen. Im Bedienfeld Ausgabe wird der Text Globaler Zugriff angezeigt. Geben Sie im Bedienfeld Aktionen den folgenden Code nach dem Code ein, den Sie in Schritt 5 hinzugefgt haben.
trace(ConstExample.EXAMPLE_PUBLIC); // Fehler trace(ConstExample.EXAMPLE_PRIVATE); // Fehler

7.

8.

Whlen Sie Steuerung > Film testen, um das Dokument zu testen. Die Eigenschaften EXAMPLE_PUBLIC und EXAMPLE_PRIVATE sind nicht statisch. Wenn Sie versuchen, ber die Klasse auf die Werte zuzugreifen, wird die folgende Fehlermeldung eingeblendet:
The property being referenced does not have the static attribute.

Um auf eine nicht statische Eigenschaft zuzugreifen, mssen Sie ber eine Instanz der Klasse auf den Wert zugreifen. Da EXAMPLE_PUBLIC eine ffentliche Eigenschaft ist, steht sie auch fr Code auerhalb der Klassendefinition zur Verfgung.
9.

Lschen Sie im Bedienfeld Aktionen die Anweisungen trace, die Sie in den Schritten 5 und 7 hinzugefgt haben. Sie im Bedienfeld Aktionen den folgenden Code ein:
var myExample:ConstExample = new ConstExample(); trace(myExample.EXAMPLE_PUBLIC); // Ausgabe: ffentlicher Zugriff

10. Geben

Dieser Code erstellt die Instanz myExample und greift auf die Eigenschaft EXAMPLE_PUBLIC zu.
11.

Whlen Sie Steuerung > Film testen, um das Dokument zu testen. Im Bedienfeld Ausgabe wird der Text ffentlicher Zugriff angezeigt. Sie im Bedienfeld Aktionen die Anweisung trace, die Sie in Schritt 10 hinzugefgt haben.

12. Lschen

13.

Geben Sie im Bedienfeld Aktionen den folgenden Code ein:


trace(myExample.EXAMPLE_PRIVATE); // Fehler EXAMPLE_PRIVATE ist eine private Eigenschaft und steht deshalb nur innerhalb der Klassendefinition zur Verfgung.

14. Whlen

Sie Steuerung > Film testen, um das Dokument zu testen.

darauf ist nicht mglich

Im Bedienfeld Ausgabe wird der Text Das Mitglied ist privat, und der Zugriff angezeigt. Weitere Informationen zu integrierten Klassen und zur Erstellung von benutzerdefinierten Klassen finden Sie in Kapitel 6, Klassen auf Seite 205.

112

Syntax- und Sprachgrundlagen

Schlsselwrter
Schlsselwrter sind ActionScript-Wrter, die eine bestimmte Funktion ausben. Beispielsweise verwenden Sie das Schlsselwort var, um eine Variable zu deklarieren. Das Schlsselwort var wird in der folgenden Codezeile gezeigt:
var myAge:Number = 26;

Ein Schlsselwort ist ein reserviertes Wort mit einer besonderen Bedeutung. Beispielsweise definieren Sie mit dem Schlsselwort class eine neue ActionScript-Klasse, und mit dem Schlsselwort var deklarieren Sie lokale Variablen. Weitere Beispiele fr reservierte Schlsselwrter sind: if, else, this, function und return. Schlsselwrter knnen nicht als Bezeichner verwendet werden (wie Variablen- oder Funktionsnamen), und sie sollten in FLA-Dateien nicht anderweitig eingesetzt werden (beispielsweise als Instanznamen). Das Schlsselwort var haben Sie bereits mehrmals verwendet, besonders in Kapitel 3, Daten und Datentypen auf Seite 35. In der ActionScript-Sprache sind einige Wrter fr bestimmte Zwecke reserviert. Deshalb knnen Schlsselwrter nicht als Bezeichner verwendet werden (wie Variablen- oder Funktionsnamen). Eine Liste dieser Schlsselwrter finden Sie unter Reservierte Wrter auf Seite 113.

Reservierte Wrter
Reservierte Wrter knnen im Code nicht als Bezeichner verwendet werden, da sie fr die Verwendung durch ActionScript reserviert sind. Zu den reservierten Wrtern gehren Schlsselwrter, das heit ActionScript-Anweisungen, sowie Wrter, die fr eine zuknftige Verwendung reserviert sind. Sie sollten diese Wrter nicht als Namen fr Variablen, Instanzen, benutzerdefinierte Klassen usw. verwenden, da dies zu technischen Problemen fhren kann. Einige Wrter sind zwar nicht reserviert, sollten aber dennoch nicht als Bezeichner im ActionScript-Code verwendet werden (wie Variablen- und Instanznamen). Diese Wrter werden von den integrierten Klassen verwendet, die die ActionScript-Sprache bilden und als Sprachkonstrukte bezeichnet werden. Verwenden Sie also nicht die Namen von Eigenschaften, Methoden, Klassen, Schnittstellen, Komponentenklassen und Schnittstellen als Bezeichner im Code (beispielsweise zum Benennen von Variablen, Klassen und Instanzen). Weitere Informationen zu reservierten Schlsselwrtern, die zu Fehlern in Ihrem Skripts fhren knnen und geschtzten Schlsselwrter, die fr eine zuknftige Verwendung durch ActionScript oder die Sprachspezifikation ECMAScript (ECMA-262) Edition 4 Draft reserviert sind, knnen Sie Reservierte Wrter und Sprachkonstrukte vermeiden auf Seite 747 entnehmen. Die Namen der Sprachkonstrukte finden Sie im ActionScript 2.0-Referenzhandbuch.

Konstanten und Schlsselwrter

113

Anweisungen
Mit Anweisungen werden in einer FLA-Datei bestimmte Aktionen ausgefhrt. Beispielsweise knnen Sie eine Bedingungsanweisung verwenden, um festzustellen, ob eine Bedingung zutrifft oder eine Komponente vorhanden ist. Dann kann der Code je nachdem, ob die Bedingung zutrifft oder nicht, bestimmte Aktionen ausfhren, wie Funktionen oder Ausdrcke. Mit der Bedingungsanweisung if wird beispielsweise eine Bedingung ausgewertet, um die nchste auszufhrende Aktion im Code zu bestimmen.
// if-Anweisung if (condition) { // Anweisungen; }

Ein weiteres Beispiel ist die Anweisung return, die ein Ergebnis als Wert der Funktion zurckgibt, in der sie ausgefhrt wird. ActionScript-Code kann auf verschiedene Weise geschrieben und formatiert werden. Entwickler verwenden oft eine unterschiedliche Syntax beim Schreiben von ActionScript, beispielsweise fr die Anordnung der Anweisungen oder die Position von geschweiften Klammern ({}) im Code. Obwohl Anweisungen auf unterschiedliche Weise geschrieben werden knnen, gelten einige allgemeine Richtlinien, die Sie beim Erstellen von ActionScript-Code beachten sollten.
Verwenden Sie pro Zeile nur eine Anweisung, um die Lesbarkeit von ActionScript zu verbessern.

Im folgenden Beispiel wird die empfohlene und die nicht empfohlene Verwendung von Anweisungen gezeigt:

theNum++; // empfohlen theOtherNum++; // empfohlen aNum++; anOtherNum++; // nicht empfohlen Weisen Sie Variablen als separate Anweisungen zu.

Betrachten Sie das folgende

ActionScript-Beispiel:
var myNum:Number = (a = b + c) + d;

Mit diesem ActionScript-Code wird eine Zuweisung im Code eingebettet, der nur schwer lesbar ist. Wie das folgende Beispiel zeigt, wird die Lesbarkeit verbessert, wenn Sie Variablen als separate Anweisungen zuweisen:
var a:Number = b + c; var myNum:Number = a + d;

In den folgenden Abschnitten wird beschrieben, wie Sie bestimmte Anweisungen in ActionScript schreiben. Informationen zum Schreiben und Formatieren von Ereignissen finden Sie in Kapitel 9, Ereignisse verarbeiten auf Seite 327.

114

Syntax- und Sprachgrundlagen

Weitere Informationen zu den einzelnen Anweisungen finden Sie unter den folgenden Themen:

Zusammengesetzte Anweisungen auf Seite 115 Bedingungen auf Seite 115 Aktionen mit Schleifen wiederholen auf Seite 126

Zusammengesetzte Anweisungen
Eine zusammengesetzte Anweisung besteht aus mehreren Anweisungen, die in geschweifte Klammern ({}) eingeschlossen sind. Eine zusammengesetzte Anweisung kann aus beliebigen ActionScript-Anweisungen bestehen. Im Folgenden wird eine typische zusammengesetzte Anweisung gezeigt. Die Anweisungen in den geschweiften Klammern werden durch eine Einrckung von der zusammengesetzten Anweisung abgesetzt, wie im folgenden Beispiel gezeigt:
var a:Number = 10; var b:Number = 10; if (a == b) { // Dieser Code ist eingerckt. trace("a == b"); trace(a); trace(b); }

Diese zusammengesetzte Anweisung enthlt zwar mehrere Anweisungen, verhlt sich im ActionScript-Code aber wie eine einzelne Anweisung. Die ffnende geschweifte Klammer wird am Ende der zusammengesetzten Anweisung positioniert. Die schlieende geschweifte Klammer steht am Zeilenanfang und ist am Anfang der zusammengesetzten Anweisung ausgerichtet. Weitere Informationen zu geschweiften Klammern finden Sie unter Geschweifte Klammern auf Seite 98.

Bedingungen
Mit Bedingungen wird festgestellt, ob etwas zutrifft oder existiert. Je nachdem, ob eine Bedingung wahr ist oder nicht, knnen Sie dann wahlweise eine Aktion mithilfe von Schleifen wiederholen oder Aktionen ausfhren, wie beispielsweise Funktionen oder Ausdrcke. Beispielsweise knnen Sie feststellen, ob eine Variable definiert ist oder einen bestimmten Wert hat und dann je nach dem Ergebnis einen Codeblock ausfhren. Oder Sie knnen festlegen, dass die Grafiken im Flash-Dokument je nach Systemuhrzeit des Benutzers oder nach den aktuellen Wetterbedingungen gendert werden.

Anweisungen

115

Wenn Sie je nach bestehender Bedingung eine Aktion ausfhren oder wiederholen (also Schleifenanweisungen erstellen) mchten, knnen Sie die folgenden Anweisungen verwenden: if, else, else if, for, while, do while, for..in oder switch. Weitere Informationen zu den verfgbaren Bedingungen und zum Schreiben von Bedingungen finden Sie unter den folgenden Themen:

Bedingungen schreiben auf Seite 116 if-Anweisung verwenden auf Seite 117 if..else-Anweisung verwenden auf Seite 118 if..else if-Anweisung verwenden auf Seite 119 switch-Anweisung verwenden auf Seite 120 try..catch- und try..catch..finally-Anweisungen verwenden auf Seite 122 Bedingungsoperator und Alternativsyntax auf Seite 125

Bedingungen schreiben
Anweisungen, die prfen, ob eine bestimmte Bedingung erfllt ist (true) oder nicht (false), beginnen mit dem Schlsselwort if. Lautet das Ergebnis einer Bedingung true, fhrt ActionScript die nchste Anweisung aus. Wenn die Bedingung false zurckgibt, fhrt ActionScript mit der nchsten Anweisung auerhalb des betreffenden Codeblocks fort.
TIPP 116

Um eine mglichst hohe Leistung Ihres Codes zu erzielen, sollten Sie die Bedingungen, die mit der grten Wahrscheinlichkeit erfllt sein drften, als erste berprfen.

Die folgenden Anweisungen berprfen drei Bedingungen. Mit dem Schlsselwort else if werden alternative Bedingungen angegeben, die berprft werden, wenn die vorhergehenden Bedingungen nicht erfllt (false) sind.
if ((passwordTxt.text.length == 0) || (emailTxt.text.length == 0)) { gotoAndStop("invalidLogin"); } else if (passwordTxt.text == userID){ gotoAndPlay("startProgram"); }

Wenn in diesem Codebeispiel die Lnge der Felder passwordTxt oder emailTxt 0 ist (weil der Benutzer beispielsweise keinen Wert eingegeben hat), ruft das Flash-Dokument die Bildbezeichnung invalidLogin auf. Wenn die Felder passwordTxt und emailTxt Werte enthalten und der Inhalt des Feldes passwordTxt der Variablen userID entspricht, wird die Bildbezeichnung startProgram aufgerufen.
switch

Wenn Sie eine von mehreren Bedingungen berprfen mchten, knnen Sie die Anweisung anstelle von mehreren Anweisungen else if verwenden. Weitere Informationen zur Anweisung switch finden Sie unter switch-Anweisung verwenden auf Seite 120.

In den folgenden Abschnitten wird beschrieben, wie Sie verschiedene Bedingungen in Ihren ActionScript-Anwendungen schreiben.
Syntax- und Sprachgrundlagen

if-Anweisung verwenden
Sie verwenden die Anweisung if, wenn Sie mehrere Anweisungen ausfhren mchten, und zwar je nachdem, ob eine bestimmte Bedingung zutrifft oder nicht.
// if-Anweisung if (condition) { // Anweisungen; }

Die Anweisung if wird in mehreren Fllen bei der Arbeit an einem Flash-Projekt verwendet. Wenn Sie beispielsweise eine Flash-Website erstellen, bei der fr den Zugriff auf bestimmte Bereiche eine Benutzeranmeldung erforderlich ist, knnen Sie mit der Anweisung if berprfen, ob der Benutzer Text in die Felder fr Benutzernamen und Kennwort eingegeben hat. Wenn die Benutzernamen und Kennwrter anhand einer externen Datenbank berprft werden mssen, mchten Sie wahrscheinlich prfen, ob die eingegebene Kombination aus Benutzername und Kennwort einem Datensatz in der Datenbank entspricht. Auerdem mchten Sie berprfen, ob der Benutzer zum Zugriff auf den jeweiligen Bereich der Website berechtigt ist. Wenn Sie in Flash Animationsskripts erstellen, knnen Sie mit der Anweisung if testen, ob eine Instanz auf der Bhne sich noch innerhalb der Bhnengrenzen befindet. Angenommen, ein Ball bewegt sich entlang der Y-Achse nach unten. In diesem Fall knnen Sie feststellen, wann der Ball auf die untere Kante der Bhne trifft, und dann die Richtung wechseln, damit der Ball nach oben springt.
So verwenden Sie eine if-Anweisung:
1. 2.

Whlen Sie Datei > Neu und dann Flash-Dokument. Whlen Sie das erste Bild in der Zeitleiste aus, und geben Sie im Bedienfeld Aktionen den folgenden ActionScript-Code ein:
// String fr AM und PM erstellen var amPm:String = "AM"; // keine Parameter an Date bergeben, // Rckgabe ist daher aktuelles Datum/aktuelle Uhrzeit var current_date:Date = new Date(); // wenn aktuelle Stunde grer oder gleich 12 ist, // amPm-String auf "PM" setzen. if (current_date.getHours() >= 12) { amPm = "PM"; } trace(amPm);

3.

Whlen Sie Steuerung > Film testen, um den ActionScript-Code zu testen.

Anweisungen

117

In diesem Code erstellen Sie einen String, der je nach der aktuellen Uhrzeit AM oder PM enthlt. Wenn die aktuelle Stunde grer oder gleich 12 ist, wird der String amPM auf PM eingestellt. Dann zeigen Sie den String amPm an, und wenn die Stunde grer oder gleich 12 ist, wird PM angezeigt. Andernfalls wird AM angezeigt.

if..else-Anweisung verwenden
Mit der Bedingungsanweisung if..else knnen Sie eine Bedingung berprfen und dann je nachdem, ob die Bedingung zutrifft oder nicht, einen unterschiedlichen Codeblock ausfhren. Mit dem folgenden Code wird beispielsweise getestet, ob der Wert von x hher als 20 ist. Ist dies der Fall, wird eine Anweisung trace() generiert, andernfalls eine andere Anweisung trace():
if (x > 20) { trace("x is > 20"); } else { trace("x is <= 20"); }

Soll kein Alternativcodeblock ausgefhrt werden, knnen Sie die if-Anweisung auch ohne die else-Anweisung verwenden. Die Anweisung if..else in Flash hnelt der Anweisung if. Wenn Sie beispielsweise mit der Anweisung if berprfen, ob die eingegebenen Anmeldedaten eines Benutzers mit einem Datensatz in einer Datenbank bereinstimmen, knnen Sie den Benutzer umleiten, je nachdem, ob Benutzername und Kennwort richtig eingegeben wurden. Wenn die Anmeldedaten gltig sind, kann der Benutzer mit dem Block if auf eine Begrungsseite umgeleitet werden. Sind die Anmeldedaten jedoch ungltig, knnen Sie den Block else verwenden, um den Benutzer zum Anmeldeformular umzuleiten und eine Fehlermeldung anzuzeigen.
So verwenden Sie eine if..else-Anweisung in einem Dokument:
1. 2.

Whlen Sie Datei > Neu > Flash-Dokument, um eine neue FLA-Datei zu erstellen. Whlen Sie das erste Bild in der Zeitleiste aus, und geben Sie im Bedienfeld Aktionen den folgenden ActionScript-Code ein:
// String erstellen, der je nach Uhrzeit AM oder PM enthlt. var amPm:String; // keine Parameter an Date bergeben, Rckgabe ist daher aktuelles // Datum/aktuelle Uhrzeit. var current_date:Date = new Date(); // wenn aktuelle Stunde grer oder gleich 12 ist, // amPm-String auf "PM" setzen. if (current_date.getHours() >= 12) {

118

Syntax- und Sprachgrundlagen

amPm = "PM"; } else { amPm = "AM"; } trace(amPm); 3.

Whlen Sie Steuerung > Film testen, um den ActionScript-Code zu testen. In diesem Code erstellen Sie einen String, der je nach der aktuellen Uhrzeit AM oder PM enthlt. Wenn die aktuelle Stunde grer oder gleich 12 ist, wird der String amPM auf PM eingestellt. Dann zeigen Sie den String amPm an, und wenn die Stunde grer oder gleich 12 ist, wird PM angezeigt. Andernfalls wird im Bedienfeld Ausgabe der Text AM angezeigt.

if..else if-Anweisung verwenden


Mit der Bedingungsanweisung if..else if lassen sich mehrere Bedingungen berprfen. Verwenden Sie fr eine Anweisung if..else if die folgende Syntax:
// else-if-Anweisung if (condition) { // Anweisungen; } else if (condition) { // Anweisungen; } else { // Anweisungen; }

Sie verwenden einen Block if..else if in Ihrem Flash-Projekt, wenn Sie mehrere Bedingungen berprfen mssen. Wenn Sie beispielsweise je nach Uhrzeit eine unterschiedliche Grafik auf der Website anzeigen mchten, knnen Sie mehrere ifAnweisungen erstellen, die die Uhrzeit ermitteln (Vormittag, Nachmittag, Abend oder Nacht). Dann knnen Sie jeweils die passende Grafik anzeigen. Der folgende Code testet, ob der Wert x hher als 20 ist und ob x einen negativen Wert hat:
if (x > 20) { trace("x is > 20"); } else if (x < 0) { trace("x is negative"); }

Anweisungen

119

So verwenden Sie eine if..else if-Anweisung in einem Dokument:


1. 2.

Whlen Sie Datei > Neu und dann Flash-Dokument. Whlen Sie das erste Bild in der Zeitleiste aus, und geben Sie im Bedienfeld Aktionen den folgenden ActionScript-Code ein:
var now_date:Date = new Date(); var currentHour:Number = now_date.getHours(); // if = wenn die aktuelle Stunde kleiner als 11AM ist... if (currentHour < 11) { trace("Good morning"); // else..if = wenn die aktuelle Stunde kleiner als 3PM ist... } else if (currentHour < 15) { trace("Good afternoon"); // else..if = wenn die aktuelle Stunde kleiner als 8PM ist... } else if (currentHour < 20) { trace("Good evening"); // else = ist die aktuelle Stunde zwischen 8PM und 11:59PM } else { trace("Good night"); }

3.

Whlen Sie Steuerung > Film testen, um den ActionScript-Code zu testen. In diesem Code erstellen Sie einen String namens currentHour, der die Nummer der aktuellen Stunde enthlt (wenn es beispielsweise 6:19 nachmittags ist, enthlt currentHour die Nummer 18). Sie verwenden die Methode getHours() der Date-Klasse, um die aktuelle Stunde abzurufen. Dann knnen Sie die Anweisung if..else if verwenden, um je nach der zurckgegebenen Nummer Informationen an das Bedienfeld Ausgabe zu senden. Weitere Informationen finden Sie in den Kommentaren des vorherigen Codebeispiels.

switch-Anweisung verwenden
Die Anweisung switch erstellt eine Verzweigungsstruktur fr ActionScript-Anweisungen. hnlich wie die Anweisung if testet auch die Anweisung switch eine Bedingung und fhrt Anweisungen aus, wenn die Bedingung den Wert true zurckgibt. Bei Verwendung einer switch-Anweisung weist die break-Anweisung Flash an, die verbleibenden Anweisungen dieses Fallblocks zu berspringen und mit der ersten Anweisung fortzufahren, die auf die einschlieende switch-Anweisung folgt. Wenn ein Fallblock keine break-Anweisung enthlt, tritt eine Fall-Through-Bedingung auf. In dieser Situation wird auch die folgende Fallanweisung ausgefhrt, bis eine break-Anweisung auftritt oder die switch-Anweisung abgeschlossen ist. Dieses Verhalten wird im folgenden Beispiel veranschaulicht, in dem die erste Fallanweisung keine break-Anweisung enthlt und deshalb beide Codeblcke der ersten zwei Flle (A und B) ausgefhrt werden.

120

Syntax- und Sprachgrundlagen

Alle switch-Anweisungen sollten einen default-Fall enthalten. Der default-Fall sollte immer der letzte Fall einer switch-Anweisung sein und auch eine break-Anweisung enthalten, um einen Fall-Through-Fehler zu verhindern, wenn ein weiterer Fall hinzugefgt wird. Ergibt die Bedingung im folgenden Beispiel A, werden die Anweisungen fr Fall A und B gleichermaen ausgefhrt, da Fall A keine break-Anweisung enthlt. Wenn bei einem Fall eine Fall-Through-Bedingung auftritt, enthlt er anstelle einer break-Anweisung einen Kommentar, wie im folgenden Beispiel nach Fall A gezeigt. Verwenden Sie zum Schreiben von switch-Anweisungen das folgende Format:
switch (condition) { case A : // Anweisungen // Fall-Through case B : // Anweisungen break; case Z : // Anweisungen break; default : // Anweisungen break; }

So verwenden Sie eine switch-Anweisung in einem Dokument:


1. 2.

Whlen Sie Datei > Neu und dann Flash-Dokument. Whlen Sie das erste Bild in der Zeitleiste aus, und geben Sie im Bedienfeld Aktionen den folgenden ActionScript-Code ein:
var listenerObj:Object = new Object(); listenerObj.onKeyDown = function() { // Methode String.fromCharCode() zur Rckgabe eines Strings verwenden. switch (String.fromCharCode(Key.getAscii())) { case "A" : trace("you pressed A"); break; case "a" : trace("you pressed a"); break; case "E" : case "e" : /* E doesn't have a break statement, so this block executes if you press e or E. */ trace("you pressed E or e"); break; case "I" : case "i" : trace("you pressed I or i");

Anweisungen

121

break; default : /* If the key pressed isnt caught by any of the above cases, execute the default case here. */ trace("you pressed some other key"); } }; Key.addListener(listenerObj); 3.

Whlen Sie Steuerung > Film testen, um den ActionScript-Code zu testen. Geben Sie ber die Tastatur die Buchstaben a, e oder i ein. Wenn Sie diese Tasten drcken, sehen Sie die trace-Anweisungen im vorherigen ActionScript-Code. Diese Codezeile erstellt ein neues Objekt, das Sie als Listener fr die Key-Klasse verwenden. Mit diesem Objekt wird das Ereignis onKeyDown() benachrichtigt, wenn der Benutzer eine Taste drckt. Die Methode Key.getAscii() gibt den ASCII-Code der Taste zurck, die der Benutzer zuletzt gedrckt oder losgelassen hat. Deshalb mssen Sie die Methode String.fromCharCode() zur Rckgabe eines Strings verwenden, der die Zeichen enthlt, die von den ASCII-Werten in den Parametern dargestellt werden. Da E keine breakAnweisung enthlt, wird der Block ausgefhrt, wenn der Benutzer die Taste e oder E drckt. Wenn der Benutzer eine Taste drckt, die von keinem der ersten drei Flle erfasst wird, wird der Standardfall ausgefhrt.

try..catch- und try..catch..finally-Anweisungen verwenden


Die Blcke try..catch..finally bieten Ihnen die Mglichkeit, Ihren Flash-Anwendungen Fehlerverarbeitungsfunktionen hinzuzufgen. Mit den Schlsselwrtern try..catch..finally knnen Sie einen Codeblock einschlieen, in dem ein Fehler auftreten kann, und dann auf diesen Fehler reagieren. Wenn ein Codeabschnitt innerhalb des try-Codeblocks einen Fehler verursacht (mit der Anweisung throw), wird die Steuerung an den catch-Block bergeben, falls vorhanden. Dann wird die Steuerung an den finallyCodeblock bergeben, sofern vorhanden. Der optionale finally-Block wird immer ausgefhrt, unabhngig davon, ob ein Fehler ausgegeben wurde. Wenn der Code im try-Block keinen Fehler ausgibt (d. h., der try-Block wird normal ausgefhrt), wird der Code im finally-Block trotzdem ausgefhrt.
H I NW E I S 122

Der finally-Block wird selbst dann ausgefhrt, wenn der try-Block mit der Anweisung return beendet wird.

Syntax- und Sprachgrundlagen

Verwenden Sie fr die Anweisungen try..catch und try..catch..finally das folgende Format:
// try-catch try { // Anweisungen } catch (myError) { // Anweisungen } // try-catch-finally try { // Anweisungen } catch (myError) { // Anweisungen } finally { // Anweisungen }

Wenn der Code Fehler verursacht, knnen Sie benutzerdefinierte Prozeduren erstellen, die den Fehler abfangen und geeignete Manahmen ergreifen knnen. Beispielsweise mssen Sie versuchen, externe Daten von einem Web Service oder aus einer Textdatei zu laden, oder Sie mssen eine Fehlermeldung fr den Endbenutzer anzeigen. Sie knnen den catch-Block auch verwenden, um eine Verbindung mit einem Web Service herzustellen, der einen Administrator auf eine bestimmte Fehlersituation hinweist, so dass der Administrator Manahmen zur Fehlerbehebung ergreifen kann.
So verwenden Sie den try..catch..finally-Block vor einer Division zur Datenberprfung:
1. 2.

Whlen Sie Datei > Neu und dann Flash-Dokument. Whlen Sie das erste Bild in der Zeitleiste aus, und geben Sie im Bedienfeld Aktionen den folgenden ActionScript-Code ein:
var n1:Number = 7; var n2:Number = 0; try { if (n2 == 0) { throw new Error("Unable to divide by zero"); } trace(n1/n2); } catch (err:Error) { trace("ERROR! " + err.toString()); } finally { delete n1; delete n2; }

3.

Whlen Sie Steuerung > Film testen, um das Dokument zu testen.

Anweisungen

123

4. 5.

Im Bedienfeld Ausgabe wird der Text Unable to divide by zero angezeigt. Kehren Sie zur Authoring-Umgebung zurck, und ndern Sie die folgende Codezeile:
var n2:Number = 0;

in
var n2:Number = 2; 6.

Whlen Sie Steuerung > Film testen, um das Dokument noch einmal zu testen. Wenn der Wert von n2 Null entspricht, wird ein Fehler ausgegeben und vom catch-Block erfasst. Dadurch wird eine Meldung im Bedienfeld Ausgabe angezeigt. Wenn der Wert von y nicht Null entspricht, wird im Bedienfeld Ausgabe das Ergebnis von n1 geteilt durch n2 angezeigt. Der finally-Block wird unabhngig vom Auftreten eines Fehlers ausgefhrt und lscht die Werte der Variablen n1 und n2 aus dem Flash-Dokument.

Beim Auftreten eines Fehlers sind Ihre Mglichkeiten nicht darauf beschrnkt, neue Instanzen der Error-Klasse auszulsen. Sie knnten die Error-Klasse auch durch Erstellung benutzerdefinierter Fehler erweitern, wie im folgenden Beispiel gezeigt.
So erstellen Sie einen benutzerdefinierten Fehler:
1. 2.

Whlen Sie Datei > Neu, und erstellen Sie eine neue ActionScript-Datei. Whlen Sie Datei > Speichern unter, und nennen Sie die Datei DivideByZeroException.as. Geben Sie den folgenden ActionScript-Code in den Skriptbereich ein:
// In DivideByZeroException.as: class DivideByZeroException extends Error { var message:String = "Divide By Zero error"; }

3.

4. 5.

Speichern Sie die ActionScript-Datei. Erstellen Sie ein neues Flash-Dokument namens exception_test.fla, und speichern Sie es im selben Verzeichnis wie die ActionScript-Datei. Geben Sie im Bedienfeld Aktionen in Bild 1 der Hauptzeitleiste den folgenden ActionScript-Code ein:
var n1:Number = 7; var n2:Number = 0; try { if (n2 == 0) { throw new DivideByZeroException(); } else if (n2 < 0) { throw new Error("n2 cannot be less than zero"); } else { trace(n1/n2); } } catch (err:DivideByZeroException) {

6.

124

Syntax- und Sprachgrundlagen

trace(err.toString()); } catch (err:Error) { trace("An unknown error occurred; " + err.toString()); } 7.

Speichern Sie das Flash-Dokument, und whlen Sie Steuerung > Film testen, um die Datei in der Testumgebung zu testen. Da der Wert von n2 Null entspricht, lst Flash die benutzerdefinierte DivideByZeroException-Fehlerklasse aus und zeigt den Text Divide By Zero error im Bedienfeld Ausgabe an. Wenn Sie den Wert von n2 in der zweiten Zeile von 0 in -1 ndern und das Flash-Dokument neu testen, wird der Text An unknown error occurred; n2 cannot be less than zero im Bedienfeld Ausgabe angezeigt. Wenn Sie den Wert von n2 dagegen auf eine Zahl grer als 0 einstellen, wird das Ergebnis der Division im Bedienfeld Ausgabe angezeigt. Einzelheiten zur Erstellung von benutzerdefinierten Klassen finden Sie in Kapitel 6, Klassen auf Seite 205.

Bedingungsoperator und Alternativsyntax


Zur Verkrzung des erforderlichen Codes knnen Sie den Bedingungsoperator (?:) verwenden, der auch als bedingter Ausdruck bezeichnet wird. Mit dem Bedingungsoperator knnen Sie einfache if..else-Anweisungen in eine einzelne Codezeile umwandeln. Der Operator verringert zwar die Menge des erforderlichen Codes, doch wirkt er sich hufig negativ auf die Lesbarkeit des ActionScript-Codes aus. Die folgende, voll ausgeschriebene Bedingung berprft, ob die Variable numTwo einen Wert grer als Null hat, und gibt das Ergebnis von numOne/numTwo oder den String carrot zurck:
var numOne:Number = 8; var numTwo:Number = 5; if (numTwo > 0) { trace(numOne / numTwo); // 1.6 } else { trace("carrot"); }

Bei Verwendung eines bedingten Ausdrucks wrde derselbe Code im folgenden Format geschrieben:
var numOne:Number = 8; var numTwo:Number = 0; trace((numTwo > 0) ? numOne/numTwo : "carrot");

Anweisungen

125

In diesem Fall ist die gekrzte Syntax jedoch schlechter lesbar und wird daher nicht empfohlen. Wenn Sie Bedingungsoperatoren verwenden mssen, setzen Sie die fhrende Bedingung (vor dem Fragezeichen [?]) in Klammern. Dies verbessert die Lesbarkeit des ActionScript-Codes. Das folgende Beispiel zeigt gut leserlichen ActionScript-Code:
var numOne:Number; (numOne >= 5) ? numOne : -numOne;

Sie knnen Bedingungsanweisungen schreiben, die einen Booleschen Wert zurckgeben. Beispiel:
if (cartArr.length > 0) { return true; } else { return false; }

Der folgende ActionScript-Code ist diesem Code jedoch vorzuziehen:


return (cartArr.length > 0);

Das zweite Codefragment ist krzer und enthlt weniger Ausdrcke, die ausgewertet werden mssen. Es ist also besser lesbar und verstndlich. Wenn Sie komplexe Bedingungen schreiben, sollten Sie Bedingungen in runden Klammern [()] gruppieren. Ohne Verwendung von Klammern kommt es eher zu Problemen mit der Rangfolge von Operatoren. Weitere Informationen zur Rangfolge der Operatoren finden Sie unter Rangfolge und Assoziativitt von Operatoren auf Seite 155. Im folgenden Code wird die Bedingung beispielsweise nicht in Klammern eingeschlossen:
if (fruit == "apple" && veggie == "leek") {}

Der folgende Code entspricht den empfohlenen Verfahren, da Bedingungen in Klammern eingeschlossen sind:
if ((fruit == "apple") && (veggie == "leek")) {}

Aktionen mit Schleifen wiederholen


ActionScript kann eine Aktion so lange wiederholen, bis eine bestimmte Anzahl von Durchlufen erreicht oder eine bestimmte Bedingung erfllt oder nicht mehr erfllt ist. Mit Schleifen knnen Sie mehrere Anweisungen wiederholen, wenn eine bestimmte Bedingung true ist. In ActionScript stehen vier Schleifenarten zur Verfgung: for, for..in, while und do..while. Jede Schleife verhlt sich etwas unterschiedlich und wird fr verschiedene Zwecke eingesetzt.

126

Syntax- und Sprachgrundlagen

In den meisten Schleifen wird ein Zhler verwendet, um die Anzahl der Wiederholungen zu steuern. Jede Ausfhrung einer Schleife wird als Iteration bezeichnet. Sie knnen eine Variable deklarieren und eine Anweisung schreiben, die ihren Wert bei jeder Ausfhrung der Schleife erhht oder verringert. In der Aktion for sind sowohl der Zhler als auch die Anweisung, die den Wert dieses Zhlers mit jeder Iteration erhht, enthalten.
Schleife
for for..in while

Beschreibung
Wiederholt eine Aktion mit einem integrierten Zhler. Fhrt Iterationen mit untergeordneten Movieclips oder Objekten aus. Wiederholt eine Aktion, bis eine bestimmte Bedingung nicht mehr erfllt ist. hnelt den while-Schleifen, doch wird der Ausdruck am Ende des Codeblocks ausgewertet, so dass die Schleife grundstzlich mindestens einmal ausgefhrt wird.

do..while

Am hufigsten wird die Schleife for verwendet, die einen Codeblock mehrmals durchluft, wobei die Anzahl der Wiederholungen vordefiniert ist. Angenommen, Sie haben ein ElementArray und mchten mehrere Anweisungen fr jedes Element im Array ausfhren. In diesem Fall verwenden Sie eine for-Schleife von 0 bis zur Anzahl der Elemente im Array. Die Schleife for..in ist besonders dann ntzlich, wenn Sie jedes Name-Wert-Paar in einem Objekt durchlaufen und dann eine bestimmte Aktion ausfhren mchten. Diese Lsung eignet sich fr das Debuggen von Flash-Projekten, wenn Sie die Werte anzeigen mchten, die aus externen Quellen geladen werden, wie beispielsweise von Web Services oder aus externen Text- oder XML-Dateien. Die beiden letzten Schleifenarten (while und do..while) sind ntzlich, wenn Sie mehrere Anweisungen mehrmals durchlaufen mchten, aber die Anzahl der Wiederholungen nicht bekannt ist. In diesem Fall knnen Sie eine while-Schleife verwenden, die so lange wiederholt wird, bis eine bestimmte Bedingung nicht mehr zutrifft. ActionScript kann eine Aktion so lange wiederholen, bis eine bestimmte Anzahl von Durchlufen erreicht oder eine bestimmte Bedingung erfllt oder nicht mehr erfllt ist. Dies geschieht mithilfe von Schleifen, die durch die Aktionen while, do..while, for und for..in erzeugt werden knnen. Dieser Abschnitt enthlt allgemeine Informationen zu diesen Schleifen. Weitere Informationen zu den einzelnen Schleifen finden Sie in den folgenden Abschnitten.

Anweisungen

127

So wiederholen Sie eine Aktion, bis eine bestimmte Bedingung nicht mehr erfllt ist:

Verwenden Sie eine while-Anweisung. In einer while-Schleife wird ein Ausdruck ausgewertet und der Code im Schleifenabschnitt ausgefhrt, wenn die Auswertung den Ergebniswert true zurckgibt. Nachdem alle Anweisungen im Schleifenabschnitt ausgefhrt wurden, wird der Ausdruck erneut ausgewertet. Im folgenden Beispiel wird die Schleife viermal ausgefhrt:
var i:Number = 4; while (i > 0) { myClip.duplicateMovieClip("newMC" + i, i, {_x:i*20, _y:i*20}); i--; }

Mit einer do..while-Anweisung knnen Sie eine Schleife erzeugen, die hnlich funktioniert wie die while-Schleife. In einer do...while-Schleife wird der Ausdruck am Ende des Codeblocks ausgewertet, so dass die Schleife mindestens einmal ausgefhrt wird. Beispiel:
var i:Number = 4; do { myClip.duplicateMovieClip("newMC" + i, i, {_x:i*20, _y:i*20}); i--; } while (i > 0);

Weitere Informationen zur while-Anweisung finden Sie unter while-Schleifen verwenden auf Seite 134.
So wiederholen Sie eine Aktion mit einem integrierten Zhler:

Verwenden Sie eine for-Anweisung. In den meisten Schleifen wird ein Zhler verwendet, um die Anzahl der Wiederholungen zu steuern. Jede Ausfhrung einer Schleife wird als Iteration bezeichnet. Sie knnen eine Variable deklarieren und eine Anweisung schreiben, die ihren Wert bei jeder Ausfhrung der Schleife erhht oder verringert. In der Aktion for sind sowohl der Zhler als auch die Anweisung, die den Wert dieses Zhlers mit jeder Iteration erhht, enthalten. Im folgenden Beispiel wird der ursprngliche Ausdruck (var i:Number = 4) als erster Ausdruck vor der ersten Iteration ausgewertet. Der zweite Ausdruck (i > 0) enthlt die Bedingung, die vor jeder Ausfhrung der Schleife geprft wird. Der dritte Ausdruck (i--) wird nach jeder Ausfhrung der Schleife ausgewertet.
for (var i:Number = 4; i > 0; i--) { myClip.duplicateMovieClip("newMC" + i, i, {_x:i*20, _y:i*20}); } Weitere Informationen zur for-Anweisung finden Sie unter for-Schleifen verwenden

auf Seite 131.

128

Syntax- und Sprachgrundlagen

So durchlaufen Sie die Unterobjekte eines Movieclips oder Objekts:

Verwenden Sie eine for..in-Anweisung. Bei Unterobjekten kann es sich um andere Movieclips, Funktionen, Objekte oder Variablen handeln. Im folgenden Beispiel wird die Anweisung trace zum Ausgeben der Ergebnisse im Bedienfeld Ausgabe verwendet:
var myObject:Object = {name:'Joe', age:25, city:'San Francisco'}; var propertyName:String; for (propertyName in myObject) { trace("myObject has the property: " + propertyName + ", with the value: " + myObject[propertyName]); }

Das Ergebnis im Bedienfeld Ausgabe sieht folgendermaen aus:


myObject has the property: name, with the value: Joe myObject has the property: age, with the value: 25 myObject has the property: city, with the value: San Francisco

Unter Umstnden kann es sinnvoll sein, ein Skript nur auf Unterobjekte eines bestimmten Typs anzuwenden, zum Beispiel nur auf untergeordnete Movieclips. Hierfr knnen Sie for..in mit dem Operator typeof verwenden. Im folgenden Beispiel befindet sich eine untergeordnete Movieclip-Instanz (namens instance2) innerhalb einer MovieclipInstanz auf der Bhne. Fgen Sie Bild 1 der Zeitleiste den folgenden ActionScript-Code hinzu:
for (var myName in this) { if (typeof (this[myName]) == "movieclip") { trace("I have a movie clip child named " + myName); } }

Weitere Informationen zur for-Anweisung finden Sie unter for..in-Schleifen verwenden auf Seite 132.
W A R N UN G

Iterationen in Flash werden in Flash Player sehr schnell ausgefhrt, doch Schleifen sind sehr prozessorintensiv. Je mehr Iterationen eine Schleife enthlt und je mehr Anweisungen in jedem Block ausgefhrt werden, desto strker werden die Prozessorressourcen beansprucht. Mangelhaft geschriebene Schleifen knnen Leistung und Stabilitt beeintrchtigen.

Weitere Informationen zu den einzelnen Anweisungen finden Sie in den folgenden Abschnitten dieses Kapitels, wie while-Schleifen verwenden auf Seite 134, und in den jeweiligen Eintrgen im ActionScript 2.0-Referenzhandbuch.

Anweisungen

129

Schleifen erstellen und beenden


Das folgende Beispiel zeigt ein einfaches Array aus Monatsnamen. Die for-Schleife bewirkt eine Iteration von 0 bis zur Anzahl der Elemente im Array und zeigt jedes Element im Bedienfeld Ausgabe an.
var monthArr:Array = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"); var i:Number; for (i = 0; i < monthArr.length; i++) { trace(monthArr[i]); }

Bei der Arbeit mit Arrays ob einfach oder komplex mssen Sie eine Bedingung namens Endlosschleife bercksichtigen. Eine Endlosschleife hat keine Endbedingung und kann deshalb schwerwiegende Probleme verursachen, beispielsweise einen Absturz der Flash-Anwendung. Es ist auch mglich, dass das Flash-Dokument in einem Webbrowser nicht mehr reagiert oder ein uneinheitliches Verhalten aufweist. Im folgenden Code wird ein Beispiel fr eine Endlosschleife gezeigt:
// SCHLECHTER CODE erstellt Endlosschleife // NUR AUF EIGENES RISIKO ZU VERWENDEN! var i:Number; for (i = 0; i < 10; i--) { trace(i); }

Der Wert von i wird auf 0 initialisiert, und die Endbedingung ist erfllt, wenn i grer oder gleich 10 ist. Nach jeder Iteration wird der Wert von i verringert. Der Fehler liegt auf der Hand: Wenn der Wert von i nach jeder Schleifeniteration verringert wird, kann die Endbedingung nie erfllt werden. Die Ergebnisse fallen je nach Computer unterschiedlich aus, und die Geschwindigkeit, mit der Codefehler auftreten, richtet sich nach der CPUGeschwindigkeit und anderen Faktoren. So wird die Schleife, je nach Computer, unter Umstnden ber 140.000 Mal ausgefhrt, bevor eine Fehlermeldung eingeblendet wird. Die folgende Fehlermeldung wird in einem Dialogfeld angezeigt:
A script in this movie is causing Flash Player to run slowly. If it continues to run, your computer may become unresponsive. Do you want to abort the script?

Bei der Arbeit mit Schleifen (besonders mit while und do..while) sollten Sie stets sicherstellen, dass die Schleife korrekt beendet werden kann, damit keine Endlosschleife entsteht. Weitere Informationen zum Steuern von Schleifen finden Sie unter switch-Anweisung verwenden auf Seite 120.

130

Syntax- und Sprachgrundlagen

for-Schleifen verwenden
Mit der for-Schleife knnen Sie Iterationen einer Variablen fr einen bestimmten Wertebereich ausfhren. Die for-Schleife bietet sich an, wenn Sie genau wissen, wie oft mehrere ActionScript-Anweisungen ausgefhrt werden mssen. Verwenden Sie diese Schleife, wenn Sie einen Movieclip auf der Bhne um eine bestimmte Anzahl duplizieren mchten oder um eine Schleife fr ein Array auszufhren, wobei fr jedes Element im Array eine Aktion ausgefhrt wird. Eine for-Schleife wiederholt eine Aktion unter Verwendung eines integrierten Zhlers. In der for-Anweisung sind sowohl der Zhler als auch die Anweisung, die den Wert dieses Zhlers mit jeder Iteration erhht, enthalten. Schreiben Sie die forAnweisung im folgenden grundlegenden Format:
for (init; condition; update) { // Anweisungen; }

Fr eine for-Anweisung mssen drei Ausdrcke angegeben werden: eine Variable, die auf einen Ausgangswert eingestellt ist, eine Bedingungsanweisung, die bestimmt, wann die Schleife beendet wird, und ein Ausdruck, der den Wert der Variablen bei jeder Iteration ndert. Der Code im folgenden Beispiel wird fnf Mal ausgefhrt. Die Variable i hat am Anfang den Wert 0 und zum Schluss den Wert 4. Die Ausgabe besteht aus den Ziffern 0 bis 4, die jeweils auf einer separaten Zeile angezeigt werden.
var i:Number; for (i = 0; i < 5; i++) { trace(i); }

Im nchsten Beispiel wird der ursprngliche Ausdruck (i = 0) als erster Ausdruck vor der ersten Iteration ausgewertet. Der zweite Ausdruck (i < 5) enthlt die Bedingung, die vor jeder Ausfhrung der Schleife geprft wird. Der dritte Ausdruck (i++) wird nach jeder Ausfhrung der Schleife ausgewertet.
So erstellen Sie eine for-Schleife:
1. 2. 3.

Whlen Sie Datei > Neu und dann Flash-Dokument. Erstellen Sie auf der Bhne einen Movieclip. Klicken Sie im Bedienfeld Bibliothek mit der rechten Maustaste auf das MovieclipSymbol, und whlen Sie Verknpfung aus dem Kontextmen. Aktivieren Sie das Kontrollkstchen Export fr ActionScript, und geben Sie in das Texteingabefeld fr die Klasse den Text libraryLinkageClassName ein. Klicken Sie auf OK.

4.

Anweisungen

131

5.

Whlen Sie das erste Bild in der Zeitleiste aus, und geben Sie im Bedienfeld Aktionen den folgenden ActionScript-Code ein:
var i:Number; for (i = 0; i < 5; i++) { this.attachMovie("libraryLinkageClassName", "clip" + i + "_mc", i, {_x:(i * 100)}); }

6.

Whlen Sie Steuerung > Film testen, um den Code in Flash Player zu testen. Sie sehen, dass fnf Movieclips oben auf der Bhne dupliziert werden. Dieser ActionScript-Code dupliziert das Movieclip-Symbol in der Bibliothek und ordnet die Clips auf der Bhne neu an, und zwar an den x-Koordinaten 0, 100, 200, 300 und 400 Pixel. Die Schleife wird fnf Mal ausgefhrt, wobei der Variablen i die Werte 0 bis 4 zugewiesen werden. Bei der letzten Iteration wird der Wert von i auf 4 erhht, und der zweite Ausdruck (i < 5) ist nicht mehr zutreffend, wodurch die Schleife beendet wird.

Vergessen Sie nicht, nach jedem Ausdruck in der for-Anweisung ein Leerzeichen einzufgen. Weitere Informationen finden Sie unter dem Eintrag for-Anweisung im ActionScript 2.0Referenzhandbuch.

for..in-Schleifen verwenden
Mit der Anweisung for..in knnen Sie Unterobjekte eines Movieclips, Objekteigenschaften und Array-Elemente in Iterationen durchlaufen. Bei den Unterobjekten kann es sich um andere Movieclips, Funktionen, Objekte oder Variablen handeln. Die Schleife for..in wird hufig fr Instanzen auf einer Zeitleiste oder die Schlssel-Wert-Paare innerhalb eines Objekts verwendet. Iterationen ber Objekte knnen beim Debuggen Ihrer Anwendungen uerst hilfreich sein, da Sie auf diese Weise sehen, welche Daten von Web Services oder externen Dokumenten, wie Text- oder XML-Dateien, zurckgegeben werden. Beispielsweise knnen Sie eine Schleife for...in verwenden, um die Eigenschaften eines generischen Objekts zu durchlaufen (da fr Objekteigenschaften keine feste Reihenfolge gilt, werden sie in willkrlicher Reihenfolge angezeigt):
var myObj:Object = {x:20, y:30}; for (var i:String in myObj) { trace(i + ": " + myObj[i]); }

Dieser Code zeigt im Bedienfeld Ausgabe Folgendes an:


x: 20 y: 30

132

Syntax- und Sprachgrundlagen

Sie knnen auch die Elemente eines Arrays durchlaufen:


var myArray:Array = ["one", "two", "three"]; for (var i:String in myArray) { trace(myArray[i]); }

Dieser Code zeigt im Bedienfeld Ausgabe Folgendes an:


three two one

Weitere Informationen zu Objekten und Eigenschaften finden Sie unter Object-Datentyp auf Seite 43.
H I N WE I S

Es ist nicht mglich, die Eigenschaften eines Objekts zu durchlaufen, wenn dieses Objekt eine Instanz einer benutzerdefinierten Klasse ist, es sei denn, es handelt sich um eine dynamische Klasse. Selbst bei Instanzen von dynamischen Klassen sind Iterationen nur fr Eigenschaften mglich, die dynamisch hinzugefgt werden. Die geschweiften Klammern ({}) um den Block der von der Anweisung for...in ausgefhrten Anweisungen werden nicht bentigt, wenn nur eine Anweisung ausgefhrt wird.

Im folgenden Beispiel werden mit for..in die Eigenschaften eines Objekts durchlaufen:
So erstellen Sie eine for-Schleife:
1. 2.

3.

H I NW E I S

Whlen Sie Datei > Neu und dann Flash-Dokument. Whlen Sie das erste Bild in der Zeitleiste aus, und geben Sie im Bedienfeld Aktionen den folgenden ActionScript-Code ein:
var myObj:Object = {name:"Tara", age:27, city:"San Francisco"}; var i:String; for (i in myObj) { trace("myObj." + i + " = " + myObj[i]); }

Whlen Sie Steuerung > Film testen, um den Code in Flash Player zu testen. Wenn Sie die SWF-Datei testen, wird der folgende Text im Bedienfeld Ausgabe angezeigt:
myObj.name = Tara myObj.age = 27 myObj.city = San Francisco

Anweisungen

133

Wenn Sie eine for..in-Schleife in einer Klassendatei schreiben (in einer externen ActionScript-Datei), stehen die Instanzmitglieder in der Schleife nicht zur Verfgung. Dagegen werden die statischen Mitglieder bercksichtigt. Erstellen Sie dagegen eine for..in-Schleife in einer FLA-Datei fr eine Instanz der Klasse, stehen nur Instanzmitglieder zur Verfgung, nicht aber die statischen Mitglieder. Weitere Informationen zum Schreiben von Klassendateien finden Sie in Kapitel 6, Klassen auf Seite 205. Weitere Informationen finden Sie unter dem Eintrag for..in-Anweisung im ActionScript 2.0-Referenzhandbuch.

while-Schleifen verwenden
Mit der while-Anweisung wird eine Aktion wiederholt, whrend eine Bedingung vorhanden ist, hnlich wie bei der if-Anweisung, die so lange wiederholt wird, wie die Bedingung true ist. In einer while-Schleife wird ein Ausdruck ausgewertet und der Code im Schleifenabschnitt ausgefhrt, wenn die Auswertung den Ergebniswert true zurckgibt. Wenn die Bedingung true zurckgibt, werden eine oder mehrere Anweisungen ausgefhrt, bevor die Bedingung erneut ausgewertet wird. Wenn die Bedingung false zurckgibt, werden die nachfolgenden Anweisungen bersprungen, und die Schleife wird beendet. while-Schleifen sind ntzlich, wenn Sie nicht genau wissen, wie viele Iterationen fr einen Codeblock erforderlich sind. Mit dem folgenden Code werden beispielsweise Zahlen im Bedienfeld Ausgabe angezeigt:
var i:Number = 0; while (i < 5) { trace(i); i++; }

Die folgenden Zahlen werden im Bedienfeld Ausgabe angezeigt:


0 1 2 3 4 while-Schleifen haben im Gegensatz zu for-Schleifen den Nachteil, dass sie eher zu Endlosschleifen fhren. Der Code fr eine for-Schleife wird nicht kompiliert, wenn der Ausdruck fehlt, mit dem die Zhlervariable erhht wird, der Code fr eine while-Schleife wird jedoch auch ohne diesen Ausdruck kompiliert. Wenn der Ausdruck zum Erhhen von i nicht vorhanden ist, entsteht eine Endlosschleife.

Im folgenden Beispiel wird beschrieben, wie Sie eine while-Schleife in einer FLA-Datei erstellen und verwenden.

134

Syntax- und Sprachgrundlagen

So erstellen Sie eine while-Schleife:


1. 2.

Whlen Sie Datei > Neu und dann Flash-Dokument. ffnen Sie das Bedienfeld Komponenten, und ziehen Sie eine DataSet-Komponente auf die Bhne. ffnen Sie den Eigenschafteninspektor (Fenster > Eigenschaften > Eigenschaften), und geben Sie den Instanznamen users_ds ein. Whlen Sie das erste Bild in der Zeitleiste aus, und geben Sie im Bedienfeld Aktionen den folgenden ActionScript-Code ein:
var users_ds:mx.data.components.DataSet; // users_ds.addItem({name:"Irving", age:34}); users_ds.addItem({name:"Christopher", age:48}); users_ds.addItem({name:"Walter", age:23}); // users_ds.first(); while (users_ds.hasNext()) { trace("name:" + users_ds.currentItem["name"] + ", age:" + users_ds.currentItem["age"]); users_ds.next(); }

3.

4.

5.

Whlen Sie Steuerung > Film testen, um das Dokument zu testen. Im Bedienfeld Ausgabe werden die folgenden Informationen angezeigt:
name:Irving, age:34 name:Christopher, age:48 name:Walter, age:23

Weitere Informationen finden Sie unter dem Eintrag while-Anweisung im ActionScript 2.0Referenzhandbuch.

do..while-Schleifen
Mit einer do..while-Anweisung knnen Sie eine Schleife erzeugen, die hnlich funktioniert wie die while-Schleife. Der Ausdruck wird in einer do..while-Schleife jedoch am Ende des Codeblocks ausgewertet (also nach der Ausfhrung des Codeblocks berprft), so dass die Schleife mindestens einmal ausgefhrt wird. Die Anweisungen werden nur ausgefhrt, wenn die Bedingung den Wert true hat.

Anweisungen

135

Der folgende Code zeigt ein einfaches Beispiel fr eine do...while-Schleife, die eine Ausgabe generiert, obwohl die Bedingung nicht erfllt wird.
var i:Number = 5; do { trace(i); i++; } while (i < 5); // Ausgabe: 5

Achten Sie beim Schreiben von Schleifen darauf, dass keine Endlosschleifen entstehen. Wenn die Bedingung in einer do..while-Schleife kontinuierlich den Wert true hat, entsteht eine Endlosschleife. Dies fhrt zur Anzeige einer Warnmeldung oder zu einem Absturz von Flash Player. Wenn Sie wissen, wie viele Iterationen der Schleife erforderlich sind, ist eine forSchleife vorzuziehen. Weitere Informationen und Beispiele zur do..while-Anweisung finden Sie im ActionScript 2.0-Referenzhandbuch.

Verschachtelte Schleifen im ActionScript-Code verwenden


Im folgenden Beispiel wird gezeigt, wie Sie ein Objekt-Array erstellen und die einzelnen Werte in der verschachtelten Struktur anzeigen. Im Beispiel wird eine for-Schleife verwendet, um die einzelnen Elemente im Array zu durchlaufen, und eine for..in-Schleife, um die einzelnen Schlssel-Wert-Paare in den verschachtelten Objekten zu durchlaufen.
So verschachteln Sie eine Schleife innerhalb einer anderen Schleife:
1. 2. 3.

Erstellen Sie ein neues Flash-Dokument. Whlen Sie Datei > Speichern unter, und nennen Sie das Dokument loops.fla. Fgen Sie Bild 1 der Zeitleiste den folgenden Code hinzu:
var myArr:Array = new Array(); myArr[0] = {name:"One", value:1}; myArr[1] = {name:"Two", value:2}; // var i:Number; var item:String; for (i = 0; i < myArr.length; i++) { trace(i); for (item in myArr[i]) { trace(item + ": " + myArr[i][item]); } trace(""); }

136

Syntax- und Sprachgrundlagen

4.

Whlen Sie Steuerung > Film testen, um den Code zu testen. Im Bedienfeld Ausgabe wird Folgendes angezeigt.
0 name: One value: 1 1 name: Two value: 2

Da Sie die Anzahl der Elemente im Array kennen, knnen Sie fr die Iteration der einzelnen Elemente eine einfache for-Schleife verwenden. Jedes Objekt im Array kann unterschiedliche Name-/Wert-Paare enthalten. Deshalb knnen Sie eine for..in-Schleife verwenden, um jeden Wert zu durchlaufen und die Ergebnisse im Bedienfeld Ausgabe anzuzeigen.

Arrays
Ein Array ist ein Objekt, dessen Eigenschaften von Zahlen angegeben werden, die fr die entsprechenden Positionen in der Struktur stehen. Im Prinzip besteht ein Array aus einer Elementliste. Beachten Sie, dass die Elemente im Array nicht denselben Datentyp haben mssen. Sie knnen Nummern, Datumsangaben, Strings und Objekte kombinieren und sogar an jedem Array-Index ein verschachteltes Array hinzufgen. Das folgende Beispiel zeigt ein einfaches Array aus Monatsnamen.
var myArr:Array = new Array(); myArr[0] = "January"; myArr[1] = "February"; myArr[2] = "March"; myArr[3] = "April";

Das vorherige Array der Monatsnamen knnte auch folgendermaen geschrieben werden:
var myArr:Array = new Array("January", "February", "March", "April");

Als Alternative knnen Sie auch die verkrzte Syntax verwenden, wie im Folgenden gezeigt:
var myArr:Array = ["January", "February", "March", "April"];

Ein Array lsst sich mit einer Struktur fr Daten vergleichen. Stellen Sie sich ein Array wie ein Brogebude vor, in dem jedes Stockwerk unterschiedliche Daten enthlt (wie Buchhaltung auf Stockwerk 3 und Technik auf Stockwerk 5). Deshalb knnen Sie unterschiedliche Datenarten in einem einzelnen Array speichern, darunter auch andere Arrays. Jedes Stockwerk in diesem Gebude kann mehrere Inhaltsarten enthalten (Geschftsleitung und Buchhaltung knnen sich beide auf Stockwerk 3 befinden).

Arrays

137

Ein Array enthlt Elemente, die sich mit den einzelnen Stockwerken des Gebudes vergleichen lassen. Jedes Element hat eine numerische Position, den so genannten Index, mit dem Sie auf die Position des Elements im Array verweisen. In unserer Analogie des Brogebudes entspricht der Index der Stockwerknummer. Jedes Element kann entweder Daten enthalten oder leer sein. Der Inhalt kann eine Nummer, ein String, ein Boolescher Wert oder sogar ein Array oder Objekt sein. Auch das Array selbst kann gesteuert und gendert werden. Beispielsweise knnen Sie die technische Abteilung in das Erdgeschoss des Gebudes verlegen. Sie knnen die Werte in Arrays verschieben und die Gre von Arrays ndern (also das Gebude renovieren und Stockwerke hinzufgen oder entfernen). Das heit, Sie knnen Elemente hinzufgen oder entfernen und Werte zu anderen Elementen verschieben. Mit anderen Worten: Das Gebude (das Array) enthlt Stockwerke (die Elemente), die nummeriert sind (mit dem Index), und jedes Stockwerk enthlt eine oder mehrere Abteilungen (die Werte). Weitere Informationen zum ndern von Arrays finden Sie unter Arrays ndern auf Seite 140. Einzelheiten zum Verwenden von Arrays und zu Indizes finden Sie unter Arrays verwenden auf Seite 138. Informationen zum Hinzufgen und Entfernen von Elementen finden Sie unter Elemente hinzufgen und entfernen auf Seite 142. Der ArrayZugriffsoperator wird unter Punktoperatoren und Array-Zugriffsoperatoren verwenden auf Seite 159 beschrieben. Eine Beispieldatei namens array.fla, die die Array-Bearbeitung mit ActionScript verdeutlicht, finden Sie auf der Webseite mit Flash-Beispielen unter www.adobe.com/go/ learn_fl_samples_de. Laden Sie die komprimierte Beispieldatei herunter, dekomprimieren Sie sie, und wechseln Sie in den Ordner ActionScript2.0/Arrays, um auf das Beispiel zuzugreifen. Der Code in der Beispieldatei erstellt ein Array. Auerdem werden die Elemente von zwei List-Komponenten sortiert, hinzugefgt und entfernt.

Arrays verwenden
Arrays knnen auf verschiedene Art und Weise fr Ihre Arbeit verwendet werden. Sie knnen damit beispielsweise Objektlisten speichern, wie mehrere zurckgegebene Elemente. Wenn Sie Daten von Remote-Webservern laden, knnten diese Daten als Array aus verschachtelten Objekten gesendet werden. Hufig enthalten Arrays Daten in einem hnlichen Format. Wenn Sie beispielsweise eine Audio-Anwendung in Flash erstellen, knnte die Wiedergabeliste eines Benutzers als Array mit Titelinformationen gespeichert werden, die wiederum in Objekten gespeichert sind. Jedes Objekt enthlt den Namen und die Dauer des Titels, den Namen des Interpreten, den Speicherort einer Audiodatei (wie MP3) sowie weitere Informationen zur jeweiligen Datei.

138

Syntax- und Sprachgrundlagen

Die Position eines Elements im Array wird als Index bezeichnet. Alle Arrays haben die Basis Null, d. h., das erste Element im Array ist [0], das zweite Element [1] und so weiter. Es stehen verschiedene Arten von Arrays zur Verfgung, die in den folgenden Abschnitten beschrieben werden. Bei den meisten allgemeinen Arrays wird ein numerischer Index verwendet, um ein Element in einem indizierten Array zu finden. Die zweite Array-Art wird als assoziatives Array bezeichnet. Bei einem solchen Array wird anstelle des numerischen Index ein Textindex verwendet, um Informationen zu suchen. Weitere Informationen zu allgemeinen Arrays finden Sie unter Arrays auf Seite 137. Einzelheiten zu assoziativen Arrays finden Sie unter Assoziative Arrays erstellen auf Seite 147. Weitere Informationen zu mehrdimensionalen Arrays finden Sie unter Mehrdimensionale Arrays erstellen auf Seite 144. Der Array-Zugriffsoperator wird unter Punktoperatoren und Array-Zugriffsoperatoren verwenden auf Seite 159 beschrieben. Die integrierte Array-Klasse ermglicht den Zugriff auf Arrays und die Bearbeitung von Arrays. Zum Erstellen eines Array-Objekts verwenden Sie den Konstruktor new Array() oder den Array-Zugriffsoperator ([]). Der Array-Zugriffsoperator ([]) wird auch verwendet, um auf die Elemente in einem Array zuzugreifen. Im nchsten Beispiel wird ein indiziertes Array gezeigt.
So verwenden Sie Arrays in Ihrem Code:
1.

Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen basicArrays.fla. Fgen Sie Bild 1 der Zeitleiste den folgenden ActionScript-Code hinzu:
// neues Array definieren var myArr:Array = new Array(); // Werte an zwei Indizes definieren myArr[1] = "value1"; myArr[0] = "value0"; // Iteration ber die Elemente im Array durchfhren var i:String; for (i in myArr) { // Schlssel-Wert-Paare anzeigen trace("key: " + i + ", value: " + myArr[i]); }

2.

In der ersten ActionScript-Codezeile definieren Sie ein neues Array, in dem die Werte enthalten sind. Dann definieren Sie Daten (value0 und value1) an zwei Indizes im Array. Sie verwenden eine for..in-Schleife, um die Elemente im Array zu durchlaufen, und eine trace-Anweisung, um die Schlssel-Wert-Paare im Bedienfeld Ausgabe anzuzeigen.

Arrays

139

3.

Whlen Sie Steuerung > Film testen, um den Code zu testen. Im Bedienfeld Ausgabe wird der folgende Text angezeigt:
key: 0, value: value0 key: 1, value: value1

Weitere Informationen zu for..in-Schleifen finden Sie unter for..in-Schleifen verwenden auf Seite 132. Einzelheiten zum Erstellen verschiedener Array-Arten finden Sie in den folgenden Abschnitten:

Indizierte Arrays erstellen auf Seite 143 Mehrdimensionale Arrays erstellen auf Seite 144 Assoziative Arrays erstellen auf Seite 147

Eine Beispieldatei namens array.fla, die die Array-Bearbeitung mit ActionScript verdeutlicht, finden Sie auf der Webseite mit Flash-Beispielen unter www.adobe.com/go/learn_fl_samples_de. Laden Sie die komprimierte Beispieldatei herunter, dekomprimieren Sie sie, und wechseln Sie in den Ordner ActionScript2.0/ Arrays, um auf das Beispiel zuzugreifen. Der Code in der Beispieldatei erstellt ein Array. Auerdem werden die Elemente von zwei List-Komponenten sortiert, hinzugefgt und entfernt.

Arrays ndern
Auch das Array selbst kann mit ActionScript gesteuert und gendert werden. Sie knnen die Werte in einem Array verschieben oder die Gre des Arrays ndern. Wenn Sie beispielsweise die Daten an zwei Indexpositionen in einem Array austauschen mchten, verwenden Sie den folgenden Code:
var buildingArr:Array = new Array(); buildingArr[2] = "Accounting"; buildingArr[4] = "Engineering"; trace(buildingArr); // nicht definiert,nicht definiert,Buchhaltung,nicht definiert,Technik var temp_item:String = buildingArr[2]; buildingArr[2] = buildingArr[4]; buildingArr[4] = temp_item; trace(buildingArr); // nicht definiert,nicht definiert,Technik,nicht definiert,Buchhaltung

140

Syntax- und Sprachgrundlagen

Wie Sie sehen, wurde im obigen Beispiel eine temporre Variable erstellt. Dies hat folgenden Grund: Wenn Sie den Inhalt der Indexposition 4 in Indexposition 2 kopieren und umgekehrt, geht der ursprngliche Inhalt an Indexposition 2 verloren. Wenn Sie dagegen den Wert aus einem Array-Index in eine temporre Variable kopieren, knnen Sie ihn auf diese Weise speichern und spter wieder in den Code kopieren. Wenn Sie beispielsweise den folgenden Code verwenden, sehen Sie, dass der Wert an Indexposition 2 (Buchhaltung) verloren gegangen ist. Sie haben jetzt zwar zwei Technikteams, aber keine Buchhalter.
// falsche Vorgehensweise (keine temporre Variable) buildingArr[2] = buildingArr[4]; buildingArr[4] = buildingArr[2]; trace(buildingArr); // nicht definiert,nicht definiert,Technik,nicht definiert,Technik

Eine Beispieldatei namens array.fla, die die Array-Bearbeitung mit ActionScript verdeutlicht, finden Sie auf der Webseite mit Flash-Beispielen unter www.adobe.com/go/learn_fl_samples_de. Laden Sie die komprimierte Beispieldatei herunter, dekomprimieren Sie sie, und wechseln Sie in den Ordner ActionScript2.0/ Arrays, um auf das Beispiel zuzugreifen. Der Code in der Beispieldatei erstellt ein Array. Auerdem werden die Elemente von zwei List-Komponenten sortiert, hinzugefgt und entfernt.

Verweise und Lnge


Bei der Arbeit mit Arrays mssen Sie oft wissen, wie viele Elemente das Array enthlt. Dies kann sehr ntzlich sein, wenn Sie for-Schleifen schreiben, die alle Elemente im Array durchlaufen und mehrere Anweisungen ausfhren. Dies wird im folgenden Codebeispiel gezeigt:
var monthArr:Array = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"); trace(monthArr); // Jan,Feb,Mr,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez trace(monthArr.length); // 12 var i:Number; for (i = 0; i < monthArr.length; i++) { monthArr[i] = monthArr[i].toUpperCase(); } trace(monthArr); // JAN,FEB,MR,APR,MAI,JUN,JUL,AUG,SEP,OKT,NOV,DEZ

Im vorherigen Beispiel wurde ein Array erstellt und mit Monatsnamen ausgefllt. Auer dem Inhalt wird auch die Lnge des Arrays angezeigt. Mit einer for-Schleife werden alle Elemente im Array durchlaufen, wobei alle Werte in Grobuchstaben konvertiert werden. Dann wird der Inhalt des Arrays erneut angezeigt.

Arrays

141

Wenn Sie im folgenden ActionScript-Code ein Element an Indexposition 5 des Arrays erstellen, wird als Array-Lnge der Wert 6 zurckgegeben, da das Array auf Null basiert. Der Rckgabewert entspricht also nicht der tatschlichen Anzahl der Elemente im Array.
var myArr:Array = new Array(); myArr[5] = "five"; trace(myArr.length); // 6 trace(myArr); // nicht definiert,nicht definiert,nicht definiert,nicht definiert, // nicht definiert,fnf

Weitere Informationen zu for-Schleifen finden Sie unter for-Schleifen verwenden auf Seite 131. Der Array-Zugriffsoperator wird unter Punktoperatoren und ArrayZugriffsoperatoren verwenden auf Seite 159 beschrieben. Eine Beispieldatei namens array.fla, die die Array-Bearbeitung mit ActionScript verdeutlicht, finden Sie auf der Webseite mit Flash-Beispielen unter www.adobe.com/go/learn_fl_samples_de. Laden Sie die komprimierte Beispieldatei herunter, dekomprimieren Sie sie, und wechseln Sie in den Ordner ActionScript2.0/ Arrays, um auf das Beispiel zuzugreifen. Der Code in der Beispieldatei erstellt ein Array. Auerdem werden die Elemente von zwei List-Komponenten sortiert, hinzugefgt und entfernt.

Elemente hinzufgen und entfernen


Ein Array enthlt Elemente, und jedes Element hat eine numerische Position, den so genannten Index, mit dem Sie auf die Position des Elements im Array verweisen. Ein Element kann entweder Daten enthalten oder leer sein. Elemente knnen die folgenden Daten enthalten: Zahlen, Strings, Boolesche Werte oder sogar Arrays oder Objekte. Bei der Erstellung von Elementen in einem Array sollten Sie die Indizes nach Mglichkeit sequenziell erstellen, um das Debuggen Ihrer Anwendungen zu vereinfachen. Im Abschnitt Verweise und Lnge auf Seite 141 wurde gezeigt, dass fr die Lnge des Arrays der Wert 6 zurckgegeben wird, wenn Sie an Indexposition 5 einen Wert zuweisen. Dadurch werden fnf nicht definierte Werte in das Array eingefgt. Im folgenden Beispiel wird gezeigt, wie Sie ein neues Array erstellen, ein Element an einer Indexposition lschen und Daten an einer Indexposition hinzufgen und ersetzen.
var monthArr:Array = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"); delete monthArr[5]; trace(monthArr); // Jan,Feb,Mr,Apr,Mai,nicht definiert,Jul,Aug,Sep,Okt,Nov,Dez trace(monthArr.length); // 12 monthArr[5] = "JUN"; trace(monthArr); // Jan,Feb,Mr,Apr,Mai,JUN,Jul,Aug,Sep,Okt,Nov,Dez

142

Syntax- und Sprachgrundlagen

Obwohl Sie das Element an der Indexposition 5 gelscht haben, betrgt die Lnge des Arrays immer noch 12. Das Element an Indexposition 5 enthlt jetzt einen leeren String, wurde also nicht vollstndig entfernt. Eine Beispieldatei namens array.fla, die die Array-Bearbeitung mit ActionScript verdeutlicht, finden Sie auf der Webseite mit Flash-Beispielen unter www.adobe.com/go/learn_fl_samples_de. Laden Sie die komprimierte Beispieldatei herunter, dekomprimieren Sie sie, und wechseln Sie in den Ordner ActionScript2.0/Arrays, um auf das Beispiel zuzugreifen. Der Code in der Beispieldatei erstellt ein Array. Auerdem werden die Elemente von zwei List-Komponenten sortiert, hinzugefgt und entfernt.

Indizierte Arrays erstellen


In indizierten Arrays wird eine Reihe aus einem oder mehreren Werten gespeichert. Sie knnen Elemente anhand ihrer Indexposition im Array finden, wie bereits in vorhergehenden Abschnitten gezeigt. Die erste Indexposition ist immer 0. Mit jedem Element, das Sie dem Array hinzufgen, wird der Index um den Wert 1 erhht. Sie knnen ein indiziertes Array erstellen, indem Sie den Konstruktor der Array-Klasse aufrufen oder indem Sie das Array mit einem Array-Literal initialisieren. Im nchsten Beispiel erstellen Sie Arrays mit dem ArrayKonstruktor und einem Array-Literal.
So erstellen Sie ein indiziertes Array:
1.

Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen indexArray.fla. Fgen Sie Bild 1 der Zeitleiste den folgenden ActionScript-Code hinzu:
var myArray:Array = new Array(); myArray.push("one"); myArray.push("two"); myArray.push("three"); trace(myArray); // eins,zwei,drei

2.

In der ersten ActionScript-Codezeile definieren Sie ein neues Array, in dem die Werte enthalten sind.
3.

Whlen Sie Steuerung > Film testen, um den Code zu testen. Im Bedienfeld Ausgabe wird der folgende Text angezeigt:
one,two,three

4.

Kehren Sie zum Authoring-Tool zurck, und lschen Sie den Code im Bedienfeld Aktionen.

Arrays

143

5.

Fgen Sie Bild 1 der Zeitleiste den folgenden ActionScript-Code hinzu:


var myArray:Array = ["one", "two", "three"]; trace(myArray); // eins,zwei,drei

In diesem Code verwenden Sie das Array-Literal zur Definition eines neuen Arrays fr Ihren Code. Dieser Code entspricht dem ActionScript-Code, den Sie in Schritt 2 geschrieben haben. Wenn Sie den Code testen, wird dieselbe Ausgabe im Bedienfeld Ausgabe angezeigt.

Mehrdimensionale Arrays erstellen


In ActionScript knnen Sie Arrays in Form von verschachtelten Arrays implementieren. Dies sind im Prinzip Arrays von Arrays. Verschachtelte Arrays werden auch als mehrdimensionale Arrays bezeichnet und lassen sich mit Matrizen oder Rastern vergleichen. Bei der Programmierung knnen Sie solche Strukturen mithilfe von mehrdimensionalen Arrays erstellen. Dies kann am Beispiel eines Schachbretts veranschaulicht werden: Ein Schachbrett ist ein Raster aus je acht Spalten und Zeilen. Es kann als Array mit acht Elementen modelliert werden, wobei jedes Element wiederum ein Array mit acht Elementen ist. Nehmen wir als Beispiel eine Aufgabenliste, die als indiziertes String-Array gespeichert ist:
var tasks:Array = ["wash dishes", "take out trash"];

Wenn Sie fr jeden Wochentag eine separate Aufgabenliste speichern mchten, knnen Sie ein mehrdimensionales Array mit jeweils einem Element fr jeden Wochentag erstellen. Jedes Element enthlt ein indiziertes Array, in dem die Aufgabenliste gespeichert wird.
A C H T UN G

Wenn Sie den Array-Zugriffsoperator verwenden, kann der ActionScript-Compiler nicht prfen, ob es sich bei dem Element, auf das zugegriffen wird, um eine gltige Eigenschaft des Objekts handelt.

So erstellen Sie ein einfaches mehrdimensionales Array und rufen Elemente aus dem Array ab:
1.

Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen multiArray1.fla. Fgen Sie Bild 1 der Zeitleiste den folgenden ActionScript-Code hinzu:
var twoDArray:Array = new Array(new Array("one","two"), new Array("three", "four")); trace(twoDArray);

2.

Dieses Array, twoDArray, besteht aus zwei Array-Elementen, die selbst Arrays mit je zwei Elementen sind. In diesem Fall ist twoDArray das bergeordnete Array, das zwei verschachtelte Arrays enthlt.
144 Syntax- und Sprachgrundlagen

3.

Whlen Sie Steuerung > Film testen, um den Code zu testen. Im Bedienfeld Ausgabe wird Folgendes angezeigt:
one,two,three,four

4.

Kehren Sie zur Authoring-Umgebung zurck, und ffnen Sie das Bedienfeld Aktionen. Kommentieren Sie die Anweisung trace aus, wie im Folgenden gezeigt:
// trace(twoDArray);

5.

Fgen Sie im ersten Bild der Zeitleiste den folgenden ActionScript-Code am Ende des Codes an:
trace(twoDArray[0][0]); // eins trace(twoDArray[1][1]); // vier

Zum Abrufen der Elemente aus einem mehrdimensionalen Array verwenden Sie mehrere Array-Zugriffsoperatoren ([]) nach dem Namen des bergeordneten Arrays. Der erste Operator [] bezieht sich auf den Index des bergeordneten Arrays. Die weiteren ArrayZugriffsoperatoren beziehen sich auf Elemente in den verschachtelten Arrays.
6.

Whlen Sie Steuerung > Film testen, um den Code zu testen. Im Bedienfeld Ausgabe wird Folgendes angezeigt:
one four

Sie knnen verschachtelte for-Schleifen verwenden, um mehrdimensionale Arrays zu erstellen. Dies wird im nchsten Beispiel gezeigt.
So erstellen Sie ein mehrdimensionales Array mit einer for-Schleife:
1.

Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen multiArray2.fla. Fgen Sie Bild 1 der Zeitleiste den folgenden ActionScript-Code hinzu:
var gridSize:Number = 3; var mainArr:Array = new Array(gridSize); var i:Number; var j:Number; for (i = 0; i < gridSize; i++) { mainArr[i] = new Array(gridSize); for (j = 0; j < gridSize; j++) { mainArr[i][j] = "[" + i + "][" + j + "]"; } } trace(mainArr);

2.

Dieser ActionScript-Code erstellt ein Array mit 3 x 3 Knoten und stellt den Wert der einzelnen Array-Knoten auf den Index ein. Dann zeigen Sie das Array (mainArr) an.

Arrays

145

3.

Whlen Sie Steuerung > Film testen, um den Code zu testen. Im Bedienfeld Ausgabe wird Folgendes angezeigt:
[0][0],[0][1],[0][2],[1][0],[1][1],[1][2],[2][0],[2][1],[2][2]

Sie knnen auch verschachtelte for-Schleifen verwenden, um die Elemente in einem mehrdimensionalen Array zu durchlaufen, wie im nchsten Beispiel gezeigt.
So verwenden Sie eine for-Schleife fr die Iteration eines mehrdimensionalen Arrays:
1.

Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen multiArray3.fla. Fgen Sie Bild 1 der Zeitleiste den folgenden ActionScript-Code hinzu:
// aus vorherigem Beispiel var gridSize:Number = 3; var mainArr:Array = new Array(gridSize); var i:Number; var j:Number; for (i = 0; i < gridSize; i++) { mainArr[i] = new Array(gridSize); for (j = 0; j < gridSize; j++) { mainArr[i][j] = "[" + i + "][" + j + "]"; } }

2.

In diesem Code aus dem vorherigen Beispiel durchluft die uere Schleife jedes Element von mainArray. Die innere Schleife durchluft jedes verschachtelte Array und gibt jeden Array-Knoten aus.
3.

Fgen Sie in Bild 1 der Zeitleiste den folgenden ActionScript-Code nach dem Code ein, den Sie in Schritt 2 hinzugefgt haben:
// Elemente durchlaufen var outerArrayLength:Number = mainArr.length; for (i = 0; i < outerArrayLength; i++) { var innerArrayLength:Number = mainArr[i].length; for (j = 0; j < innerArrayLength; j++) { trace(mainArr[i][j]); } }

Dieser ActionScript-Code durchluft die Elemente des Arrays. Sie verwenden die Eigenschaft length der einzelnen Arrays als Schleifenbedingung.

146

Syntax- und Sprachgrundlagen

4.

Whlen Sie Steuerung > Film testen, um die Elemente im Bedienfeld Ausgabe anzuzeigen. Im Bedienfeld Ausgabe wird Folgendes angezeigt:
[0][0] [0][1] [0][2] [1][0] [1][1] [1][2] [2][0] [2][1] [2][2]

Weitere Informationen zur Verwendung von Arrays finden Sie in Arrays verwenden auf Seite 138. Einzelheiten zu Array-Elementen finden Sie unter Elemente hinzufgen und entfernen auf Seite 142. Der Array-Zugriffsoperator wird unter Punktoperatoren und Array-Zugriffsoperatoren verwenden auf Seite 159 beschrieben.

Assoziative Arrays erstellen


Ein assoziatives Array hnelt einem Objekt und besteht aus nicht geordneten Schlsseln und Werten. In assoziativen Arrays werden zur Organisation der gespeicherten Werte Schlssel anstelle eines numerischen Index verwendet. Jeder Schlssel ist ein eindeutiger String, der mit einem Wert assoziiert ist und zum Zugriff auf den Wert verwendet wird. Bei dem Wert kann es sich um einen Datentyp wie Number, Array, Object und so weiter handeln. Wenn Sie Code erstellen, mit dem der einem Schlssel zugewiesene Wert gefunden werden soll, wird dies als Indizierung oder Nachschlagen bezeichnet. Dies ist der Hauptzweck von assoziativen Arrays. Die Assoziation zwischen einem Schlssel und einem Wert wird hufig als Bindung bezeichnet, und Schlssel und Wert sind einander zugeordnet. Ein Adressbuch lsst sich beispielsweise mit einem assoziativen Array vergleichen. Hier sind die Namen die Schlssel und die E-Mail-Adressen die Werte.
H I N W E IS

Assoziative Arrays sind nicht geordnete Sammlungen aus Schlssel- und Wert-Paaren. Im Code sollte nicht vorausgesetzt werden, dass die Schlssel eines assoziativen Arrays sich in einer bestimmten Reihenfolge befinden.

Arrays

147

Bei der Verwendung von assoziativen Arrays knnen Sie das gewnschte Array-Element mit einem String anstatt einer Nummer aufrufen. Dies bietet den Vorteil, dass es oft einfacher ist, sich Strings zu merken. Der Nachteil ist, dass diese Arrays in Schleifen weniger geeignet sind, da keine Nummer als Indexwert verwendet wird. Assoziative Arrays sind ntzlich, wenn Sie hufig Schlsselwerte nachschlagen mssen.. Wenn Sie beispielsweise hufig auf die Namen und Altersangaben in einem Array verweisen mssen, bietet sich die Verwendung eines assoziativen Arrays an. Im folgenden Beispiel wird gezeigt, wie Sie ein Objekt erstellen und mehrere Eigenschaften in einem assoziativen Array definieren.
So erstellen Sie ein einfaches assoziatives Array:
1. 2.

Erstellen Sie ein neues Flash-Dokument. Geben Sie in Bild 1 der Zeitleiste den folgenden ActionScript-Code ein:
// Objekt definieren, das als assoziatives Array verwendet werden soll. var someObj:Object = new Object(); // Mehrere Eigenschaften definieren. someObj.myShape = "Rectangle"; someObj.myW = 480; someObj.myH = 360; someObj.myX = 100; someObj.myY = 200; someObj.myAlpha = 72; someObj.myColor = 0xDFDFDF; // Eine Eigenschaft mit dem Punktoperator und der // Array-Zugriffssyntax anzeigen. trace(someObj.myAlpha); // 72 trace(someObj["myAlpha"]); // 72

Die erste ActionScript-Zeile definiert ein neues Objekt (someObj), das Sie als assoziatives Array verwenden. Im Anschluss definieren Sie mehrere Eigenschaften in someObj. Dann zeigen Sie eine Eigenschaft an, die Sie mit dem Punktoperator und der ArrayZugriffssyntax auswhlen.
H I NW E I S

Sie knnen mit zwei verschiedenen Verfahren auf die Variablen in einem assoziativen Array zugreifen: Punktsyntax (someObj.myColor) und Array-Syntax (someObj[myColor]).

3.

Whlen Sie Steuerung > Film testen, um den ActionScript-Code zu testen. Im Bedienfeld Ausgabe wird die Zahl 72 zweimal angezeigt, und zwar fr beide Alphastufen.

148

Syntax- und Sprachgrundlagen

Assoziative Arrays knnen in ActionScript 2.0 mit zwei Verfahren erstellt werden:

Mit einem Object-Konstruktor Mit einem Array-Konstruktor

Diese Verfahren werden in den nchsten Beispielen gezeigt.


HINWEIS

Im vorherigen Beispiel wurde ein Object-Konstruktor zur Erstellung eines assoziativen Arrays verwendet.

Die Erstellung eines assoziativen Arrays mit dem Object-Konstruktor bietet den Vorteil, dass Sie das Array mit einem Objekt-Literal initialisieren knnen. Eine Instanz der Object-Klasse, auch als generisches Objekt bezeichnet, ist funktionsmig mit einem assoziativen Array identisch. Genau genommen handelt es sich bei Object-Instanzen sogar um assoziative Arrays. Assoziative Arrays eignen sich fr Funktionalitt, die mit einem Wrterbuch vergleichbar ist, da String-Schlssel in einem solchen Fall praktischer sind als numerische Indizes. Jeder Eigenschaftsname des generischen Objekts dient als Schlssel, der den Zugriff auf einen gespeicherten Wert ermglicht. Weitere Informationen zu Literalen finden Sie unter Literale auf Seite 103. Weitere Informationen zu Klassen finden Sie in Kapitel 6, Klassen auf Seite 205.
So erstellen Sie ein assoziatives Array mit einem Object-Konstruktor:
1.

Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen assocArray.fla. Fgen Sie Bild 1 der Zeitleiste den folgenden ActionScript-Code hinzu:
var monitorInfo:Object = {type:"Flat Panel", resolution:"1600 x 1200"}; trace(monitorInfo["type"] + ", " + monitorInfo["resolution"]);

2.

Dieser Code erstellt ein assoziatives Array namens monitorInfo und verwendet ein Objekt-Literal, um das Array mit zwei Schlssel-Wert-Paaren zu initialisieren.
H IN W E I S

Wenn das Array nicht bei der Deklaration initialisiert werden muss, knnen Sie das Array mit dem Object-Konstruktor erstellen:

var monitorInfo:Object = new Object(); 3.

Whlen Sie Steuerung > Film testen. Im Bedienfeld Ausgabe wird der folgende Text angezeigt:
Flat Panel, 1600 x 1200

Arrays

149

4.

Fgen Sie in Bild 1 der Zeitleiste den folgenden ActionScript-Code nach dem Code ein, den Sie bereits hinzugefgt haben:
monitorInfo["aspectRatio"] = "16:10"; monitorInfo.colors = "16.7 million"; trace(monitorInfo["aspectRatio"] + ", " + monitorInfo.colors);

Nachdem Sie das Array mit einem Objekt-Literal oder dem Konstruktor der ObjectKlasse erstellt haben, knnen Sie ihm neue Werte hinzufgen, indem Sie eckige Klammern ([]) oder den Punktoperator (.) verwenden, wie in diesem Code gezeigt. Mit dem gerade eingegebenen Code werden dem Array monitorInfo zwei neue Werte hinzugefgt.
5.

Whlen Sie Steuerung > Film testen. Im Bedienfeld Ausgabe wird der folgende Text angezeigt:
16:10, 16.7 million

Beachten Sie, dass ein Schlssel ein Leerzeichen enthalten kann, wenn Sie eckige Klammern verwenden, bei Verwendung des Punktoperators fhrt dies jedoch zu einem Fehler. Es wird nicht empfohlen, Leerzeichen in Schlsselnamen einzuschlieen. Weitere Informationen zu eckigen Klammern und zum Punkt-Operator finden Sie unter Operatoren auf Seite 151. Weitere Informationen zur empfohlenen Codeformatierung finden Sie unter ActionScript-Syntax formatieren auf Seite 778. Die zweite Mglichkeit zur Erstellung eines assoziativen Arrays besteht darin, den ArrayKonstruktor zu verwenden und dem Array dann mit eckigen Klammern ([]) oder dem Punktoperator (.) Schlssel-Wert-Paare hinzuzufgen. Wenn Sie das assoziative Array als Array-Typ deklarieren, kann das Array nicht mit einem Objekt-Literal initialisiert werden.
H I NW E I S 150

Die Verwendung des Array-Konstruktors zur Erstellung eines assoziativen Arrays bietet keine Vorteile. Der Array-Konstruktor eignet sich am besten fr die Erstellung von indizierten Arrays.

Im nchsten Beispiel wird gezeigt, wie Sie mit dem Array-Konstruktor ein assoziatives Array erstellen.

Syntax- und Sprachgrundlagen

So erstellen Sie ein assoziatives Array mit dem Array-Konstruktor:


1.

Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen assocArray2.fla. Fgen Sie Bild 1 der Zeitleiste den folgenden ActionScript-Code hinzu:
var monitorInfo:Array = new monitorInfo["type"] = "Flat monitorInfo["resolution"] = trace(monitorInfo["type"] + Array(); Panel"; "1600 x 1200"; ", " + monitorInfo["resolution"]);

2.

Dieser Code erstellt unter Verwendung des Array-Konstruktors ein assoziatives Array namens monitorInfo und fgt die Schlssel type und resolution mit den zugehrigen Werten hinzu.
3.

Whlen Sie Steuerung > Film testen. Im Bedienfeld Ausgabe wird der folgende Text angezeigt:
Flat Panel, 1600 x 1200
H I NW E I S

Die Verwendung des Array-Konstruktors zur Erstellung eines assoziativen Arrays bietet keine Vorteile. Der Array-Konstruktor eignet sich am besten fr die Erstellung von indizierten Arrays.

Assoziative Arrays sind im Prinzip Instanzen der Object-Klasse, und die Verwendung des Array-Konstruktors zur Erstellung eines assoziativen Arrays bietet keine Vorteile. Sie knnen assoziative Arrays zwar mit dem Konstruktor new Array() erstellen, aber Sie knnen mit einem assoziativen Array keine Methoden und Eigenschaften der Array-Klasse verwenden (wie beispielsweise sort() oder length). Wenn Sie anstelle eines numerischen Index Schlssel-Wert-Paare verwenden mchten, sollten Sie anstelle eines assoziativen Arrays die Object-Klasse verwenden.

Operatoren
In diesem Abschnitt werden die allgemeinen Regeln fr hufig verwendete Operatoren sowie ihre Rangfolge und Assoziativitt beschrieben. Operatoren sind Zeichen, die festlegen, wie die Werte in einem Ausdruck kombiniert, verglichen oder gendert werden. Ein Ausdruck ist eine Anweisung, die von Flash ausgewertet werden kann und die einen Wert zurckgibt. Sie knnen einen Ausdruck erstellen, indem Sie Operatoren und Werte miteinander kombinieren oder eine Funktion aufrufen. Weitere Informationen zu Ausdrcken finden Sie unter Syntax, Anweisungen und Ausdrcke auf Seite 84.

Operatoren

151

In einem mathematischen Ausdruck werden beispielsweise numerische Operatoren zur Manipulation der Werte verwendet. Beispiele fr Operatoren sind +, <, * und =. Ein Ausdruck besteht aus Operatoren und Operanden. Dies sind gltige Kombinationen aus ActionScript-Symbolen, die einen Wert darstellen. Ein Operand ist der Teil des Codes, auf den der Operator sich auswirkt. Im Ausdruck x + 2 sind x und 2 beispielsweise Operanden, whrend es sich bei + um einen Operator handelt. Ausdrcke und Operatoren werden hufig im Code eingesetzt. Sie knnen Operatoren und Werte kombinieren, um einen Ausdruck zu erstellen, oder Sie knnen eine Funktion aufrufen.
H I N WE I S

In diesem Abschnitt wird die Verwendung von Operatoren beschrieben, aus Platzgrnden knnen jedoch nicht alle Operatoren erlutert werden. Informationen zu allen Operatoren, einschlielich speziellen Operatoren, die sich nicht in die folgenden Kategorien einteilen lassen, finden Sie im ActionScript 2.0-Referenzhandbuch.

Die Teile des Codes, auf die der Operator angewendet wird, werden als Operanden bezeichnet. Beispielsweise knnen Sie den Additionsoperator (+) verwenden, um die Werte eines numerischen Literals zu addieren. Damit knnten Sie den Wert einer Variablen namens myNum addieren.
myNum + 3;

In diesem Beispiel sind myNum und 3 Operanden. In diesem Abschnitt werden die allgemeinen Regeln fr hufig verwendete Operatoren sowie ihre Rangfolge und Assoziativitt beschrieben. Operatoren zur Manipulation von Werten verwenden auf Seite 153 Rangfolge und Assoziativitt von Operatoren auf Seite 155 Operatoren mit Strings verwenden auf Seite 157 Punktoperatoren und Array-Zugriffsoperatoren verwenden auf Seite 159 Suffix-Operatoren auf Seite 161 Unre Operatoren auf Seite 162 Multiplikative Operatoren auf Seite 163 Additionsoperatoren auf Seite 163 Numerische Operatoren verwenden auf Seite 164 Relationale Operatoren auf Seite 165 Gleichheitsoperatoren auf Seite 165 Relationale Operatoren und Gleichheitsoperatoren verwenden auf Seite 166 Zuweisungsoperatoren auf Seite 169 Zuweisungsoperatoren verwenden auf Seite 170

152

Syntax- und Sprachgrundlagen

Logische Operatoren auf Seite 170 Logische Operatoren verwenden auf Seite 171 Operatoren fr die bitweise Verschiebung auf Seite 172 Bitweise logische Operatoren auf Seite 173 Bitweise Operatoren verwenden auf Seite 173 Der Bedingungsoperator auf Seite 175 Operatoren in einem Dokument verwenden auf Seite 175

Einzelheiten zu Operatoren, die nicht zu diesen Kategorien gehren, finden Sie im ActionScript 2.0-Referenzhandbuch. Dieses Handbuch enthlt Informationen zu allen verfgbaren Operatoren. In den folgenden Abschnitten werden einige hufige Einsatzzwecke fr Operatoren erlutert. Informationen zur Verwendung von mehreren Operatoren in einem Codebeispiel finden Sie unter Operatoren in einem Dokument verwenden auf Seite 175.

Operatoren zur Manipulation von Werten verwenden


Operatoren werden hufig verwendet, um in Flash Werte zu manipulieren. Beispielsweise knnen Sie ein Spiel in Flash erstellen, bei dem der Punktestand sich je nach der Interaktion des Benutzers mit den Instanzen auf der Bhne ndert. Dabei verwenden Sie eine Variable, die den Wert enthlt, und Operatoren, um den Wert der Variablen zu ndern. Angenommen, Sie mchten den Wert einer Variablen namens myScore erhhen. Im folgenden Beispiel wird gezeigt, wie Sie die Operatoren + (Addition) und += (Additionszuweisung) verwenden, um Werte im Code hinzuzufgen und zu erhhen.
So manipulieren Sie Werte mithilfe von Operatoren:
1. 2.

Erstellen Sie ein neues Flash-Dokument. ffnen Sie das Bedienfeld Aktionen (Fenster > Aktionen), und geben Sie den folgenden Code in den Skriptbereich ein:
// Beispiel 1 var myScore:Number = 0; myScore = myScore + 1; trace("Example one: " + myScore); // 1 // Beispiel 2 var secondScore:Number = 1; secondScore += 3; trace("Example two: " + secondScore); // 4

Operatoren

153

3.

Whlen Sie Steuerung > Film testen. Im Bedienfeld Ausgabe wird der folgende Text angezeigt:
Example one: 1 Example two: 4

Der Additionsoperator ist relativ unkompliziert, da er nur zwei Werte addiert. Im ersten Codebeispiel addiert er den aktuellen Wert von myScore und die Zahl 1 und speichert das Ergebnis in der Variablen myScore. Im zweiten Codebeispiel wird mit dem Additionszuweisungsoperator in einem Schritt ein neuer Wert hinzugefgt und zugewiesen. Die Zeile myScore = myScore + 1 aus dem letzten Beispiel kann auch als myScore++ oder sogar als myScore += 1 geschrieben werden. Der Inkrementoperator (++) bildet eine vereinfachte Form von myScore = myScore + 1, da Erhhung und Zuweisung des Werts gleichzeitig durchgefhrt werden. Der folgende ActionScript-Code zeigt ein Beispiel fr den Inkrementoperator:
var myNum:Number = 0; myNum++; trace(myNum); // 1 myNum++; trace(myNum); // 2

Beachten Sie, dass das vorherige Codebeispiel keine Zuweisungsoperatoren enthlt, sondern stattdessen den Inkrementoperator verwendet. Der Wert einer Variablen kann mithilfe von Operatoren manipuliert werden, whrend eine Bedingung true ist. Beispielsweise knnen Sie den Inkrementoperator (++) verwenden, um die Variable i zu erhhen, whrend die Bedingung zutrifft. Im folgenden Codebeispiel ist die Bedingung true, solange der Wert von i weniger als 10 betrgt. Whrend die Bedingung zutrifft, erhhen Sie i mit dem Operator i++ um Eins.
var i:Number; for (i = 1; i < 10; i++) { trace(i); }

Im Bedienfeld Ausgabe werden die Zahlen 1 bis 9 angezeigt, das heit, der Wert von i wird erhht, bis die Endbedingung erreicht ist (i ist gleich 10). Der letzte angezeigte Wert ist 9. Deshalb hat i den Wert 1, wenn die Wiedergabe der SWF-Datei gestartet wird, und den Wert 9, wenn der Vorgang abgeschlossen ist. Weitere Informationen zu Bedingungen und Schleifen finden Sie unter Anweisungen auf Seite 114.

154

Syntax- und Sprachgrundlagen

Rangfolge und Assoziativitt von Operatoren


Wenn eine Anweisung mindestens zwei Operatoren enthlt, gilt fr die Operatoren eine bestimmte Rangfolge. Rangfolge und Assoziativitt der Operatoren bestimmen die Reihenfolge, in der die Operatoren verarbeitet werden. In ActionScript wird die Verarbeitungsreihenfolge der Operatoren von einer Hierarchie bestimmt. Diese Hierarchie wird in einer Tabelle am Ende dieses Abschnitts dargestellt. Obwohl es fr Personen mit arithmetischen und einfachen Programmierkenntnissen natrlich erscheinen mag, dass der Compiler den Multiplikationsoperator (*) vor dem Additionsoperator (+) ausfhrt, braucht der Compiler konkrete Anweisungen dafr, in welcher Reihenfolge Operatoren verarbeitet werden sollen. Diese Anweisungen werden zusammenfassend als Operatorrangfolge bezeichnet. Sie sehen ein Beispiel fr die Operatorrangfolge, wenn Sie mit den Multiplikations- und Additionsoperatoren arbeiten:
var mySum:Number; mySum = 2 + 4 * 3; trace(mySum); // 14

Die Ausgabe dieser Anweisung lautet 14, da die Multiplikation eine hhere Rangfolge hat. Deshalb wird 4 * 3 zuerst berechnet, und das Ergebnis wird mit 2 addiert. Sie knnen die Rangfolge steuern, indem Sie Ausdrcke in runde Klammern einschlieen. In ActionScript gilt eine Standardreihenfolge fr Operatoren, die Sie jedoch mithilfe von runden Klammern (()) ndern knnen. Wenn Sie den Additionsausdruck in runde Klammern einschlieen, wird die Addition zuerst ausgefhrt:
var mySum:Number; mySum = (2 + 4) * 3; trace(mySum); // 18

Die Ausgabe dieser Anweisung lautet 18. Es ist auch mglich, dass Operatoren dieselbe Rangfolge haben. In diesem Fall wird die Ausfhrungsreihenfolge der Operatoren von der Assoziativitt bestimmt. Hierbei wird zwischen Linksassoziativitt (in Links-Rechts-Richtung) und Rechtsassoziativitt (in RechtsLinks-Richtung) unterschieden. Sehen Sie sich noch einmal den Multiplikationsoperator an. Da fr ihn die Linksassoziativitt gilt, sind die beiden folgenden Anweisungen gleich.
var mySum:Number; var myOtherSum:Number; mySum = 2 * 4 * 3; myOtherSum = (2 * 4) * 3; trace(mySum); // 24 trace(myOtherSum); // 24

Operatoren

155

In manchen Fllen knnen zwei oder mehr Operatoren mit derselben Rangfolge sich im selben Ausdruck befinden. In diesen Fllen ermittelt der Compiler anhand der Regeln der Assoziativitt, welcher Operator zuerst verarbeitet wird. Fr alle binren Operatoren, mit Ausnahme der Zuweisungsoperatoren, gilt die Linksassoziativitt. Das heit, dass die Operatoren auf der linken Seite vor den Operatoren auf der rechten Seite verarbeitet werden. Fr die Zuweisungsoperatoren und den Bedingungsoperator (?:) gilt die Rechtsassoziativitt, so dass die Operatoren auf der rechten Seite vor den Operatoren auf der linken Seite verarbeitet werden. Weitere Informationen zu Zuweisungsoperatoren finden Sie unter Zuweisungsoperatoren verwenden auf Seite 170. Einzelheiten zum Bedingungsoperator (?:) finden Sie unter Der Bedingungsoperator auf Seite 175. Die Operatoren < und > haben beispielsweise dieselbe Rangfolge. Wenn beide Operatoren im selben Ausdruck enthalten sind, wird der linke Operator zuerst verarbeitet, da fr beide Operatoren die Linksassoziativitt gilt. Das heit, dass die beiden folgenden Anweisungen dieselbe Ausgabe generieren:
trace(3 > 2 < 1); // false trace((3 > 2) < 1); // false

Der Operator > wird zuerst verarbeitet. Als Ergebnis entsteht der Wert true, da der Operand 3 grer als der Operand 2 ist. Dann wird der Wert true mit dem Operanden 1 an den Operator < bergeben. Der Operator < konvertiert den Wert true in den numerischen Wert 1 und vergleicht diesen numerischen Wert mit dem zweiten Operanden 1. Dadurch wird der Wert false zurckgegeben, da der Wert 1 nicht kleiner als 1 ist. Bercksichtigen Sie die Rangfolge der Operanden in Ihrem ActionScript-Code, besonders wenn Sie komplexe Bedingungen erstellen und wissen, wie oft eine dieser Bedingungen zutrifft. Wenn Sie beispielsweise wissen, dass i in der Bedingung grer als 50 sein wird, mssen Sie i<50 zuerst schreiben. Diese Bedingung wird dann zuerst berprft, und die zweite Bedingung muss weniger hufig berprft werden.

156

Syntax- und Sprachgrundlagen

In der folgenden Tabelle sind die Operatoren fr ActionScript 2.0 in absteigender Rangfolge aufgefhrt. Jede Reihe der Tabelle enthlt Operatoren der gleichen Rangfolge. Jede Reihe mit Operatoren hat einen hheren Rang als die Reihe, die darunter folgt. Weitere Informationen und Richtlinien zur Verwendung von Operatoren und Klammern finden Sie in Kapitel 17, ActionScript-Syntax formatieren auf Seite 778.
Gruppe
Primr Postfix Unr Multiplikativ Additiv Bitweise Verschiebung Relational Gleichheit Bitweises AND Bitweises XOR Bitweises OR Logisches AND Logisches OR Bedingung Zuweisung Komma

Operatoren
[] {x:y} () f(x) new x.y x[y] x++ x-++x --x + - ~ ! delete typeof void * / % + << >> >>>

< > <= >= instanceof == != === !== & ^ | && || ?: = *= /= %= += -= <<= >>= >>>= &= ^= |= ,

Operatoren mit Strings verwenden


Vergleichsoperatoren konvertieren einen Operanden in den anderen Typ, wenn die beiden Datentypen unterschiedlich sind. Handelt es sich bei dem einen Operanden um einen String und bei dem anderen um eine Zahl, wandelt ActionScript den String-Operand in eine Zahl um und fhrt einen numerischen Vergleich durch. Eine Ausnahme dieser Regel ist der strikte Gleichheits-Operator (===), der das Gleiche wie der Gleichheits-Operator (==) bewirkt, es erfolgt jedoch keine Umwandlung der Datentypen. Das Ergebnis ist true, wenn die Ausdrcke, einschlielich Datentypen, gleich sind. Weitere Informationen zu numerischen Operatoren finden Sie unter Numerische Operatoren verwenden auf Seite 164.

Operatoren

157

Mit Ausnahme des Gleichheitsoperators (==) wirken sich Vergleichsoperatoren (>, >=, < und <=) auf Strings anders aus als auf andere Werte. Vergleichsoperatoren vergleichen Strings, um festzustellen, welcher String alphabetisch an erster Stelle steht. Strings in Grobuchstaben stehen vor Strings in Kleinbuchstaben, Ei kommt also vor apfel.
var c:String = "chicken"; var e:String = "Egg"; trace(c < e); // false var riddleArr:Array = new Array(c, e); trace(riddleArr); // apfel,Ei trace(riddleArr.sort()); // Ei,apfel

In diesem ActionScript-Code wird der Inhalt des Arrays mit der Methode sort() der Array-Klasse alphabetisch neu sortiert. Der Wert Ei steht vor dem Wert apfel, da der Grobuchstabe E vor dem Kleinbuchstaben a kommt. Wenn die Gro- und Kleinschreibung beim Vergleich der Strings nicht bercksichtigt werden soll, mssen Sie die Strings vor dem Vergleichen ganz in Grobuchstaben oder ganz in Kleinbuchstaben konvertieren. Weitere Informationen zu Vergleichsoperatoren finden Sie unter Gleichheitsoperatoren auf Seite 165 und Relationale Operatoren und Gleichheitsoperatoren verwenden auf Seite 166. Mit den Methoden toLowerCase() und toUpperCase() knnen Sie Strings in Klein- bzw. Grobuchstaben konvertieren, bevor Sie sie vergleichen. Im folgenden Beispiel werden beide Strings in Kleinbuchstaben konvertiert und dann verglichen. Nun kommt der Apfel vor dem Ei:
var c:String = "chicken"; var e:String = "Egg"; trace(c.toLowerCase() < e.toLowerCase()); // true
H IN W E I S 158

Vergleichsoperatoren vergleichen nur zwei Strings. Sie knnen beispielsweise keine Werte vergleichen, wenn es sich bei einem Operanden um einen numerischen Wert handelt. Wenn einer der Operanden ein String ist, wandelt ActionScript beide Operanden in Zahlen um und fhrt einen numerischen Vergleich durch.

Mithilfe von Operatoren knnen Sie Strings manipulieren. Mit dem Additionsoperator (+) lassen sich String-Operanden verketten. Mglicherweise haben Sie den Additionsoperator bereits zum Verketten von Strings eingesetzt, wenn Sie trace-Anweisungen geschrieben haben. Sie knnten beispielsweise folgenden Code schreiben:
var myNum:Number = 10; trace("The variable is " + myNum + ".");

Wenn Sie diesen Code testen, wird im Bedienfeld Ausgabe der folgende Text angezeigt:
The variable is 10.

Syntax- und Sprachgrundlagen

Im vorherigen Beispiel verwendet die Anweisung trace den Operator + zum Verketten, nicht zum Hinzufgen. Strings und Zahlen werden in Flash manchmal nicht numerisch addiert, sondern verkettet. Sie knnen beispielsweise zwei Strings aus verschiedenen Variablen in einem Textfeld verketten. Im folgenden ActionScript-Code wird die Variable myNum mit einem String verkettet, und der String wird im Textfeld myTxt auf der Bhne angezeigt.
this.createTextField("myTxt", 11, 0, 0, 100, 20); myTxt.autoSize = "left"; var myNum:Number = 10; myTxt.text = "One carrot. " + myNum + " large eggplants."; myTxt.text += " Lots of vegetable broth.";

Dieser Code gibt folgenden Text in einem Textfeld mit dem Instanznamen myTxt aus:
One carrot. 10 large eggplants. Lots of vegetable broth.

Im vorherigen Beispiel wurde gezeigt, wie Strings mit dem Additionsoperator (+) und dem Additionszuweisungsoperator (+=) verkettet werden knnen. In der dritten Codezeile dient der Additionsoperator dazu, den Wert der Variablen myNum im Textfeld zu verketten. In der vierten Codezeile wird der Additionszuweisungsoperator verwendet, um einen String mit dem vorhandenen Wert im Textfeld zu verketten. Wenn nur einer der Textstring-Operanden tatschlich ein String ist, wird der andere Operand von Flash in einen String umgewandelt. Deshalb wird der Wert von myNum im vorherigen Beispiel in einen String konvertiert.
H I NW E I S

ActionScript behandelt Leerzeichen am Anfang oder Ende eines Strings als tatschlichen Bestandteil der Zeichenfolge.

Punktoperatoren und Array-Zugriffsoperatoren verwenden


Mit dem Punktoperator (.) und dem Array-Zugriffsoperator ([]) knnen Sie auf integrierte oder benutzerdefinierte ActionScript-Eigenschaften zugreifen. Mit Punktoperatoren knnen Sie auf bestimmte Indizes in einem Objekt verweisen. Wenn ein Objekt beispielsweise Benutzerinformationen enthlt, knnen Sie einen bestimmten Schlsselnamen im ArrayZugriffsoperator angeben, um einen Benutzernamen abzurufen, wie im folgenden ActionScript-Code gezeigt:
var someUser:Object = {name:"Hal", id:2001}; trace("User's name is: " + someUser["name"]); // Benutzername lautet: Hans trace("User's id is: " + someUser["id"]); // Benutzer-ID lautet: 2001

Operatoren

159

Im folgenden ActionScript-Code wird der Punktoperator verwendet, um bestimmte Eigenschaften in Objekten festzulegen:
myTextField.border = true; year.month.day = 9; myTextField.text = "My text";

Der Punktoperator ist dem Array-Zugriffsoperator sehr hnlich. Beim Punktoperator dient ein Bezeichner als Eigenschaft, whrend der Array-Zugriffsoperator den Inhalt zu einem Namen auswertet und dann auf den Wert dieser benannten Eigenschaft zugreift. Mit dem Array-Zugriffsoperator knnen Instanznamen und Variablen dynamisch festgelegt und abgerufen werden. Der Array-Zugriffsoperator ist ntzlich, wenn Sie nicht genau wissen, welche Schlssel in einem Objekt enthalten sind. In einem solchen Fall knnen Sie eine Schleife for..in verwenden, um ein Objekt oder einen Movieclip zu durchlaufen und den Inhalt anzuzeigen.
So verwenden Sie Punktoperatoren und Array-Zugriffsoperatoren:
1. 2. 3. 4.

Erstellen Sie in einem neuen Flash-Dokument einen Movieclip auf der Hauptzeitleiste. Whlen Sie den Movieclip aus, und ffnen Sie den Eigenschafteninspektor. Geben Sie den Instanznamen myClip ein. Fgen Sie Bild 1 der Zeitleiste den folgenden ActionScript-Code hinzu:
myClip.spam = 5; trace(myClip.spam); // 5

Wenn Sie fr die Instanz myClip in der aktuellen Zeitleiste einen Wert festlegen mchten, knnen Sie den Punktoperator oder den Array-Zugriffsoperator verwenden, wie in diesem ActionScript-Code gezeigt. Wenn Sie innerhalb des Array-Zugriffsoperators einen Ausdruck schreiben, wird dieser Ausdruck zuerst ausgewertet, und das Ergebnis wird als Variablenname verwendet.
5.

Whlen Sie Steuerung > Film testen, um das Dokument zu testen. Im Bedienfeld Ausgabe wird die Zahl 5 angezeigt. Kehren Sie zur Authoring-Umgebung zurck, und ersetzen Sie die erste ActionScript-Zeile durch folgenden Code:
myClip["spam"] = 10;

6.

7.

Whlen Sie Steuerung > Film testen, um das Dokument zu testen. Im Bedienfeld Ausgabe wird die Zahl 10 angezeigt. Kehren Sie zur Authoring-Umgebung zurck, und doppelklicken Sie auf die Instanz myClip. Fgen Sie innerhalb der Instanz myClip vier neue Instanzen hinzu.

8.

9.

160

Syntax- und Sprachgrundlagen

10. Weisen

Sie den neuen Instanzen im Eigenschafteninspektor die folgenden Instanznamen zu: nestedClip1, nestedClip2, nestedClip3 und nestedClip4. Fgen Sie Bild 1 in der Hauptzeitleiste den folgenden Code hinzu:
var i:Number; for (i = 1; i <= 4; i++) { myClip["nestedClip" + i]._visible = false; }

11.

Mit diesem ActionScript-Code wird die Anzeige der verschachtelten Movieclips ein- oder ausgeschaltet.
12. Whlen Sie Steuerung

> Film testen, um den gerade hinzugefgten ActionScript-Code zu

testen. Die vier verschachtelten Instanzen sind jetzt nicht sichtbar. Sie verwenden den ArrayZugriffsoperator, um jeden verschachtelten Movieclip in der Instanz myClip zu durchlaufen und die Eigenschaft fr die Sichtbarkeit dynamisch festzulegen. Damit sparen Sie Zeit, da Sie nicht konkret auf jede Instanz verweisen mssen. Der Array-Zugriffsoperator kann auch auf der linken Seite einer Zuweisung eingesetzt werden, um die Namen von Instanzen, Variablen und Objekten dynamisch einzustellen:
myNum[i] = 10;

In ActionScript 2.0 knnen Sie eckige Klammern als Operator fr den Zugriff auf dynamisch erstellte Objekteigenschaften verwenden, falls die Klassendefinition fr das Objekt nicht ber das Attribut dynamic verfgt. Auerdem knnen Sie mehrdimensionale Arrays mit diesem Operator erstellen. Weitere Informationen zum Erstellen von mehrdimensionalen Arrays mit Array-Zugriffsoperatoren finden Sie unter Mehrdimensionale Arrays erstellen auf Seite 144.

Suffix-Operatoren
Suffix-Operatoren erhhen oder verringern den Wert eines Operators. Diese Operatoren sind zwar unr, werden jedoch nicht zusammen mit den anderen unren Operatoren klassifiziert, da sie eine hhere Rangfolge und ein besonderes Verhalten aufweisen. Weitere Informationen zu unren Operatoren finden Sie unter Unre Operatoren auf Seite 162. Wenn Sie einen Suffix-Operator in einem greren Ausdruck verwenden, wird der Wert des Ausdrucks zurckgegeben, bevor der Suffix-Operator verarbeitet wird. Beispielsweise wird im folgenden Code der Wert des Ausdrucks xNum++ zurckgegeben, bevor der Wert erhht wird.
var xNum:Number = 0; trace(xNum++); // 0 trace(xNum); // 1

Fr diesen Code wird im Bedienfeld Ausgabe folgender Text angezeigt:


0 1
Operatoren 161

Die Operatoren in dieser Tabelle haben dieselbe Rangfolge:


Operator
++ --

Ausgefhrte Operation
Inkrement (Suffix) Dekrement (Suffix)

Unre Operatoren
Unre Operatoren wirken sich auf einen Operanden aus. Die Operatoren zum Inkrementieren (++) und Dekrementieren (--) in dieser Gruppe sind Prfix-Operatoren, da sie in einem Ausdruck vor dem Operanden stehen. Sie knnen auch nach dem Operanden stehen, werden dann jedoch als Suffix-Operatoren bezeichnet. Weitere Informationen zu Suffix-Operatoren finden Sie unter Suffix-Operatoren auf Seite 161. Prfix-Operatoren unterscheiden sich von den entsprechenden Suffix-Operatoren, da das Erhhen oder Verringern abgeschlossen wird, bevor der Wert des Gesamtausdrucks zurckgegeben wird. Beispielsweise wird im folgenden Code der Wert des Ausdrucks xNum++ zurckgegeben, nachdem der Wert erhht wird.
var xNum:Number = 0; trace(++xNum); // 1 trace(xNum); // 1

Alle Operatoren in dieser Tabelle haben dieselbe Rangfolge:


Operator
++ -+ ! typeof void

Ausgefhrte Operation
Inkrement (Prfix) Dekrement (Prfix) Unr + Unr - (Negation) Gibt Typinformationen zurck Gibt einen undefinierten Wert zurck

162

Syntax- und Sprachgrundlagen

Multiplikative Operatoren
Multiplikative Operatoren nehmen mit zwei Operanden Multiplikationen, Divisionen und Restwertberechnungen vor. Zu den anderen numerischen Operatoren gehren die Additionsoperatoren. Informationen zu Additionsoperatoren finden Sie unter Additionsoperatoren auf Seite 163. Alle Operatoren in dieser Tabelle haben dieselbe Rangfolge:
Operator
* / %

Ausgefhrte Operation
Multiplikation Division Modulo

Weitere Informationen zu multiplikativen Operatoren finden Sie unter Numerische Operatoren verwenden auf Seite 164.

Additionsoperatoren
Additionsoperatoren nehmen mit zwei Operanden Additionen und Subtraktionen vor. Zu den anderen numerischen Operatoren gehren die multiplikativen Operatoren. Informationen zu multiplikativen Operatoren finden Sie unter Multiplikative Operatoren auf Seite 163. Die Operatoren in dieser Tabelle haben dieselbe Rangfolge:
Operator
+ -

Ausgefhrte Operation
Addition Subtraktion

Informationen zu Additionsoperatoren finden Sie unter Numerische Operatoren verwenden auf Seite 164.

Operatoren

163

Numerische Operatoren verwenden


Mit numerischen Operatoren werden Werte in ActionScript addiert, subtrahiert, dividiert und multipliziert. Sie knnen unterschiedliche Arten von arithmetischen Operationen durchfhren. Einer der hufigsten Operatoren ist der Inkrementoperator, der normalerweise als i++ formatiert wird. Dieser Operator kann fr verschiedene Zwecke eingesetzt werden. Weitere Informationen zum Inkrementoperator finden Sie unter Operatoren zur Manipulation von Werten verwenden auf Seite 153. Der Inkrementoperator kann sich vor (Pr-Inkrement) oder nach (Post-Inkrement ) einem Operanden befinden.
So verwenden Sie numerische Operatoren in ActionScript:
1. 2.

Erstellen Sie ein neues Flash-Dokument. Geben Sie in Bild 1 der Zeitleiste den folgenden ActionScript-Code ein:
// Beispiel 1 var firstScore:Number = 29; if (++firstScore >= 30) { // sollte angezeigt werden trace("Success! ++firstScore is >= 30"); } // Beispiel 2 var secondScore:Number = 29; if (secondScore++ >= 30) { // sollte nicht angezeigt werden trace("Success! secondScore++ is >= 30"); }

3.

Whlen Sie Steuerung > Film testen, um den ActionScript-Code zu testen. Der Codeblock Beispiel 1 wird angezeigt, der Codeblock Beispiel 2 jedoch nicht. Im ersten Beispiel wird ein Pr-Inkrement (++firstScore) verwendet, um firstScore zu erhhen und zu berechnen, bevor es gegen 30 getestet wird. Daher wird firstScore auf 30 erhht und dann gegen 30 getestet. In Beispiel 2 wird dagegen ein Post-Inkrement (secondScore++) verwendet, das nach dem Test ausgewertet wird. Deshalb wird 29 mit 30 verglichen und nach der Auswertung auf 30 erhht.

Bei der Arbeit mit dem Additionsoperator knnen unerwartete Ergebnisse auftreten, wenn Sie versuchen, Werte in einem Ausdruck hinzuzufgen, wie im folgenden Beispiel gezeigt:
trace("the sum of 5 + 2 is: " + 5 + 2); // die Summe von 5 + 2 ist: 52

Flash verkettet die Werte 5 und 2, anstatt sie zu addieren. Um dieses Problem zu umgehen, knnen Sie den Ausdruck 5+2 in Klammern einschlieen, wie im folgenden Code gezeigt:
trace("the sum of 5 + 2 is: " + (5 + 2)); // die Summe von 5 + 2 ist: 7

164

Syntax- und Sprachgrundlagen

Weitere Informationen zur Rangfolge der Operatoren finden Sie unter Rangfolge und Assoziativitt von Operatoren auf Seite 155. Wenn Sie Daten aus externen Quellen laden (wie XML-Dateien, FlashVars, Web Services und so weiter) mssen Sie beim Einsatz von numerischen Operatoren sehr vorsichtig vorgehen. In manchen Fllen interpretiert Flash die Zahlen als Strings, da die SWF-Datei den Datentyp der Zahl nicht kennt. In diesem Fall knnte bei einer Addition von 3 und 7 das Ergebnis 37 entstehen, weil beide Zahlen wie Strings verkettet anstatt numerisch addiert werden. Um dieses Problem zu umgehen, mssen Sie die Daten mit der Funktion Number() manuell von Strings in Zahlen konvertieren.

Relationale Operatoren
Relationale Operatoren vergleichen die Werte von zwei Operanden und geben einen Booleschen Wert zurck. Alle Operatoren in dieser Tabelle haben dieselbe Rangfolge:
Operator
< > <= >= instanceof in

Ausgefhrte Operation
Kleiner als Grer als Kleiner als oder gleich Grer als oder gleich berprft Prototypkette berprft Objekteigenschaften

Informationen zu relationalen Operatoren finden Sie unter Relationale Operatoren und Gleichheitsoperatoren verwenden auf Seite 166.

Gleichheitsoperatoren
Gleichheitsoperatoren vergleichen die Werte von zwei Operanden und geben einen Booleschen Wert zurck. Alle Operatoren in dieser Tabelle haben dieselbe Rangfolge:
Operator
== != === !==

Ausgefhrte Operation
Gleichheit Ungleichheit Strikte Gleichheit Strikte Ungleichheit

Informationen zu Gleichheitsoperatoren finden Sie unter Relationale Operatoren und Gleichheitsoperatoren verwenden auf Seite 166.
Operatoren 165

Relationale Operatoren und Gleichheitsoperatoren verwenden


Relationale Operatoren und Gleichheitsoperatoren, auch als Vergleichsoperatoren bezeichnet, vergleichen die Werte von Ausdrcken und geben einen Booleschen Wert zurck (true oder false). Vergleichsoperatoren werden hufig in Bedingungsanweisungen und Schleifen verwendet, um die Bedingung anzugeben, bei der die Schleife beendet wird. Mit dem Gleichheitsoperator (==) knnen Sie bestimmen, ob die Werte oder Verweise von zwei Operanden gleich sind. Dieser Vergleich gibt einen Booleschen Wert zurck. String-, Number- und Boolean-Werte von Operanden werden mit einem Wert verglichen, Objectund Array-Operanden dagegen mit einem Verweis. In diesem Beispiel wird gezeigt, wie Sie mit dem Gleichheitsoperator die Lnge des Arrays testen und eine Meldung im Bedienfeld Ausgabe anzeigen, wenn das Array keine Elemente enthlt.
var myArr:Array = new Array(); if (myArr.length == 0) { trace("the array is empty."); }

Wenn Sie Steuerung > Film testen auswhlen, wird der String the array is empty im Bedienfeld Ausgabe angezeigt. Der Gleichheitsoperator kann zum Vergleichen von Werten, nicht aber zum Einstellen von Werten verwendet werden. Sie knnen versuchen, die Gleichheit mit dem Zuweisungsoperator (=) zu berprfen.
So verwenden Sie relationale Operatoren und Gleichheitsoperatoren im Code:
1. 2.

Erstellen Sie ein neues Flash-Dokument. Geben Sie in Bild 1 der Zeitleiste den folgenden ActionScript-Code ein:
var myNum:Number = 2; if (myNum == 2) { // Aktion ausfhren trace("It equals 2"); }

In diesem ActionScript-Code verwenden Sie den Gleichheitsoperator (==), um die Gleichheit zu berprfen. Sie berprfen, ob die Variable myNum gleich 2 ist.
3.

Whlen Sie Steuerung > Film testen. Der String It equals 2 wird im Bedienfeld Ausgabe angezeigt.

166

Syntax- und Sprachgrundlagen

4.

Kehren Sie zur Authoring-Umgebung zurck, und ndern Sie:


var myNum:Number = 2;

in:
var myNum:Number = 4; 5.

Whlen Sie noch einmal Steuerung > Film testen. Der String It equals 2 wird nicht im Bedienfeld Ausgabe angezeigt. Kehren Sie zur Authoring-Umgebung zurck, und ndern Sie:
if (myNum == 2) {

6.

in
if (myNum = 2) { 7.

Whlen Sie noch einmal Steuerung > Film testen. Der String It equals 2 wird wieder im Bedienfeld Ausgabe angezeigt. In Schritt 6 weisen Sie myNum den Wert 2 zu, anstatt myNum mit 2 zu vergleichen. In diesem Fall wird die Anweisung if unabhngig vom vorherigen Wert von myNum ausgefhrt. Dies kann zu unerwarteten Ergebnissen beim Testen des Flash-Dokuments fhren. Weitere Informationen zur korrekten Verwendung des Zuweisungsoperators finden Sie unter Zuweisungsoperatoren verwenden auf Seite 170.

Der strikte Gleichheitsoperator (===) hnelt dem Gleichheitsoperator, fhrt jedoch keine Typumwandlung durch. Wenn zwei Operanden nicht denselben Typ aufweisen, gibt der Gleichheitsoperator false zurck. Der strikte Ungleichheitsoperator !== funktioniert genau umgekehrt wie der strikte Gleichheitsoperator. Im folgenden ActionScript-Code wird der Hauptunterschied zwischen dem Gleichheitsoperator (==) und dem strikten Gleichheitsoperator (===) veranschaulicht:
var num1:Number = 32; var num2:String = new String("32"); trace(num1 == num2); // true trace(num1 === num2); // false

Zuerst definieren Sie numerische Variablen: num1 und num2. Wenn Sie die Variablen mit dem Gleichheitsoperator vergleichen, versucht Flash, die Werte in denselben Datentyp zu konvertieren. Dann werden die Werte miteinander verglichen, um festzustellen, ob sie gleich sind. Bei Verwendung des strikten Gleichheitsoperators (===) wird vor dem Vergleich der Werte keine Datentypumwandlung durchgefhrt. Deshalb interpretiert Flash die Variablen als zwei separate Werte. Im folgenden Beispiel verwenden Sie den Operator >= (grer oder gleich), um Werte zu vergleichen und auf Grundlage des Werts, den ein Benutzer in ein Textfeld eingibt, Code auszufhren.

Operatoren

167

So verwenden Sie den Operator = (grer oder gleich) im Code:


1.

Whlen Sie Datei > Neu und dann Flash-Dokument, um eine neue FLA-Datei zu erstellen. Fgen Sie Bild 1 in der Hauptzeitleiste den folgenden Code hinzu:
this.createTextField("myTxt", 20, 0, 0, 100, 20); myTxt.type = "input"; myTxt.border = true; myTxt.restrict = "0-9"; this.createEmptyMovieClip("submit_mc", 30); submit_mc.beginFill(0xFF0000); submit_mc.moveTo(0, 0); submit_mc.lineTo(100, 0); submit_mc.lineTo(100, 20); submit_mc.lineTo(0, 20); submit_mc.lineTo(0, 0); submit_mc.endFill(); submit_mc._x = 110; submit_mc.onRelease = function(evt_obj:Object):Void { var myNum:Number = Number(myTxt.text); if (isNaN(myNum)) { trace("Please enter a number"); return; } if (myNum >= 10) { trace("Your number is greater than or equal to 10"); } else { trace("Your number is less than 10"); } };

2.

3.

Whlen Sie Steuerung > Film testen, um den ActionScript-Code zu testen. Sie knnen auch berprfen, ob bestimmte Bedingungen zutreffen, und einen Alternativblock ausfhren, wenn die Bedingung nicht zutrifft.

4.

ndern Sie die Bedingung im ActionScript-Code, wie im Folgenden gezeigt.


if (myNum == 10) { trace("Your number is 10"); } else { trace("Your number is not 10"); }

5.

Whlen Sie Steuerung > Film testen, um den ActionScript-Code erneut zu testen.

168

Syntax- und Sprachgrundlagen

Mit Ausnahme des strikten Gleichheitsoperators (===) vergleichen die Vergleichsoperatoren Strings nur, wenn es sich bei beiden Operanden um Strings handelt. Wenn nur einer der Operanden ein String ist, wandelt ActionScript beide Operanden in Zahlen um und fhrt einen numerischen Vergleich durch. Weitere Informationen zu Strings und Operatoren finden Sie unter Operatoren mit Strings verwenden auf Seite 157. Unter Rangfolge und Assoziativitt von Operatoren auf Seite 155 wird beschrieben, wie die Reihenfolge und die Rangfolge der Operatoren sich auf den ActionScript-Code auswirkt.

Zuweisungsoperatoren
Zuweisungsoperatoren bentigen zwei Operanden. Sie weisen einem Operanden einen Wert zu, der auf dem Wert des anderen Operanden basiert. Alle Operatoren in dieser Tabelle haben dieselbe Rangfolge:
Operator
= *= /= %= += -= <<= >>= >>>= &= ^= |=

Ausgefhrte Operation
Zuweisung Multiplikationszuweisung Divisionszuweisung Modulo-Zuweisung Additionszuweisung Subtraktionszuweisung Zuweisung einer bitweisen Verschiebung nach links Zuweisung einer bitweisen Verschiebung nach rechts Zuweisung einer vorzeichenlosen bitweisen Verschiebung nach rechts Zuweisung von bitweisem AND Zuweisung von bitweisem XOR Zuweisung von bitweisem OR

Informationen zu Zuweisungsoperatoren finden Sie unter Zuweisungsoperatoren verwenden auf Seite 170.

Operatoren

169

Zuweisungsoperatoren verwenden
Mit dem Zuweisungsoperator (=) knnen Sie einer Variablen einen bestimmten Wert zuweisen. Beispielsweise knnen Sie einer Variablen einen String zuweisen, wie im Folgenden gezeigt:
var myText:String = "ScratchyCat";

Mit dem Zuweisungsoperator knnen auch mehreren Variablen im selben Ausdruck Werte zugewiesen werden. In der folgenden Anweisung wird den Variablen numOne, numTwo und numThree der Wert 10 zugewiesen.
var numOne:Number; var numTwo:Number; var numThree:Number; numOne = numTwo = numThree = 10;

Auerdem haben Sie die Mglichkeit, mithilfe zusammengesetzter Zuweisungsoperatoren mehrere Operationen in einem Ausdruck zusammenzufassen. Diese Operatoren fhren zunchst eine Operation mit beiden Operanden aus und weisen anschlieend den so ermittelten Wert dem ersten Operanden zu. Die beiden folgenden Anweisungen haben beispielsweise dieselbe Auswirkung:
var myNum:Number = 0; myNum += 15; myNum = myNum + 15;

Logische Operatoren
Logische Operatoren vergleichen Boolesche Werte (true und false) und geben dann auf Grundlage des Vergleichs einen Booleschen Wert zurck. Wenn beispielsweise zwei Operanden den Wert true aufweisen, gibt der logische AND-Operator (&&) den Ergebniswert true zurck. Wenn einer oder beide Operanden den Wert true aufweisen, gibt der logische OR-Operator (||) den Ergebniswert true zurck. Die logischen Operatoren arbeiten mit zwei Operanden und geben einen Booleschen Ergebniswert zurck. Die logischen Operatoren unterscheiden sich hinsichtlich der Rangfolge. In der folgenden Tabelle werden sie in absteigender Rangfolge aufgelistet:
Operator
&& ||

Ausgefhrte Operation
Logisches AND Logisches OR

Informationen zur Verwendung von logischen Operatoren finden Sie unter Logische Operatoren verwenden auf Seite 171.

170

Syntax- und Sprachgrundlagen

Logische Operatoren verwenden


Logische Operatoren werden oftmals in Verbindung mit Vergleichsoperatoren eingesetzt, um die Bedingung fr eine if-Anweisung zu bestimmen. Dies wird im nchsten Beispiel gezeigt.
So verwenden Sie logische Operatoren im Code:
1. 2.

Whlen Sie Datei > Neu, und erstellen Sie ein neues Flash-Dokument. ffnen Sie das Bedienfeld Aktionen, und geben Sie den folgenden ActionScript-Code in das erste Bild der Zeitleiste ein:
this.createTextField("myTxt", 20, 0, 0, 100, 20); myTxt.type = "input"; myTxt.border = true; myTxt.restrict = "0-9"; this.createEmptyMovieClip("submit_mc", 30); submit_mc.beginFill(0xFF0000); submit_mc.moveTo(0, 0); submit_mc.lineTo(100, 0); submit_mc.lineTo(100, 20); submit_mc.lineTo(0, 20); submit_mc.lineTo(0, 0); submit_mc.endFill(); submit_mc._x = 110; submit_mc.onRelease = function():Void { var myNum:Number = Number(myTxt.text); if (isNaN(myNum)) { trace("Please enter a number"); return; } if ((myNum > 10) && (myNum < 20)) { trace("Your number is between 10 and 20"); } else { trace("Your number is NOT between 10 and 20"); } };

In diesem ActionScript-Code erstellen Sie zur Laufzeit ein Textfeld. Wenn Sie eine Zahl in das Textfeld eingeben und auf die Schaltflche auf der Bhne klicken, verwendet Flash den logischen Operator, um eine Meldung im Bedienfeld Ausgabe anzuzeigen. Die Meldung richtet sich nach der Zahl, die Sie in das Textfeld eingegeben haben.

Operatoren

171

Bei der Verwendung von Operanden mssen Sie die Reihenfolge bercksichtigen, besonders in komplexen Bedingungen. Im folgenden Codebeispiel wird gezeigt, wie Sie mit dem logischen AND-Operator berprfen, ob eine Zahl einen Wert zwischen 10 und 20 hat. Je nach dem Ergebnis wird eine entsprechende Meldung angezeigt. Wenn die Zahl kleiner als 10 oder grer als 20 ist, wird eine Alternativmeldung im Bedienfeld Ausgabe angezeigt.
submit_mc.onRelease = function():Void { var myNum:Number = Number(myTxt.text); if (isNaN(myNum)) { trace("Please enter a number"); return; } if ((myNum > 10) && (myNum < 20)) { trace("Your number is between 10 and 20"); } else { trace("Your number is NOT between 10 and 20"); } };

Operatoren fr die bitweise Verschiebung


Die Operatoren fr die bitweise Verschiebung arbeiten mit zwei Operanden. Sie verschieben die Bit des ersten Operanden um das Ausma, das vom zweiten Operanden angegeben wird. Alle Operatoren in dieser Tabelle haben dieselbe Rangfolge:
Operator
<< >> >>>

Ausgefhrte Operation
Bitweise Verschiebung nach links Bitweise Verschiebung nach rechts Vorzeichenlose bitweise Verschiebung nach rechts

Informationen zur Verwendung der bitweisen Operatoren finden Sie unter Bitweise Operatoren verwenden auf Seite 173. Genaue Informationen zu den einzelnen bitweisen Operatoren finden Sie in den jeweiligen Eintrgen im ActionScript 2.0-Referenzhandbuch.

172

Syntax- und Sprachgrundlagen

Bitweise logische Operatoren


Die bitweisen logischen Operatoren arbeiten mit zwei Operanden und fhren logische Operationen auf Bit-Ebene aus. Die bitweisen logischen Operatoren unterscheiden sich hinsichtlich der Rangfolge. In der folgenden Tabelle werden sie in absteigender Rangfolge aufgelistet:
Operator
& ^ |

Ausgefhrte Operation
Bitweises AND Bitweises XOR Bitweises OR

Informationen zur Verwendung der bitweisen Operatoren finden Sie unter Bitweise Operatoren verwenden auf Seite 173. Genaue Informationen zu den einzelnen bitweisen Operatoren finden Sie in den jeweiligen Eintrgen im ActionScript 2.0-Referenzhandbuch.

Bitweise Operatoren verwenden


Bitweise Operatoren wandeln Gleitkommazahlen intern in 32-Bit-Ganzzahlen um. Welche Rechenoperation jeweils ausgefhrt wird, hngt vom verwendeten Operator ab. In jedem Fall werden bei der Berechnung des Ergebniswerts jedoch die einzelnen Binrziffern (Bit) der 32-Bit-Ganzzahl unabhngig voneinander ausgewertet. Eine Liste der bitweisen Verschiebungsoperatoren finden Sie unter Operatoren fr die bitweise Verschiebung auf Seite 172. Eine Liste der bitweisen logischen Operatoren finden Sie unter Bitweise logische Operatoren auf Seite 173. Bitweise Operatoren werden in Flash zwar nur selten eingesetzt, sie knnen in manchen Fllen jedoch sehr ntzlich sein. Angenommen, Sie mchten eine Berechtigungsmatrix fr ein Flash-Projekt erstellen, ohne separate Variablen fr jeden Berechtigungstyp zu erstellen. Dieses Szenario lsst sich mit bitweisen Operatoren bewltigen. Im folgenden Beispiel wird gezeigt, wie Sie den bitweisen OR-Operator mit der Methode Array.sort() verwenden, um Sortieroptionen festzulegen.

Operatoren

173

So verwenden Sie den bitweisen OR-Operator:


1. 2.

Whlen Sie Datei > Neu, und erstellen Sie ein neues Flash-Dokument. Geben Sie den folgenden ActionScript-Code in das Bedienfeld Aktionen ein:
var myArr:Array = new Array("Bob", "Dan", "doug", "bill", "Hank", "tom"); trace(myArr); // Boris,Daniel,dominik,bernd,Hans,tom myArr.sort(Array.CASEINSENSITIVE | Array.DESCENDING); trace(myArr); // tom,Hans,dominik,Daniel,Boris,bernd

Die erste Zeile definiert ein Array aus willkrlichen Namen und sendet sie an das Bedienfeld Ausgabe. Dann rufen Sie die Methode Array.sort() auf und definieren zwei Sortieroptionen mit den konstanten Werten Array.CASEINSENSITIVE und Array.DESCENDING. Das Ergebnis der Sortiermethode bewirkt, dass die Elemente im Array in umgekehrter Reihenfolge (z bis a) sortiert werden. Die Gro- und Kleinschreibung wird bei der Suche nicht bercksichtigt, so dass zwischen a und A nicht unterschieden wird. Beim Suchen unter Bercksichtigung der Gro- und Kleinschreibung wrde Z vor a kommen.
3.

Whlen Sie Steuerung > Film testen, um den ActionScript-Code zu testen. Im Bedienfeld Ausgabe wird der folgende Text angezeigt:
Bob,Dan,doug,bill,Hank,tom tom,Hank,doug,Dan,Bob,bill

In der Sortiermethode sind fnf Optionen verfgbar:


1 oder Array.CASEINSENSITIVE (binr = 1) 2 oder Array.DESCENDING (binr = 10) 4 oder Array.UNIQUESORT (binr = 100) 8 oder Array.RETURNINDEXEDARRAY (binr = 1000) 16 oder Array.NUMERIC (binr = 10000)

Sie knnen die Sortieroptionen fr ein Array auf drei verschiedene Arten definieren:
my_array.sort(Array.CASEINSENSITIVE | Array.DESCENDING); // Konstanten my_array.sort(1 | 2); // Zahlen my_array.sort(3); // Addieren der Zahlen

Die Zahlenwerte fr die Sortieroptionen sind bitweise Ziffern (binr oder Basis 2), auch wenn dies nicht offenkundig erscheinen mag. Der konstante Wert Array.CASEINSENSITIVE entspricht dem numerischen Wert 1, der auch der binre Wert 1 ist. Der konstante Wert Array.DECENDING hat den numerischen Wert 2 oder den binren Wert 10. Die Arbeit mit binren Zahlen kann etwas verwirrend sein. Es gibt nur zwei binre Werte, 1 und 0. Deshalb wird der Wert 2 als 10 dargestellt. Die binre Darstellung der Ziffer 3 ist 11 (1+10). Die Ziffer 4 ist in Binrform 100, die Ziffer 5 ist 101 und so weiter.

174

Syntax- und Sprachgrundlagen

Im folgenden ActionScript-Code wird gezeigt, wie ein Array mit numerischen Werten in absteigender Reihenfolge sortiert wird, indem die Konstanten Array.DESCENDING und Array.NUMERIC mit dem bitweisen AND-Operator addiert werden.
var scores:Array = new Array(100,40,20,202,1,198); trace(scores); // 100,40,20,202,1,198 trace(scores.sort()); // 1,100,198,20,202,40 var flags:Number = Array.NUMERIC|Array.DESCENDING; trace(flags); // 18 (Basis 10) trace(flags.toString(2)); // 10010 (binr -- Basis2) trace(scores.sort(flags)); // 202,198,100,40,20,1

Der Bedingungsoperator
Der Bedingungsoperator ist ternr, das heit, er arbeitet mit drei Operanden. Mit dem Bedingungsoperator lsst sich die Bedingungsanweisung if...else auf verkrzte Weise anwenden:
Operator
?:

Ausgefhrte Operation
Bedingung

Informationen zur Verwendung des Bedingungsoperators und ein Beispiel finden Sie unter Bedingungsoperator und Alternativsyntax auf Seite 125.

Operatoren in einem Dokument verwenden


Im folgenden Beispiel wird die Methode Math.round() verwendet, um Berechnungen auf eine willkrliche Anzahl von Dezimalstellen zu runden. Diese Methode rundet den Wert des Parameters score auf die nchste Ganzzahl auf oder ab und gibt dann den Wert zurck. Durch eine kleine nderung des ActionScript-Codes knnen Sie festlegen, dass Flash die Zahlen stattdessen auf eine bestimmte Anzahl von Dezimalstellen rundet. In dem Beispiel verwenden Sie die Divisions- und Multiplikationsoperatoren, um die Punktezahl eines Benutzers zu berechnen. Dazu wird die Anzahl der richtigen Antworten durch die Gesamtanzahl der Fragen geteilt. Die Punktezahl des Benutzers kann mit einer Zahl multipliziert werden, um einen Wert zwischen 0 und 100 % zu erzielen. Dann verwenden Sie den Additionsoperator, um die Punktezahl mit einem String zu verketten, der im Bedienfeld Ausgabe angezeigt wird.

Operatoren

175

So verwenden Sie Operatoren in ActionScript:


1. 2.

Erstellen Sie ein neues Flash-Dokument. Geben Sie in Bild 1 der Hauptzeitleiste den folgenden ActionScript-Code ein:
var correctAnswers:Number = 11; var totalQuestions:Number = 13; //auf nchste Ganzzahl runden //var Punktezahl:Zahl = Math.round(richtigeAntworten / //GesamtanzahlFragen * 100); //auf zwei Dezimalstellen runden var score:Number = Math.round(correctAnswers / totalQuestions * 100 * 100) / 100; trace("You got " + correctAnswers + " out of " + totalQuestions + " answers correct, for a score of " + score + "%.");

3.

Whlen Sie Steuerung > Film testen. Im Bedienfeld Ausgabe wird der folgende Text angezeigt:
You got 11 out of 13 answers correct, for a score of 84.62%.

Beim Aufruf der Methode Math.round() wird die Punktezahl auf die nchste Ganzzahl (85) gerundet und im Bedienfeld Ausgabe angezeigt. Wenn Sie die Zahl vor dem Aufruf von Math.round() mit 100 multiplizieren und dann durch 100 teilen, wird die Zahl auf 2 Dezimalstellen gerundet. Dadurch entsteht eine genauere Punktezahl.
4.

ndern Sie die Variable correctAnswers in 3, und whlen Sie Steuerung > Film testen, um die SWF-Datei noch einmal zu testen.

Wenn Sie eine Anwendung fr einen Test erstellen, knnen Sie mit den RadioButton- und Label-Komponenten mehrere Multiple-Choice-Fragen oder Richtig-/Falsch-Fragen erstellen. Nachdem die Benutzer alle Fragen beantwortet und auf die Schaltflche zum Abschicken geklickt haben, knnen Sie die Antworten mit einer Matrix vergleichen und die erzielte Punktezahl berechnen.

176

Syntax- und Sprachgrundlagen

KAPITEL 5

Funktionen und Methoden


Ein gutes Verstndnis von Funktionen ist wichtig, wenn Sie ActionScript-Code schreiben, Klassen erstellen und Methoden verwenden. Sie werden mit verschiedenen Arten von Funktionen arbeiten. In diesem Kapitel werden Funktionen und Methoden beschrieben. Sie erfahren, wie Sie sie schreiben und bei der Verwendung von integrierten Klassen in Ihren Anwendungen einsetzen. In Kapitel 6, Klassen erstellen Sie benutzerdefinierte Klassen, fr die Sie regelmig Funktionen schreiben werden. Auerdem lernen Sie, wie Funktionen in ActionScript-Klassendateien geschrieben werden. Mithilfe von Funktionen in Ihrem Code knnen Sie Ihren Anwendungen Interaktivitt, Animationen und andere Effekte hinzufgen. In diesem Kapitel werden die verschiedenen Funktionsarten beschrieben, die Sie in Flash-Anwendungen schreiben knnen. Definitionen von Funktionen und Methoden sowie bungen zum Schreiben und Verwenden von Funktionen und Methoden in Flash finden Sie in den folgenden Themen:
Funktionen und Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Methoden im berblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201

Funktionen und Methoden


Methoden und Funktionen sind ActionScript-Codeblcke, die in einer SWF-Datei wieder verwendet werden knnen. Sie knnen Funktionen in der FLA-Datei oder in einer externen ActionScript-Datei schreiben und dann von einer beliebigen Stelle in Ihren Dokumenten aufrufen. Methoden sind Funktionen, die sich innerhalb einer ActionScript-Klassendefinition befinden. Sie knnen Funktionen definieren, die mehrere Anweisungen fr bergebene Werte ausfhren. Funktionen knnen auch Werte zurckgeben. Eine definierte Funktion kann von jeder Zeitleiste aus aufgerufen werden, auch von der Zeitleiste einer geladenen SWF-Datei.

177

Wenn Sie Werte als Parameter an eine Funktion bergeben, kann die Funktion anhand der bergebenen Werte Berechnungen durchfhren. Jede Funktion weist bestimmte Merkmale auf, und manche Funktionen erfordern die bergabe einer bestimmten Anzahl oder Art von Werten. Wenn die Anzahl der bergebenen Parameter die Anzahl der von der Funktion bentigten Parameter bersteigt, werden die berzhligen Werte ignoriert. Wird ein erforderlicher Parameter nicht bergeben, weist die Funktion dem leeren Parameter den Datentyp undefined zu. Dies kann zur Laufzeit zu Fehlern fhren. Eine Funktion kann auch Werte zurckgeben (siehe Werte von Funktionen zurckgeben auf Seite 199).
HINWEIS 178

Es knnen nur die Funktionen aufgerufen werden, deren Definition sich in einem Bild befindet, das der Abspielkopf erreicht hat.

Sie knnen sich eine gut geschriebene Funktion als eine Art Blackbox vorstellen. Wenn Ein- und Ausgaben sowie Zweck der Funktion sorgfltig dokumentiert sind, knnen Benutzer die Funktion auch ohne genaue Kenntnis ihrer internen Funktionsweise einsetzen. Die grundlegende Syntax fr eine einfache benannte Funktion wird im Folgenden gezeigt:
function traceMe() { trace("your message"); } traceMe();

Informationen zum Schreiben von benannten Funktionen finden Sie unter Benannte Funktionen schreiben auf Seite 183. Die grundlegende Syntax fr eine einfache benannte Funktion, die durch bergabe des Parameters yourMessage auf dem vorherigen Beispiel aufbaut, wird im Folgenden gezeigt:
function traceMe(yourMessage:String) { trace(yourMessage); } traceMe("How you doing?");

Zur bergabe mehrerer Parameter knnten Sie auch den folgenden Code verwenden:
var yourName:String = "Ester"; var yourAge:String = "65"; var favSoftware:String = "Flash"; function traceMe(favSoftware:String, yourName:String, yourAge:String) { trace("I'm " + yourName + ", I like " + favSoftware + ", and I'm " + yourAge + "."); } traceMe(favSoftware,yourName,yourAge);

Funktionen und Methoden

Weitere Informationen zur bergabe von Parametern finden Sie unter Parameter an eine Funktion bergeben auf Seite 196. Sie knnen verschiedene Arten von Funktionen schreiben. Weitere Informationen zum Schreiben von Funktionen finden Sie unter Funktions- und Methodenarten auf Seite 179. Dieser Abschnitt enthlt auch Links zu Themen, in denen das Schreiben von besonderen Funktionsarten genauer beschrieben wird. Ein Beispiel, in dem Methoden und Funktionen verglichen werden, finden Sie unter Methoden im berblick auf Seite 201.
H I NW E I S

Weitere Informationen zum Schreiben von Code mithilfe der Skripthilfe finden Sie in Flash verwenden.

Weitere Informationen zu Funktionen und Methoden finden Sie unter den folgenden Themen: Funktions- und Methodenarten auf Seite 179

Funktions- und Methodenarten


Funktionen, die zu einer Klasse gehren, werden als Methoden dieser Klasse bezeichnet. Sie knnen verschiedene Arten von Funktionen in Ihren Anwendungen verwenden, wie beispielsweise integrierte Funktionen, benannte und benutzerdefinierte Funktionen, anonyme Funktionen, Rckruffunktionen, Konstruktorfunktionen und Funktionsliterale. In den folgenden Abschnitten wird beschrieben, wie Sie diese Funktionen definieren. Sie knnen Funktionen auch in einer ActionScript-Klassendatei schreiben. Diese Funktionen werden als Methoden in Ihren Skripts eingesetzt. Im folgenden Beispiel zeigt die PersonKlasse eine Konstruktormethode, Klassenmethoden, Instanzenmethoden sowie Zugriffsmethoden (get- und set-Methoden). Die Kommentare in diesem Codebeispiel zeigen, wo diese Methoden sich im Code befinden.
H IN W E I S

Informationen zum Schreiben von Klassendateien finden Sie in Kapitel 6, Klassen auf Seite 205.

Funktionen und Methoden

179

class Person { public static var numPeople:Number = 0; // Instanzmitglieder private var _speed:Number; // Konstruktor public function Person(speed:Number) { Person.numPeople++; this._speed = speed; } // statische Methoden public static function getPeople():Number { return Person.numPeople; } // Instanzenmethoden public function walk(speed:Number):Void { this._speed = speed; } public function run():Void { this._speed *= 2; } public function rest():Void { this._speed = 0; } // get-/set-Methoden (Zugriffsmethoden) public function get speed():Number { return this._speed; } }

Ausfhrliche Anleitungen zum Schreiben von Methoden, die dem obigen Codebeispiel entsprechen, finden Sie in Kapitel 6, Klassen auf Seite 205. Die Methoden, die Sie in Ihrem Code verwenden, knnen zu einer integrierten Klasse der ActionScript-Sprache gehren. So sind MovieClip und Math Beispiele fr Klassen auf oberster Ebene, die in einer Anwendung eingesetzt werden knnen. Wenn Sie Methoden dieser Klassen in Ihrem Code verwenden, handelt es sich dabei um Funktionen, die in der integrierten Klasse geschrieben sind (hnlich wie im vorherigen Codebeispiel). Sie knnen jedoch auch Methoden einer benutzerdefinierten Klasse verwenden, die Sie selbst erstellt haben. Funktionen, die nicht zu einer Klasse gehren, werden als Funktionen oberster Ebene (oder auch als vordefinierte oder integrierte Funktionen) bezeichnet. Dies bedeutet, dass Sie diese Funktionen ohne Konstruktor aufrufen knnen. Als Beispiele fr Funktionen, die auf oberster Ebene der ActionScript-Sprache integriert sind, lassen sich trace() und setInterval() nennen.

180

Funktionen und Methoden

Um Ihrem Code einen Aufruf einer Funktion oberster Ebene hinzuzufgen, mssen Sie im Skriptbereich des Bedienfelds Aktionen nur eine einzelne Codezeile einfgen. Geben Sie beispielsweise Folgendes ein:
trace("my message");

Wenn Sie die SWF-Datei mit dieser einzelnen Codezeile testen, wird die Funktion oberster Ebene trace() aufgerufen, und im Bedienfeld Ausgabe wird Text angezeigt. Wenn Sie einer Eigenschaft eine Methode zuweisen mchten, lassen Sie die Klammern nach dem Methodennamen weg, da Sie einen Verweis auf die Funktion bergeben:
my_mc.myMethod = aFunction;

Wenn Sie jedoch eine Methode im Code aufrufen mchten, mssen die Klammern nach dem Namen der Methode angegeben werden:
my_mc.myMethod();
H I N WE I S

Weitere Informationen zu Funktionen oberster Ebene finden Sie unter Integrierte Funktionen und Funktionen oberster Ebene auf Seite 182.

Funktionen knnen auch mit zahlreichen anderen Verfahren definiert werden. Weitere Informationen zu den einzelnen Funktionsarten finden Sie in den folgenden Abschnitten: Integrierte Funktionen und Funktionen oberster Ebene auf Seite 182 Benannte Funktionen schreiben auf Seite 183 Anonyme Funktionen und Rckruffunktionen schreiben auf Seite 185 Funktionsliterale auf Seite 188 Benutzerdefinierte Funktionen adressieren und aufrufen auf Seite 190 Konstruktorfunktionen auf Seite 188

Einzelheiten zum Schreiben und Verwenden von Funktionen und Methoden finden Sie in den folgenden Abschnitten. Informationen zum Verwenden von Funktionen finden Sie unter Funktionen in Flash verwenden auf Seite 192. Informationen zum Verwenden von Methoden finden Sie unter Methoden im berblick auf Seite 201.
H IN W E I S

Weitere Informationen zum Schreiben von Code mithilfe der Skripthilfe finden Sie in Flash verwenden.

Funktionen und Methoden

181

Integrierte Funktionen und Funktionen oberster Ebene


Wie unter Funktionen und Methoden auf Seite 177 beschrieben, ist eine Funktion ein ActionScript-Codeblock, der in einer SWF-Datei wieder verwendet werden kann. Wenn Sie Werte als Parameter an eine Funktion bergeben, werden diese Werte von der Funktion verarbeitet. Eine Funktion kann auch Werte zurckgeben. Sie knnen mit Funktionen arbeiten, die in die ActionScript-Sprache integriert sind. Dabei kann es sich um Funktionen auf oberster Ebene handeln, wie unter Funktions- und Methodenarten auf Seite 179 beschrieben, oder die Funktion kann sich in einer integrierten Klasse wie Math oder MovieClip befinden, die Sie als Methode in Ihrer Anwendung einsetzen. Integrierte Funktionen werden in ActionScript verwendet, um bestimmte Aufgaben auszufhren oder um auf Informationen zuzugreifen. Beispielsweise knnen Sie mit der Funktion getTimer() ermitteln, wie lange die SWF-Datei bereits abgespielt wird (in Millisekunden). Mit getVersion() lsst sich bestimmen, mit welcher Version von Flash Player die Datei wiedergegeben wird. Funktionen, die zu einem Objekt gehren, werden als Methoden bezeichnet. Funktionen, die nicht zu einem Objekt gehren, werden als Funktionen oberster Ebene bezeichnet und befinden sich im Bedienfeld Aktionen in Unterkategorien der Kategorie Globale Funktionen. Bei einigen integrierten Funktionen mssen Sie bestimmte Werte bergeben. Wenn Sie einer Funktion mehr Werte bergeben, als sie bentigt, werden die berzhligen Werte ignoriert. Wenn Sie einen erforderlichen Parameter nicht bergeben, wird dem leeren Parameter der Datentyp undefined zugewiesen. Dies kann zur Laufzeit Fehler verursachen.
HINWEIS 182

Es knnen nur die Funktionen aufgerufen werden, deren Definition sich in einem Bild befindet, das der Abspielkopf erreicht hat.

Funktionen oberster Ebene lassen sich einfach verwenden. Zum Aufrufen einer Funktion verwenden Sie einfach den Funktionsnamen und bergeben die erforderlichen Parameter. (Weitere Informationen zu erforderlichen Parametern finden Sie im Eintrag der jeweiligen Funktion im ActionScript 2.0-Referenzhandbuch.) Fgen Sie beispielsweise in Bild 1 der Zeitleiste den folgenden ActionScript-Code hinzu:
trace("my message");

Funktionen und Methoden

Wenn Sie die SWF-Datei testen, wird der Text my message im Bedienfeld Ausgabe angezeigt. Zwei weitere Beispiele fr Funktionen oberster Ebene sind setInterval() und getTimer(). Im nchsten Beispiel wird gezeigt, wie diese beiden Funktionen zusammen verwendet werden. Fgen Sie Bild 1 der Zeitleiste den folgenden Code hinzu:
function myTimer():Void { trace(getTimer()); } var intervalID:Number = setInterval(myTimer, 100);

Dieser Code erstellt unter Verwendung von getTimer() einen einfachen Zeitmesser. Dabei werden die Funktionen oberster Ebene setInterval() und trace() verwendet, um die bisherige Wiedergabelnge der SWF-Datei in Flash Player in Millisekunden anzugeben. Der Aufruf einer Funktion oberster Ebene entspricht dem Aufruf einer benutzerdefinierten Funktion. Weitere Informationen finden Sie unter Benutzerdefinierte Funktionen adressieren und aufrufen auf Seite 190. Informationen zu den einzelnen Funktionen finden Sie unter den jeweiligen Eintrgen im ActionScript 2.0-Referenzhandbuch.

Benannte Funktionen schreiben


Eine benannte Funktion ist eine Funktion, die Sie hufig in Ihrem ActionScript-Code fr die verschiedensten Aktionen erstellen. Bei der Erstellung einer SWF-Datei werden die benannten Funktionen zuerst kompiliert. Deshalb knnen Sie berall im Code auf die Funktion verweisen, vorausgesetzt, sie wurde im aktuellen oder in einem vorherigen Bild definiert. Wenn eine Funktion beispielsweise im zweiten Bild der Zeitleiste definiert ist, knnen Sie nicht im ersten Bild der Zeitleiste auf die Funktion zugreifen. Im Folgenden wird das Standardformat fr benannte Funktionen gezeigt:
function functionName(parameters) { // Funktionsblock }

Dieser Codeabschnitt enthlt die folgenden Teile:

functionName

ist der eindeutige Name der Funktion. Alle Funktionsnamen in einem Dokument mssen eindeutig sein, das heit, sie drfen nur einmal vorkommen. enthlt einen oder mehrere Parameter, die an die Funktion bergeben werden. Parameter werden auch als Argumente bezeichnet. Weitere Informationen zu Parametern finden Sie unter Parameter an eine Funktion bergeben auf Seite 196.

parameters

// Funktionsblock enthlt den gesamten ActionScript-Code, der von der Funktion ausgefhrt wird. Dieser Teil enthlt die Anweisungen, mit denen Aktionen durchgefhrt werden. Hier knnen Sie den auszufhrenden Code platzieren. Der Kommentar // Funktionsblock ist ein Platzhalter fr die Stelle, an der der Code fr den Funktionsblock angeordnet wird.

Funktionen und Methoden

183

So verwenden Sie eine benannte Funktion:


1. 2.

Erstellen Sie ein neues Dokument namens namedFunc.fla. Importieren Sie eine kleine Sounddatei in die Bibliothek. Whlen Sie dazu Datei > Importieren > In Bibliothek importieren und dann die gewnschte Sounddatei. Klicken Sie mit der rechten Maustaste auf die Sounddatei, und whlen Sie Verknpfung aus. Geben Sie mySoundID in das Textfeld Bezeichner ein. Whlen Sie das erste Bild in der Zeitleiste aus, und geben Sie im Bedienfeld Aktionen den folgenden Code ein:
function myMessage() { trace("mySoundID completed"); } var my_sound:Sound = new Sound(); my_sound.attachSound("mySoundID"); my_sound.onSoundComplete = myMessage; my_sound.start();

3.

4. 5.

In diesem Code erstellen Sie die benannte Funktion myMessage, die Sie spter im Skript zum Aufruf der Funktion trace() verwenden.
6.

Whlen Sie Steuerung > Film testen, um die SWF-Datei zu testen.

Mit der Anweisung function knnen Sie eigene Funktionen in ActionScript erstellen. Parameter sind optional; wenn Sie sie nicht verwenden, mssen Sie dennoch die Klammern einschlieen. Der Inhalt zwischen den geschweiften Klammern ({}) bildet den Funktionsblock. Sie knnen Funktionen auf der Hauptzeitleiste oder in externen ActionScript-Dateien schreiben, darunter auch in Klassendateien. Sie knnen mit diesem Format auch Konstruktorfunktionen in Klassendateien schreiben (der Name der Funktion entspricht jedoch der Klasse). Weitere Informationen zu Konstruktorfunktionen finden Sie unter Konstruktorfunktion schreiben auf Seite 253. Einzelheiten und Beispiele zum Schreiben von Funktionen in Klassen finden Sie in Kapitel 6, Klassen auf Seite 205.

184

Funktionen und Methoden

Anonyme Funktionen und Rckruffunktionen schreiben


Eine benannte Funktion ist eine Funktion, auf die Sie in einem Skript verweisen, bevor oder nachdem sie definiert wurde. Dagegen ist eine anonyme Funktion eine unbenannte Funktion, die auf sich selbst verweist. Sie verweisen auf die anonyme Funktion, wenn Sie sie erstellen. Beim Schreiben von ActionScript-Code erstellen Sie zahlreiche anonyme Funktionen. Anonyme Funktionen werden hufig bei der Arbeit mit Ereignisprozeduren eingesetzt. Zum Schreiben einer anonymen Funktion knnen Sie ein Funktionsliteral innerhalb einer Variablen speichern. Dadurch knnen Sie spter im Code auf die Funktion verweisen. Im nchsten Beispiel wird gezeigt, wie Sie eine anonyme Funktion schreiben.
So schreiben Sie eine anonyme Funktion:
1. 2. 3.

Erstellen Sie einen Movieclip auf der Bhne, und whlen Sie ihn aus. Geben Sie im Eigenschafteninspektor im Textfeld Instanzname den Text my_mc ein. Whlen Sie das erste Bild in der Zeitleiste aus, und geben Sie im Bedienfeld Aktionen den folgenden Code ein:
var myWidth = function () { trace(my_mc._width); }; //kann spter im Code hinzugefgt werden myWidth();

4.

Whlen Sie Steuerung > Film testen. Die Breite des Movieclips wird im Bedienfeld Ausgabe angezeigt.

Eine Funktion kann auch innerhalb eines Objekts erstellt werden, wie beispielsweise in einer XML- oder LoadVars-Instanz. Sie knnen eine anonyme Funktion mit einem bestimmten Ereignis verknpfen, um eine Rckruffunktion zu erstellen. Eine Funktion ruft eine Rckruffunktion auf, nachdem ein bestimmtes Ereignis aufgetreten ist, beispielsweise wenn eine Komponente geladen wurde (onLoad()) oder nachdem eine Animation abgeschlossen wurde (onMotionFinished()). In manchen Fllen mssen Sie zum Beispiel ActionScript-Code schreiben, mit dem die Daten verarbeitet werden, die vom Server in eine SWF-Datei geladen werden. Nachdem die Daten in die SWF-Datei geladen wurden, knnen Sie von dort aus darauf zugreifen. Sie mssen ActionScript verwenden, um zu berprfen, ob die Daten vollstndig geladen wurden. Verwenden Sie Rckruffunktionen, um ein Signal zu senden, dass die Daten in das Dokument geladen wurden.

Funktionen und Methoden

185

Mit der folgenden Rckruffunktion wird ein externes XML-Dokument geladen, indem eine anonyme Funktion mit dem Ereignis onLoad() verknpft wird. Sie verwenden XML.load() und die Rckruffunktion, wie im folgenden Beispiel gezeigt. Geben Sie im ersten Bild der Zeitleiste den folgenden Code ein:
var my_xml:XML = new XML(); my_xml.onLoad = function(success:Boolean):Void { trace(success); }; my_xml.load("http://www.helpexamples.com/crossdomain.xml");

Wie aus dem obigen Codebeispiel ersichtlich, verwendet die Ereignisprozedur onLoad() eine anonyme Funktion, um das Ereignis onLoad() zu verarbeiten. Weitere Informationen zu Rckruffunktionen finden Sie in Kapitel 9, Ereignisse verarbeiten auf Seite 327. Sie knnen anonyme Funktionen auch mit der Funktion setInterval() verwenden, wie im folgenden Code gezeigt. Hier wird setInterval() verwendet, um die anonyme Funktion ungefhr alle 1000 Millisekunden (1 Sekunde aufzurufen):
setInterval(function() {trace("interval");}, 1000);

Sie knnen benannte Funktionen anstelle von anonymen Funktionen verwenden. Benannte Funktionen lassen sich hufig einfacher lesen und interpretieren (mit Ausnahme bestimmter Flle, wie beispielsweise Rckruffunktionen). Es ist auch mglich, im Voraus einen Verweis auf eine benannte Funktion zu erstellen, das heit, dass Sie auf die Funktion verweisen, bevor sie in der Zeitleiste vorhanden ist. Im Gegensatz zu benannten Funktionen ist es bei anonymen Funktionen nicht mglich, berall im Code darauf zu verweisen (es sei denn, die Funktion ist einer Variablen zugewiesen). Angenommen, in Bild 5 Ihrer FLA-Datei befinden sich anonyme Funktionen, wie im Folgenden gezeigt:
//mit einem Movieclip namens my_mc, der ber die Zeitleiste verluft stop(); var myWidth = function () { trace(my_mc._width); };

Wenn Sie den folgenden Code in Bild 1 platzieren, kann er nicht auf die Funktion verweisen:
myWidth();

186

Funktionen und Methoden

Auch der folgende Code funktioniert nicht, unabhngig davon, in welchem Bild er platziert wird:
myWidth(); var myWidth:Function = function () { trace(my_mc._width); };

Der folgende Code funktioniert jedoch ordnungsgem:


var myWidth:Function = function () { trace(my_mc._width); }; myWidth();
H I N WE I S H IN W E I S

Sie knnen myWidth() auch in jedem Bild platzieren, das sich nach dem Bild befindet, das die Funktion myWidth enthlt.

Der Aufruf einer benannten Funktion in einem Bildskript ist erfolgreich, obwohl der entsprechende Code mit einer anonymen Funktion nicht ausgefhrt werden kann:
// der folgende Code funktioniert, da eine benannte Funktion aufgerufen // wird: myWidth(); function myWidth() { trace("foo"); } // der folgende Code funktioniert nicht, da eine anonyme Funktion aufgerufen // wird: myWidth(); var myWidth:Function = function () { trace("foo"); };

Weitere Informationen finden Sie unter Benannte Funktionen schreiben auf Seite 183.
Weitere Informationen zum Schreiben von Code mithilfe der Skripthilfe finden Sie in Flash verwenden.

Funktionen und Methoden

187

Funktionsliterale
Ein Funktionsliteral ist eine unbenannte Funktion, die Sie in einem Ausdruck anstatt in einer Anweisung deklarieren. Funktionsliterale sind ntzlich, wenn Sie eine Funktion nur vorbergehend verwenden mssen oder wenn Sie im Code eine Funktion anstelle eines Ausdrucks verwenden mchten. Fr Funktionsliterale gilt folgende Syntax:
Funktion (Param1, Param2 usw.) { // Anweisungen };

Im folgenden Codebeispiel wird ein Funktionsliteral als Ausdruck verwendet:


var yourName:String = "Ester"; setInterval(function() {trace(yourName);}, 200);
HINWEIS 188 H IN W E I S

Wenn Sie ein Funktionsliteral neu definieren, ersetzt die neue Funktionsdefinition die alte Definition.

Sie knnen ein Funktionsliteral in einer Variablen speichern und spter im Code wieder darauf zugreifen. Dazu verwenden Sie eine anonyme Funktion. Weitere Informationen finden Sie unter Anonyme Funktionen und Rckruffunktionen schreiben auf Seite 185.

Konstruktorfunktionen
Der Konstruktor einer Klasse ist eine besondere Funktion, die automatisch aufgerufen wird, wenn Sie mit dem Schlsselwort new eine Instanz einer Klasse erstellen (wie var my_xml:XML = new XML();). Die Konstruktorfunktion hat denselben Namen wie die Klasse, in der sie enthalten ist. Zum Beispiel wrde eine benutzerdefinierte Person-Klasse die folgende Konstruktorfunktion enthalten:
public function Person(speed:Number) { Person.numPeople++; this._speed = speed; }

Dann knnten Sie mit dem folgenden Code eine neue Instanz erstellen:
var myPerson:Person = new Person(); Wenn eine Konstruktorfunktion nicht ausdrcklich in einer Klassendatei deklariert wird (d. h., wenn Sie keine Funktion erstellen, deren Name mit dem der Klasse bereinstimmt), erstellt der Compiler automatisch eine leere Konstruktorfunktion.

Funktionen und Methoden

Eine Klasse kann nur eine Konstruktorfunktion enthalten; in ActionScript 2.0 sind keine berladenen Konstruktorfunktionen zulssig. Eine Konstruktorfunktion kann keinen Rckgabetyp haben. Weitere Informationen zum Schreiben von Konstruktorfunktionen in Klassendateien finden Sie unter Konstruktorfunktion schreiben auf Seite 253.

Globale Funktionen und Zeitleistenfunktionen definieren


Im Abschnitt Funktionen und Methoden auf Seite 177 wurden die unterschiedlichen Funktionsarten in Flash beschrieben. Funktionen sind ebenso wie Variablen mit der Zeitleiste des Movieclips verknpft, in dem sie definiert sind, und mssen unter Angabe eines Zielpfads aufgerufen werden. Wie bei Variablen knnen Sie mit dem Bezeichner _global eine globale Funktion deklarieren, die auch ohne Zielpfad in allen Zeitleisten und Gltigkeitsbereichen zur Verfgung steht. Um eine globale Funktion zu definieren, stellen Sie dem Funktionsnamen wie im folgenden Beispiel den Bezeichner _global voran:
_global.myFunction = function(myNum:Number):Number { return (myNum * 2) + 3; }; trace(myFunction(5)) // 13

Weitere Informationen zum Bezeichner _global und zum Gltigkeitsbereich finden Sie unter Variablen und Gltigkeitsbereiche auf Seite 64. Zum Definieren einer Zeitleistenfunktion verwenden Sie die Anweisung function, gefolgt vom Namen der Funktion, den ihr zu bergebenden Parametern und den ActionScript-Anweisungen, die ihre Funktionsweise festlegen. Das folgende Beispiel zeigt eine Funktion namens areOfCircle mit dem Parameter radius:
function areaOfCircle(radius:Number):Number { return (Math.PI * radius * radius); } trace (areaOfCircle(8));

Funktionen knnen auch mit zahlreichen anderen Verfahren definiert werden. Weitere Informationen zu den einzelnen Funktionsarten finden Sie in den folgenden Abschnitten:

Integrierte Funktionen und Funktionen oberster Ebene auf Seite 182 Benannte Funktionen schreiben auf Seite 183 Anonyme Funktionen und Rckruffunktionen schreiben auf Seite 185 Funktionsliterale auf Seite 188 Konstruktorfunktionen auf Seite 188 Benutzerdefinierte Funktionen adressieren und aufrufen auf Seite 190

Funktionen und Methoden

189

Informationen zum Benennen von Funktionen finden Sie unter Funktionen benennen auf Seite 191. Ein ausfhrliches Beispiel zur Verwendung von Funktionen in einer externen Klassendatei finden Sie unter Funktionen in Flash verwenden auf Seite 192 und in Kapitel 6, Klassen auf Seite 205.
H I NW E I S 190

Weitere Informationen zum Schreiben von Code mithilfe der Skripthilfe finden Sie in Flash verwenden.

Benutzerdefinierte Funktionen adressieren und aufrufen


Benutzerdefinierte Funktionen sind Funktionen, die Sie selbst fr Ihre Anwendungen erstellen. Sie unterscheiden sich von den Funktionen in integrierten Klassen, mit denen vordefinierte Funktionen ausgefhrt werden. Sie weisen den Funktionen Namen zu und fgen im Funktionsblock Anweisungen ein. In den bisherigen Abschnitten wurde erlutert, wie Sie benannte und unbenannte Funktionen sowie Rckruffunktionen schreiben. Einzelheiten zum Benennen von Funktionen finden Sie unter Funktionen benennen auf Seite 191. Informationen zum Verwenden von Funktionen finden Sie unter Funktionen in Flash verwenden auf Seite 192. Mithilfe eines Zielpfads knnen Sie eine Funktion in einer beliebigen Zeitleiste von einer beliebigen Zeitleiste aus aufrufen, so auch von der Zeitleiste einer geladenen SWF-Datei. Um eine Funktion aufzurufen, geben Sie bei Bedarf den Zielpfad der Funktion ein, und bergeben Sie die erforderlichen Parameter in Klammern. Fr benutzerdefinierte Funktionen kommen mehrere Syntaxformen in Frage. Im folgenden Codebeispiel wird die Funktion initialize(), die in der aktuellen Zeitleiste definiert wurde und keine Parameter erfordert, unter Angabe eines Pfads aufgerufen.
this.initialize();

Im folgenden Beispiel wird die Funktion list(), die im Movieclip functionsClip definiert wurde, unter Angabe eines relativen Pfads aufgerufen:
this._parent.functionsClip.list(6);

Informationen zum Schreiben von benannten Funktionen finden Sie unter Benannte Funktionen schreiben auf Seite 183. Weitere Informationen zu Parametern finden Sie unter Parameter an eine Funktion bergeben auf Seite 196.

Funktionen und Methoden

Sie knnen auch eigene benannte Funktionen definieren. Im folgenden Beispiel wird die benutzerdefinierte benannte Funktion helloWorld() gezeigt:
function helloWorld() { trace("Hello world!"); };

Im folgenden Beispiel wird gezeigt, wie Sie eine benutzerdefinierte Funktion in einer FLA-Datei verwenden.
So knnen Sie eine einfache benutzerdefinierte Funktion erstellen und aufrufen:
1. 2.

Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen udf.fla. Fgen Sie Bild 1 der Hauptzeitleiste den folgenden ActionScript-Code hinzu:
function traceHello(name:String):Void { trace("hello, " + name + "!"); } traceHello("world"); // hello, world!

Der oben gezeigte Code erstellt eine benutzerdefinierte Funktion namens traceHello(), die das Argument name hat und eine Begrung ausgibt. Zum Aufrufen der benutzerdefinierten Funktion knnen Sie traceHello von derselben Zeitleiste wie die Funktionsdefinition aufrufen und einen einzelnen Stringwert bergeben.
3.

Whlen Sie Steuerung > Film testen, um das Flash-Dokument zu testen.

Weitere Informationen zu benannten Funktionen finden Sie unter Benannte Funktionen schreiben auf Seite 183. Klassen enthalten zahlreiche benutzerdefinierte Funktionen. Informationen zum Schreiben von Funktionen in Klassendateien finden Sie unter Funktionen in Flash verwenden auf Seite 192. Lesen Sie auch die folgenden Abschnitte in Kapitel 6, Klassen : Methoden und Eigenschaften einer Klassendatei verwenden auf Seite 228, ffentliche, private und statische Methoden und Eigenschaften (Mitglieder) auf Seite 230 und Klassenmitglieder auf Seite 233.

Funktionen benennen
Funktionsnamen sollten mit einem Kleinbuchstaben beginnen und den Wert beschreiben, den die Funktion zurckgibt. Wenn die Funktion beispielsweise den Titel eines Songs zurckgibt, knnen Sie die Funktion getCurrentSong() nennen. Erstellen Sie einen Standard zum Gruppieren hnlicher Funktionen (deren Funktionalitt in Beziehung steht), da ein berladen in ActionScript nicht zulssig ist. Bei der objektorientierten Programmierung (OOP) bezieht sich der Begriff berladen auf die Mglichkeit von Funktionen, sich je nach bergebenen Datentypen anders zu verhalten.

Funktionen und Methoden

191

Wie bei Variablen sind Sonderzeichen nicht zulssig. Auerdem darf der Methodenname nicht mit einer Ziffer beginnen. Weitere Informationen finden Sie unter Namenskonventionen auf Seite 745. Informationen zum Benennen von Methoden finden Sie unter Methoden benennen auf Seite 203.

Funktionen in Flash verwenden


In diesem Abschnitt wird veranschaulicht, wie Funktionen in einer Anwendung eingesetzt werden. In einigen der folgenden Beispiele wird ActionScript-Code verwendet, der sich in der FLA-Datei befindet. Bei anderen Beispielen werden Funktionen zum Vergleich in einer Klassendatei platziert. Weitere Informationen und Beispiele zur Verwendung von Funktionen in einer Klassendatei finden Sie inKapitel 6, Klassen auf Seite 205. Ausfhrliche Anleitungen zum Schreiben von Funktionen fr Klassendateien finden Sie unter Beispiel: Benutzerdefinierte Klassen schreiben auf Seite 247. Es empfiehlt sich, Codeblcke nach Mglichkeit immer wieder zu verwenden, um den Arbeitsaufwand und die Gre der SWF-Datei zu verringern. Dazu knnen Sie beispielsweise eine Funktion mehrmals aufrufen, anstatt jeweils neuen Code zu erstellen. Funktionen knnen aus generischen Codefragmenten bestehen, Sie knnen dieselben Codeblcke also in einer SWF-Datei fr etwas unterschiedliche Zwecke einsetzen. Durch die Wiederverwendung von Code erstellen Sie effiziente Anwendungen, reduzieren die Codemenge, die Sie in ActionScript erstellen mssen, und verkrzen so die Entwicklungszeit. Sie knnen Funktionen in einer FLA-Datei oder in einer Klassendatei erstellen oder ActionScript-Code schreiben, der in einer codebasierten Komponente gespeichert wird. In den folgenden Beispielen wird gezeigt, wie Sie Funktionen auf der Zeitleiste und in einer Klassendatei erstellen.
TI P P 192

Es empfiehlt sich, den Code in Klassendateien oder codebasierten Komponenten einzufgen, damit Codeblcke einfach gemeinsam verwendet, verteilt und wieder verwendet werden knnen. Benutzer knnen Ihre Komponente installieren, auf die Bhne ziehen und den in der Datei gespeicherten Code verwenden, wie beispielsweise den Arbeitsablauf fr die in Flash verfgbaren codebasierten Komponenten (Fenster > Allgemeine Bibliotheken > Klassen).

Im folgenden Beispiel wird gezeigt, wie Sie eine Funktion in einer FLA-Datei erstellen und aufrufen.

Funktionen und Methoden

So knnen Sie eine Funktion in einer FLA-Datei erstellen und aufrufen:


1.

Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen basicFunction.fla. Whlen Sie Fenster > Aktionen, um das Bedienfeld Aktionen zu ffnen. Geben Sie den folgenden ActionScript-Code in den Skriptbereich ein:
function helloWorld() { // Anweisungen hier einfgen trace("Hello world!"); };

2. 3.

Dieser ActionScript-Code definiert die benutzerdefinierte, benannte Funktion helloWorld(). Wenn Sie Ihre SWF-Datei jetzt testen, passiert noch gar nichts. Beispielsweise wird nicht die Anweisung trace im Bedienfeld Ausgabe angezeigt. Um die Anweisung trace zu sehen, mssen Sie die Funktion helloWorld() aufrufen.
4.

Geben Sie die folgende ActionScript-Codezeile nach der Funktion ein:


helloWorld();

Mit diesem Code wird die Funktion helloWorld() aufgerufen.


5.

Whlen Sie Steuerung > Film testen, um die FLA-Datei zu testen. Im Bedienfeld Ausgabe wird der folgende Text angezeigt: Hello world!

Informationen zum bergeben von Werten (Parametern) an eine Funktion finden Sie unter Parameter an eine Funktion bergeben auf Seite 196. Sie haben mehrere Mglichkeiten, um Funktionen auf der Hauptzeitleiste zu erstellen. Meistens werden Sie benannte Funktionen und anonyme Funktionen verwenden. Zur Erstellung von Funktionen knnen Sie zum Beispiel die folgende Syntax verwenden:
function myCircle(radius:Number):Number { return (Math.PI * radius * radius); } trace(myCircle(5));

Anonyme Funktionen sind oft schwerer zu lesen. Vergleichen Sie den folgenden Code mit dem vorherigen Code.
var myCircle:Function = function(radius:Number):Number { // Funktionsblock hier einfgen return (Math.PI * radius * radius); }; trace(myCircle(5));

Funktionen und Methoden

193

Bei Verwendung von ActionScript 2.0 knnen Sie Funktionen auch in Klassendateien platzieren, wie im folgenden Beispiel gezeigt:
class Circle { public function area(radius:Number):Number { return (Math.PI * Math.pow(radius, 2)); } public function perimeter(radius:Number):Number { return (2 * Math.PI * radius); } public function diameter(radius:Number):Number { return (radius * 2); } }

Weitere Informationen zum Schreiben von Funktionen in einer Klassendatei finden Sie in Kapitel 6, Klassen auf Seite 205. Wie aus dem vorherigen Codebeispiel ersichtlich, mssen Funktionen nicht in einer Zeitleiste platziert werden. Im folgenden Beispiel werden Funktionen auch in eine Klassendatei platziert. Dieses Verfahren empfiehlt sich, wenn Sie in ActionScript 2.0 umfangreiche Anwendungen erstellen, da Sie den Code problemlos in mehreren Anwendungen wieder verwenden knnen. Wenn Sie die Funktionen in anderen Anwendungen wieder verwenden mchten, knnen Sie die vorhandene Klasse exportieren, anstatt den Code neu zu schreiben oder die Funktionen in der neuen Anwendung mehrfach zu erstellen.
So erstellen Sie Funktionen in einer Klassendatei:
1.

Erstellen Sie ein neues ActionScript-Dokument, und speichern Sie es unter dem Namen Utils.as. Geben Sie den folgenden ActionScript-Code in den Skriptbereich ein:
class Utils { public static function randomRange(min:Number, max:Number):Number { if (min > max) { var temp:Number = min; min = max; max = temp; } return (Math.floor(Math.random() * (max - min + 1)) + min); } public static function arrayMin(num_array:Array):Number { if (num_array.length == 0) { return Number.NaN; } num_array.sort(Array.NUMERIC | Array.DESCENDING); var min:Number = Number(num_array.pop()); return min; }

2.

194

Funktionen und Methoden

public static function arrayMax(num_array:Array):Number { if (num_array.length == 0) { return undefined; } num_array.sort(Array.NUMERIC); var max:Number = Number(num_array.pop()); return max; } } 3. 4.

Whlen Sie Datei > Speichern, um die ActionScript-Datei zu speichern. Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen classFunctions.fla im selben Verzeichnis wie Utils.as. Whlen Sie Fenster > Aktionen, um das Bedienfeld Aktionen zu ffnen. Geben Sie den folgenden ActionScript-Code in den Skriptbereich ein:
var randomMonth:Number = Utils.randomRange(0, 11); var min:Number = Utils.arrayMin([3, 3, 5, 34, 2, 1, 1, -3]); var max:Number = Utils.arrayMax([3, 3, 5, 34, 2, 1, 1, -3]); trace("month: " + randomMonth); trace("min: " + min); // -3 trace("max: " + max); // 34

5. 6.

7.

Whlen Sie Steuerung > Film testen, um die Dokumente zu testen. Im Bedienfeld Ausgabe wird der folgende Text angezeigt:
month: 7 min: -3 max: 34
H I NW E I S

Weitere Informationen zum Schreiben von Code mithilfe der Skripthilfe finden Sie in Flash verwenden.

Funktionen und Methoden

195

Variablen in Funktionen verwenden


Mithilfe lokaler Variablen knnen Sie Ihren Code strukturieren und so gestalten, dass seine Funktionsweise leicht nachvollziehbar ist. Die lokalen Variablen einer Funktion sind fr alle anderen Skripts der SWF-Datei unsichtbar. Sie gelten nur innerhalb des Hauptteils der Funktion, in der sie deklariert sind, und verlieren ihre Gltigkeit, sobald die Funktion beendet wird. An eine Funktion bergebene Parameter werden in Flash ebenfalls wie lokale Variablen gehandhabt.
H I N WE I S

Sie knnen in einer Funktion auch regulre Variablen verwenden. Wenn Sie regulre Variablen modifizieren, sollten Sie diese nderungen jedoch in Skriptkommentaren sorgfltig dokumentieren.

So verwenden Sie Variablen in Funktionen:


1.

Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen flashvariables.fla. Fgen Sie Bild 1 der Hauptzeitleiste den folgenden ActionScript-Code hinzu:
var myName:String = "Ester"; var myAge:String = "65"; var myFavSoftware:String = "Flash"; function traceMe(yourFavSoftware:String, yourName:String, yourAge:String) { trace("I'm " + yourName + ", I like " + yourFavSoftware + ", and I'm " + yourAge + "."); } traceMe(myFavSoftware, myName, myAge);

2.

3.

Whlen Sie Steuerung > Film testen, um das Flash-Dokument zu testen.

Weitere Informationen zur bergabe von Parametern finden Sie unter Parameter an eine Funktion bergeben auf Seite 196. Einzelheiten zu Variablen und Daten finden Sie in Kapitel 3, Daten und Datentypen auf Seite 35.

Parameter an eine Funktion bergeben


Parameter, auch Argumente genannt, sind die Elemente, mit denen eine Funktion ihren Code ausfhrt. (In diesem Handbuch sind die Begriffe Parameter und Argument austauschbar.) Sie knnen Parameter (Werte) an eine Funktion bergeben. Anschlieend knnen Sie diese Parameter zur Verarbeitung der Funktion verwenden. Sie verwenden die Werte innerhalb des Funktionsblocks (Anweisungen innerhalb der Funktion).

196

Funktionen und Methoden

Einige Parameter sind erforderlich, andere optional. Es ist auch mglich, dass eine Funktion sowohl erforderliche als auch optionale Parameter enthlt. Wenn Sie nicht alle erforderlichen Parameter an eine Funktion bergeben, weist Flash den fehlenden Parametern den Wert undefined zu. Dies kann unerwartete Ergebnisse in der SWF-Datei verursachen. Die folgende Funktion namens myFunc() hat den Parameter someText:
function myFunc(someText:String):Void { trace(someText); }

Nach der bergabe des Parameters knnen Sie einen Wert an die Funktion bergeben, wenn Sie sie aufrufen. Dieser Wert wird folgendermaen im Bedienfeld Ausgabe angezeigt:
myFunc("This is what traces");

Beim Aufruf einer Funktion sollten Sie immer die angegebene Anzahl an Parametern bergeben, es sei denn, die Funktion berprft, ob nicht definierte Werte vorhanden sind, und legt entsprechende Standardwerte fest. Die Funktion ersetzt die Parameter in der Funktionsdefinition durch die bergebenen Werte. Wenn Parameter fehlen, stellt Flash ihre Werte auf undefined ein. Beim Schreiben von ActionScript-Code bergeben Sie regelmig Parameter an Funktionen. Sie knnen auch mehrere Parameter an eine Funktion bergeben. Dies kann sehr einfach sein, wie im Folgenden gezeigt:
var birthday:Date = new Date(1901, 2, 3); trace(birthday);

Die Parameter werden durch Kommas voneinander getrennt. Zahlreiche integrierte ActionScript-Funktionen haben mehrere Parameter. So hat die Methode startDrag() der MovieClip-Klasse beispielsweise fnf Parameter: lockCenter, left, top, right und bottom:
startDrag(lockCenter:Boolean, left:Number, top:Number, right:Number, bottom:Number):Void

So bergeben Sie einen Parameter an eine Funktion:


1.

Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen parameters.fla. Fgen Sie Bild 1 der Zeitleiste den folgenden Code hinzu:
function traceMe(yourMessage:String):Void { trace(yourMessage); } traceMe("How are you doing?");

2.

Die ersten Codezeilen erstellen die benutzerdefinierte Funktion traceMe() mit einem einzelnen Parameter, yourMessage. Die letzte Codezeile ruft die Funktion traceMe() auf und bergibt den Stringwert "How are you doing?".

Funktionen und Methoden

197

3.

Whlen Sie Steuerung > Film testen, um das Flash-Dokument zu testen.

Im nchsten Beispiel wird gezeigt, wie Sie mehrere Parameter an eine Funktion bergeben.
So bergeben Sie mehrere Parameter an eine Funktion:
1.

Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen functionTest.fla. Fgen Sie Bild 1 in der Hauptzeitleiste den folgenden Code hinzu:
function getArea(width:Number, height:Number):Number { return width * height; }

2.

Die Funktion getArea() hat zwei Parameter: width und height.


3.

Geben Sie den folgenden Code nach der Funktion ein:


var area:Number = getArea(10, 12); trace(area); // 120

Beim Aufruf der Funktion getArea() wird der Breite der Wert 10 und der Hhe der Wert 12 zugewiesen. Sie speichern den Rckgabewert in der area-Instanz. Dann zeigen Sie die Werte an, die Sie in der area-Instanz speichern.
4.

Whlen Sie Steuerung > Film testen, um die SWF-Datei zu testen. Im Bedienfeld Ausgabe wird 120 angezeigt. Die Parameter in der Funktion getArea() hneln den Werten in lokalen Variablen. Sie sind nur whrend des Funktionsaufrufs vorhanden und verlieren dann ihre Gltigkeit.

Im nchsten Beispiel gibt der ActionScript-Code den Wert NaN (engl. fr Not a Number, keine Ziffer) zurck, wenn Sie nicht gengend Parameter an die Funktion addNumbers() bergeben.
So bergeben Sie eine variable Anzahl an Parametern an eine Funktion:
1.

Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen functionTest2.fla. Fgen Sie Bild 1 in der Hauptzeitleiste den folgenden Code hinzu:
function addNumbers(a:Number, b:Number, c:Number):Number { return (a + b + c); } trace(addNumbers(1, 4, 6)); // 11 trace(addNumbers(1, 4)); // NaN (Not a Number), c entspricht undefined trace(addNumbers(1, 4, 6, 8)); // 11

2.

Wenn Sie nicht gengend Parameter an die Funktion addNumbers bergeben, wird den fehlenden Argumenten der Standardwert undefined zugewiesen. Wenn Sie zu viele Parameter bergeben, werden die berzhligen Parameter ignoriert.

198

Funktionen und Methoden

3.

Whlen Sie Steuerung > Film testen, um das Flash-Dokument zu testen. Flash zeigt die folgenden Werte an: 11, NaN, 11.

Werte von Funktionen zurckgeben


Mit der Anweisung return knnen Sie Werte von einer Funktion zurckgeben. Die Anweisung return bestimmt den Wert, der von einer Funktion zurckgegeben wird. Die Anweisung return gibt das Ergebnis einer Auswertung als Wert der Funktion zurck, in der ein Ausdruck ausgefhrt wird. Das Ergebnis wird von der Anweisung return unmittelbar an den aufrufenden Code zurckgegeben. Weitere Informationen finden Sie unter dem Eintrag return-Anweisung im ActionScript 2.0-Referenzhandbuch. Die folgenden Regeln bestimmen die Verwendung der Anweisung return in Funktionen:

Wenn Sie einen anderen Rckgabetyp als Void fr eine Funktion festlegen, mssen Sie eine return-Anweisung gefolgt vom Rckgabewert in die Funktion einschlieen. Wenn Sie den Rckgabetyp Void angeben, mssen Sie keine return-Anweisung einschlieen. Wenn Sie die return-Anweisung dennoch einschlieen, darf kein Wert darauf folgen. Unabhngig vom Rckgabetyp knnen Sie eine return-Anweisung verwenden, um eine Funktion whrend der Ausfhrung zu beenden. Wenn Sie keinen Rckgabetyp festlegen, ist das Einschlieen einer return-Anweisung optional.

Die folgende Funktion gibt beispielsweise das Quadrat des Parameters myNum zurck und legt fest, dass der zurckgegebene Wert den Number-Datentyp haben muss:
function sqr(myNum:Number):Number { return myNum * myNum; }

Bestimmte Funktionen fhren eine Reihe von Aufgaben aus, ohne einen Wert zurckzugeben. Im nchsten Beispiel wird der verarbeitete Wert zurckgegeben. Sie erfassen diesen Wert in einer Variablen und knnen dann diese Variable in Ihrer Anwendung einsetzen.

Funktionen und Methoden

199

So knnen Sie einen Wert zurckgeben und in einer Variablen erfassen:


1.

Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen return.fla. Fgen Sie Bild 1 in der Hauptzeitleiste den folgenden Code hinzu:
function getArea(width:Number, height:Number):Number { return width * height; }

2.

Die Funktion getArea() hat zwei Parameter: width und height.


3.

Geben Sie den folgenden Code nach der Funktion ein:


var area:Number = getArea(10, 12); trace(area); // 120

Beim Aufruf der Funktion getArea() wird der Breite der Wert 10 und der Hhe der Wert 12 zugewiesen. Sie speichern den Rckgabewert in der area-Instanz. Dann zeigen Sie die Werte an, die Sie in der area-Instanz speichern.
4.

Whlen Sie Steuerung > Film testen, um die SWF-Datei zu testen. Im Bedienfeld Ausgabe wird 120 angezeigt. Die Parameter in der Funktion getArea() hneln den Werten in lokalen Variablen. Sie sind nur whrend des Funktionsaufrufs vorhanden und verlieren dann ihre Gltigkeit.

Verschachtelte Funktionen
Sie knnen eine Funktion von einer anderen Funktion aus aufrufen. So knnen Sie Funktionen verschachteln, damit sie bestimmte Aufgaben in Flash ausfhren. Beispielsweise knnen Sie Funktionen auf einer Zeitleiste verschachteln, um bestimmte Aufgaben fr einen String auszufhren. Geben Sie in Bild 1 der Zeitleiste den folgenden Code ein:
var myStr:String = "My marshmallow chicken is yellow."; trace("Original string: " + myStr); function formatText():Void { changeString("Put chicken in microwave."); trace("Changed string: " + myStr); } function changeString(newtext:String):Void { myStr = newtext; } // Funktion aufrufen. formatText();

200

Funktionen und Methoden

Whlen Sie Steuerung > Film testen, um die verschachtelte Funktion zu testen. Die Funktionen formatText() und changeString() werden beide auf den String angewendet, wenn Sie die Funktion formatText() aufrufen.

Methoden im berblick
Methoden sind Funktionen, die mit einer Klasse verknpft sind. Dabei kann es sich um benutzerdefinierte Klassen oder um integrierte ActionScript-Klassen handeln. Einzelheiten zu den Unterschieden zwischen Methoden und Funktionen finden Sie unter Funktionen und Methoden auf Seite 177 und Funktions- und Methodenarten auf Seite 179. Beispielsweise ist sortOn() eine integrierte Methode der Array-Klasse (sortOn ist eine Funktion der vordefinierten Array-Klasse, die in Flash integriert ist).
So verwenden Sie die Methode sortOn() in einer FLA-Datei:
1.

Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen methods.fla. Fgen Sie Bild 1 der Zeitleiste den folgenden Code hinzu:
var userArr:Array = new Array(); userArr.push({firstname:"George", age:39}); userArr.push({firstname:"Dan", age:43}); userArr.push({firstname:"Socks", age:2}); userArr.sortOn("firstname"); var userArrayLenth:Number = userArr.length; var i:Number; for (i = 0; i < userArrayLenth; i++) { trace(userArr[i].firstname); }

2.

Sie verwenden die Methode sortOn() der Array-Klasse, um ein neues Array-Objekt namens userArr zu erstellen. Das Array wird mit drei Objekten ausgefllt, die einen Vornamen und eine Altersangabe enthalten. Dann wird das Array nach dem Wert der Eigenschaft firstname der einzelnen Objekte sortiert. Dann durchlaufen Sie jedes Element im Array, zeigen den Vornamen im Bedienfeld Ausgabe an und sortieren die Namen alphabetisch nach dem ersten Buchstaben.
3.

Whlen Sie Steuerung > Film testen, um die SWF-Datei zu testen. Dieser Code zeigt im Bedienfeld Ausgabe Folgendes an:
Dan George Socks

Methoden im berblick

201

Wenn Sie in Bild 1 der Zeitleiste den folgenden Code eingeben, definiert der ActionScriptCode eine Funktion namens eatCabbage(), wie unter Benannte Funktionen schreiben auf Seite 183 gezeigt.
function eatCabbage() { trace("tastes bad"); } eatCabbage();

Wenn Sie jedoch die Funktion eatCabbage() innerhalb einer Klassendatei schreiben und beispielsweise eatCabbage() in der FLA-Datei aufrufen, gilt eatCabbage() als Methode. In den nchsten Beispielen wird gezeigt, wie Sie Methoden innerhalb einer Klasse erstellen.
So vergleichen Sie Methoden und Funktionen:
1.

Erstellen Sie eine neue ActionScript-Datei, und whlen Sie Datei > Speichern unter, um die Datei unter dem Namen EatingHabits.as zu speichern. Geben Sie den folgenden ActionScript-Code in das Skriptfenster ein:
class EatingHabits { public function eatCabbage():Void { trace("tastes bad"); } }

2.

3. 4.

Speichern Sie die genderte Datei EatingHabits.as. Erstellen Sie ein neues Flash-Dokument, whlen Sie Datei > Speichern unter, und speichern Sie die Datei unter dem Namen methodTest.fla im selben Verzeichnis wie EatingHabits.as. Geben Sie in Bild 1 der Zeitleiste den folgenden ActionScript-Code ein:
var myHabits:EatingHabits = new EatingHabits(); myHabits.eatCabbage();

5.

Bei Verwendung dieses ActionScript-Codes wird die Methode eatCabbage() der EatingHabits-Klasse aufgerufen.
H I NW E I S 202

Wenn Sie die Methoden integrierter Klassen verwenden (zustzlich zu der benutzerdefinierten Klasse, die Sie bereits erstellt haben), verwenden Sie eine Methode in einer Zeitleiste.

Funktionen und Methoden

6.

Fgen Sie nach der vorherigen ActionScript-Zeile den folgenden Code ein:
function eatCarrots():Void { trace("tastes good"); } eatCarrots();

In diesem Code wird die Funktion eatCarrots() geschrieben und aufgerufen.


7.

Whlen Sie Steuerung > Film testen, um die SWF-Datei zu testen.

Methoden benennen
Verwenden Sie Verben fr die Namen von Methoden und fr verkettete Wrter eine Mischung aus Gro- und Kleinbuchstaben, und stellen Sie sicher, dass der erste Buchstabe ein Kleinbuchstabe ist. Sie knnen Methoden beispielsweise wie folgt benennen:
sing(); boogie(); singLoud(); danceFast();

Die meisten Methoden werden mit Verben benannt, weil sie einen Vorgang fr ein Objekt ausfhren. Wie bei Variablen sind Sonderzeichen nicht zulssig. Auerdem darf der Methodenname nicht mit einer Ziffer beginnen. Weitere Informationen finden Sie unter Namenskonventionen auf Seite 745.

Methoden im berblick

203

204

Funktionen und Methoden

KAPITEL 6

Klassen
In diesem Kapitel lernen Sie, wie Sie in ActionScript 2.0 Klassen verwenden und schreiben. Klassen bilden das Kernstck von ActionScript 2.0 und sind jetzt noch wichtiger als in frheren Versionen von Flash. Im Verlauf dieses Kapitels wird ersichtlich, wie wichtig Klassen in Flash sind. Zunchst werden in diesem Kapitel einige wichtige Begriffe und ihre Beziehung zu Klassen und zur objektorientierten Programmierung (OOP) beschrieben Dann werden wir eine Beispielklassendatei untersuchen, um zu sehen, wie die einzelnen Abschnitte der Klassendatei funktionieren und wie die Klasse strukturiert ist. In den restlichen Abschnitten des Kapitels wird gezeigt, wie Sie benutzerdefinierte Klassen erstellen und in Ihren Flash-Dokumenten verwenden. Sie erfahren Einzelheiten zum Flash-Klassenpfad und lernen, wie eine Klasse dokumentiert werden sollte, damit Code und Zweck der Klasse fr andere Benutzer, die Ihren Code lesen oder verwenden, leicht verstndlich sind. In diesem Abschnitt werden Codebeispiele verwendet, mit denen Sie sich mit der Erstellung von Klassen in ActionScript 2.0 vertraut machen knnen. Nach Abschluss dieses Kapitels sollten Sie in der Lage sein, eine typische Klassendatei zu schreiben, Flash-Klassen zu erkennen und zu interpretieren und die Klassendateien anderer Benutzer zu lesen. Wenn die Erstellung von Skripts mit ActionScript 2.0 neu fr Sie ist, lesen Sie zunchst Kapitel 4, Syntax- und Sprachgrundlagen auf Seite 83 und Kapitel 17, Bewhrte Verfahren und Kodierungskonventionen fr ActionScript 2.0 auf Seite 743.

205

Weitere Informationen zum Arbeiten mit benutzerdefinierten und integrierten Klassen finden Sie in den folgenden Themen:
Objektorientierte Programmierung und Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 Benutzerdefinierte Klassendateien schreiben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 Benutzerdefinierte Klassen in einer Anwendung einsetzen . . . . . . . . . . . . . . . . . . 220 Beispiel: Benutzerdefinierte Klassen schreiben . . . . . . . . . . . . . . . . . . . . . . . . . . . . .247 Beispiel: Benutzerdefinierte Klassendateien in Flash verwenden. . . . . . . . . . . . . .263 Symbolen in Flash eine Klasse zuweisen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 Klassen kompilieren und exportieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268 Klassen und Gltigkeitsbereiche. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 bergeordnete und integrierte Klassen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .275 Integrierte Klassen verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .285

Objektorientierte Programmierung und Flash


ActionScript 2.0 ist eine objektorientierte Programmiersprache. Wie ActionScript liegt den OOP-Sprachen das Konzept von Klassen und Instanzen zugrunde. Eine Klasse definiert alle Eigenschaften fr eine Objektgruppe. Beispielsweise definiert die User-Klasse alle Benutzer, die mit Ihrer Anwendung arbeiten. Als Ergebnis erhalten Sie eine Instanziierung der Klasse, die fr die User-Klasse fr einen einzelnen Benutzer, also fr ein Mitglied der Klasse gilt. Durch die Instanziierung entsteht eine Instanz der User-Klasse, die alle Eigenschaften der User-Klasse bernimmt. Klassen werden auch als Datentypen oder Vorlagen betrachtet, die Sie erstellen knnen, um einen neuen Objekttyp zu definieren. Wenn Sie beispielsweise den Datentyp Salat in Ihrer Anwendung bentigen, knnen Sie die Salat-Klasse schreiben. Dadurch wird das SalatObjekt definiert, dem Sie Salat-Methoden (waschen()) und Eigenschaften (grn oder Blatt) zuweisen knnen. Zum Definieren einer Klasse verwenden Sie das Schlsselwort class in einer externen Skriptdatei. Um im Flash-Authoring-Tool eine externe Skriptdatei zu erstellen, whlen Sie Datei > Neu und dann ActionScript-Datei.

206

Klassen

ActionScript 2.0 umfasst Funktionen wie Filtereffekte, das Hoch- und Herunterladen von Dateien und die External API, und bietet mehrere leistungsstarke OOP-Konzepte und Schlsselwrter (wie class, interface und package), die Ihnen aus anderen Programmiersprachen, wie Java, vertraut sein sollten. Mit dieser Programmiersprache knnen Sie skalierbare und robuste Programmstrukturen erstellen, die sich einfach wieder verwenden und verwalten lassen. Auerdem knnen mit ActionScript die Entwicklungszeiten verkrzt werden, da Benutzern Kodierungshilfen und Debugging-Informationen zur Verfgung gestellt werden. Mithilfe von ActionScript 2.0 knnen Sie Objekte und benutzerdefinierte Klassen erstellen, Vererbung definieren und die integrierten und bergeordneten FlashKlassen erweitern. In diesem Kapitel wird beschrieben, wie Sie Klassen erstellen und mit benutzerdefinierten Klassen arbeiten. Flash enthlt ca. 65 bergeordnete und integrierte Klassen fr die verschiedensten Zwecke, wie zum Beispiel: Grunddatentypen (wie Array, Boolean, Date), benutzerdefinierte Fehlermeldungen und Ereignisse sowie mehrere Mglichkeiten zum Laden von externem Inhalt (XML, Bilder, binre Rohdaten und so weiter). Indem Sie vorhandene Funktionalitt ergnzen oder ndern knnen Sie auch benutzerdefinierte Klassen erstellen und in Ihre FlashDokumente integrieren sowie die bergeordneten Klassen erweitern. In Klassenmitglieder auf Seite 233 in diesem Kapitel wird beispielsweise gezeigt, wie Sie eine eigene Person-Klasse erstellen, die benutzerdefinierte Eigenschaften fr den Namen und das Alter einer Person enthlt. Sie knnen diese benutzerdefinierte Klasse dann als neuen Datentyp in Ihren Dokumenten verwenden und mit dem Operator new neue Instanzen der Klasse erstellen. Weitere Informationen zum Arbeiten mit der OOP finden Sie in den folgenden Themen:

Vorteile von Klassen auf Seite 207 Pakete auf Seite 208 Werte und Datentypen auf Seite 212 Grundlagen der objektorientiertem Programmierung auf Seite 212

Vorteile von Klassen


In der objektorientierten Programmierung definiert eine Klasse eine Objektkategorie. Eine Klasse beschreibt die Eigenschaften (Daten) und die Methoden (Verhalten) fr ein Objekt. Dies lsst sich mit Entwrfen in der Architektur vergleichen, welche die Merkmale von Gebuden beschreiben. Eine benutzerdefinierte Klasse wird in einer externen ActionScriptDatei (AS) geschrieben, die bei der Kompilierung der FLA-Datei in die Anwendung importiert werden kann.

Objektorientierte Programmierung und Flash

207

Klassen sind besonders bei der Erstellung von umfangreichen Flash-Anwendungen ntzlich, da die komplexe Struktur der Anwendung sich weitgehend in externen Klassendateien organisieren lsst. Wenn ein Groteil der Anwendungslogik sich in einer benutzerdefinierten Klasse befindet, kann der Code einfacher wieder verwendet werden. Zudem knnen Sie so festlegen, dass einige Methoden und Eigenschaften in anderen Teilen des ActionScript-Codes nicht sichtbar sind. Auf diese Weise knnen Sie verhindern, dass unbefugte Personen auf vertrauliche Daten zugreifen oder Daten ndern, die nicht gendert werden sollten. Sie haben auch die Mglichkeit, vorhandene Klassen zu erweitern, indem Sie neue Funktionen hinzufgen oder vorhandene Funktionen ndern. Wenn Sie beispielsweise drei hnliche Klassen bentigen, knnen Sie eine Basisklasse erstellen und dann zwei weitere Klassen schreiben, die die Basisklasse um zustzliche Methoden und Eigenschaften erweitern. Diese beiden Klassen knnen zustzliche Methoden und Eigenschaften hinzufgen, so erbrigt sich das Erstellen von drei Klassendateien mit demselben Code und derselben Logik. Klassen bieten auch den Vorteil, dass Code wieder verwendet werden kann. Wenn Sie beispielsweise mit der Drawing-API eine benutzerdefinierte Klasse schreiben, mit der eine benutzerdefinierte Fortschrittsleiste erstellt wird, knnen Sie diese Klasse im Klassenpfad speichern und denselben Code in allen Flash-Dokumenten wieder verwenden, indem Sie die benutzerdefinierte Klasse importieren. Weitere Informationen zum Einrichten des Klassenpfads finden Sie in Klassendateien importieren auf Seite 222 und Klassenpfad festlegen und ndern auf Seite 223.

Pakete
Wenn Sie Klassen erstellen, haben Sie die Mglichkeit, Ihre ActionScript-Klassendateien in Paketen zu organisieren. Ein Paket ist ein Verzeichnis mit einer oder mehreren Klassendateien, das sich in einem angegebenen Klassenpfadverzeichnis befindet (siehe Klassendateien importieren auf Seite 222 und Klassenpfad festlegen und ndern auf Seite 223). Ein Paket kann wiederum weitere Pakete enthalten, die als Unterpakete bezeichnet werden und jeweils ihre eigenen Klassendateien enthalten. Wie Variablen mssen auch Paketnamen Bezeichner sein; das erste Zeichen kann also ein Buchstabe, ein Unterstrich (_) oder ein Dollarzeichen ($), und jedes folgende Zeichen kann ein Buchstabe, eine Ziffer, ein Unterstrich oder ein Dollarzeichen sein. Fr die Benennung von Paketen gelten bevorzugte Konventionen. So sollten z. B. keine Unterstriche oder Dollarzeichen verwendet werden. Weitere Informationen zur Benennung von Paketen finden Sie in Pakete benennen auf Seite 754.

208

Klassen

Mit Paketen werden zumeist verwandte Klassen organisiert. Angenommen, Sie haben drei hnliche Klassen namens Square, Circle und Triangle in den Dateien Square.as, Circle.as und Triangle.as definiert. Die ActionScript-Dateien sind in einem Verzeichnis gespeichert, das wie im folgenden Beispiel gezeigt im Klassenpfad angegeben ist:
// In Square.as: class Square {} // In Circle.as: class Circle {} // In Triangle.as: class Triangle {}

Da diese drei Klassen verwandt sind, mchten Sie sie wahrscheinlich in dem Paket (Verzeichnis) Shapes ablegen. In diesem Fall wrde der vollstndig qualifizierte Klassenname den Paketpfad sowie den einfachen Klassennamen enthalten. Paketpfade werden durch eine Punktsyntax (.) angegeben. Jeder Punkt steht dabei fr ein Unterverzeichnis. Wenn Sie jede ActionScript-Datei, mit der eine Form definiert wird, im Verzeichnis Shapes ablegen wrden, mssten Sie den Namen der einzelnen Klassendateien wie folgt ndern, um den neuen Speicherort zu kennzeichnen:
// In Shapes/Square.as: class Shapes.Square {} // In Shapes/Circle.as: class Shapes.Circle {} // In Shapes/Triangle.as: class Shapes.Triangle {}

Um auf eine Klasse zu verweisen, die sich in einem Paketverzeichnis befindet, knnen Sie entweder den vollstndig qualifizierten Klassennamen angeben oder das Paket mit der import-Anweisung importieren. Weitere Informationen finden Sie unter Pakete verwenden auf Seite 210.

Objektorientierte Programmierung und Flash

209

Klassen und Pakete im Vergleich


In der objektorientierten Programmierung definiert eine Klasse eine Objektkategorie. Klassen sind im Prinzip Datentypen, die Sie erstellen knnen, wenn Sie in Ihrer Anwendung einen neuen Objekttyp bentigen. Eine Klasse beschreibt die Eigenschaften (Daten) und das Verhalten (Methoden) fr ein Objekt. Dies lsst sich mit Bauplnen in der Architektur vergleichen, welche die Merkmale von Gebuden beschreiben. Die Eigenschaften (innerhalb einer Klasse definierte Variablen) und Methoden einer Klasse werden in ihrer Gesamtheit als Klassenmitglieder bezeichnet. Um die von einer Klasse definierten Eigenschaften und Methoden verwenden zu knnen, mssen Sie meist zuerst eine Instanz der Klasse erstellen. Hiervon ausgenommen sind alle Klassen mit statischen Mitgliedern wie die bergeordnete Math-Klasse (siehe Statische Klassenmitglieder auf Seite 288 und Statische Methoden und Eigenschaften auf Seite 232). Das Verhltnis zwischen einer Instanz und ihrer Klasse hnelt dem eines Hauses und den zugehrigen Entwrfen. Pakete sind in Flash Verzeichnisse, die eine oder mehrere Klassendateien enthalten und sich in einem bestimmten Dateipfad befinden. Sie knnen verwandte benutzerdefinierte Klassendateien in einem Verzeichnis ablegen. Wenn Sie beispielsweise drei hnliche Klassen namens Stahlteil, Plastikteil und Holzteil in den Dateien Stahlteil.as, Plastikteil.as und Holzteil.as definiert haben, knnten Sie diese Klassen im Paket Teil anordnen. Weitere Informationen zu Paketen finden Sie in Pakete verwenden auf Seite 210 und Klassendateien erstellen und in Paketen zusammenfassen auf Seite 250.

Pakete verwenden
Pakete sind Verzeichnisse, die eine oder mehrere Klassendateien enthalten und sich in einem bestimmten Klassenpfadverzeichnis befinden. Beispielsweise ist das Paket flash.filters ein Verzeichnis auf Ihrer Festplatte, das mehrere Klassen fr jeden Filtertyp (z. B. BevelFilter, BlurFilter, DropShadowFilter usw.) in Flash 8 enthlt.
H I NW E I S 210

Zum Verwenden der import-Anweisung mssen Sie im Dialogfeld Einstellungen fr Verffentlichungen auf der Registerkarte Flash der FLA-Datei die Einstellung ActionScript 2.0 und Flash Player 6 oder hher whlen.

Mit der import-Anweisung knnen Sie auf Klassen zugreifen, ohne deren vollstndig qualifizierten Namen anzugeben. Wenn Sie beispielsweise die BlurFilter-Klasse in einem Skript verwenden mchten, mssen Sie entweder mit dem vollstndig qualifizierten Namen (flash.filters.BlurFilter) darauf verweisen oder die Klasse importieren. Wenn Sie die Klasse importieren, knnen Sie mit dem Klassennamen (BlurFilter) darauf verweisen. Der folgende ActionScript-Code verdeutlicht die Unterschiede zwischen dem Verwenden der import-Anweisung und dem Verwenden der vollstndig qualifizierten Klassennamen.

Klassen

Wenn Sie die BlurFilter-Klasse nicht importieren, muss Ihr Code den vollstndig qualifizierten Klassennamen (Paketname gefolgt von Klassenname) nennen, um den folgenden Filter verwenden zu knnen:
// ohne Importieren var myBlur:flash.filters.BlurFilter = new flash.filters.BlurFilter(10, 10, 3);

Geben Sie im gleichen Code die import-Anweisung ein, knnen Sie nur mit dem Klassennamen auf die BlurFilter-Klasse zugreifen, ohne dass Sie den vollstndig qualifizierten Namen verwenden mssen. So sparen Sie sich Arbeit und reduzieren gleichzeitig die Mglichkeit von Tippfehlern:
// mit Importieren import flash.filters.BlurFilter; var myBlur:BlurFilter = new BlurFilter(10, 10, 3);

Wenn Sie mehrere Klassen innerhalb eines Pakets importieren (z. B. BlurFilter, DropShadowFilter und GlowFilter), knnen Sie eine der beiden folgenden Methoden zum Importieren jeder Klasse verwenden. Die erste Methode zum Importieren von mehreren Klassen ist das Importiren jeder Klasse mithilfe einer separaten import-Anweisung. Dies wird in dem folgenden Snipplet gezeigt:
import flash.filters.BlurFilter; import flash.filters.DropShadowFilter; import flash.filters.GlowFilter;

Das Verwenden von einzelnen import-Anweisungen fr jede Klasse innerhalb eines Pakets kann schnell recht zeitaufwndig werden und Fehler einbringen. Eine zweite Methode zum Importieren von Klassen innerhalb eines Pakets ist das Verwenden eines Platzhalters, so dass alle Klassen innerhalb einer bestimmten Ebene eines Pakets importiert werden. Das folgende ActionScript ist ein Beispiel fr einen Import mit Platzhalter:
import flash.filters.*; // importiert jede Klasse innerhalb eines flash.filters-Pakets

Die import-Anweisung gilt nur fr das aktuelle Skript (Bild oder Objekt), in dem sie aufgerufen wird. Stellen Sie sich beispielsweise vor, dass Sie alle Klassen im macr.util-Paket in das erste Bild eines Flash-Dokuments importieren. Auf diesem Bild knnen Sie Referenzen zu den Klassen in dem Paket einfach ber die Klassennamen anstelle der vollstndig qualifizierten Namen unterbringen. Wenn Sie den Klassennamen in einem anderen Bildskript verwenden mchten, mssten Sie allerdings die Referenzen zu den Klassen in dem Paket ber vollstndig qualifizierte Namen festlegen oder dem anderen Bild eine import-Anweisung hinzufgen, mit der die Klassen in das Paket importiert werden.

Objektorientierte Programmierung und Flash

211

Bei import-Anweisungen muss auerdem bercksichtigt werden dass die Klassen nur fr die angegebene Ebene importiert werden. Wenn Sie beispielsweise alle Klassen im Paket mx.transitions importiert haben, werden nur die Klassen innerhalb des Verzeichnisses / transitions/ importiert, jedoch keine Klassen in den Unterverzeichnissen (z. B. die Klassen in dem Paket mx.transitions.easing).
T I PP 212

Wenn Sie eine Klasse importieren, diese aber im Skript nicht verwenden, wird die Klasse nicht zusammen mit der SWF-Datei exportiert. Dies bedeutet, dass Sie groe Pakete importieren knnen, ohne sich spter um die Gre der SWF-Datei Gedanken machen zu mssen. Der mit einer Klasse verknpfte Bytecode ist in einer SWF-Datei nur dann enthalten, wenn die entsprechende Klasse tatschlich verwendet wird.

Werte und Datentypen


Wenn Sie Klassen schreiben und verwenden, sind Daten, Werte und Typen von Bedeutung. Einzelheiten zu Daten und Typen finden Sie in Kapitel 3, Daten und Datentypen auf Seite 35. Bei der Arbeit mit Klassen ist zu beachten, dass Datentypen die Art der Informationen beschreiben, die eine Variable oder ein ActionScript-Element enthalten kann, wie beispielsweise Boolean, Number und String. Weitere Informationen finden Sie unter Datentypen auf Seite 36. Ausdrcke haben Werte, whrend Werte und Eigenschaften einen bestimmten Typ aufweisen. Die Werte, die Sie in einer Klasse fr Eigenschaften festlegen oder von Eigenschaften abrufen knnen, mssen mit dieser Eigenschaft kompatibel sein. Typkompatibilitt bedeutet, dass der Typ eines Werts mit dem verwendeten Typ kompatibel ist, wie im folgenden Beispiel gezeigt:
var myNum:Number = 10;

Weitere Informationen zur strikten Datentypisierung finden Sie in Datentypen zuweisen und strikte Datentypisierung auf Seite 46.

Grundlagen der objektorientiertem Programmierung


In den folgenden Abschnitten werden einige Begriffe erlutert, die im weiteren Verlauf dieses Kapitels verwendet werden. Sie sollten ein gutes Verstndnis dieser Terminologie haben, bevor Sie mit dem Schreiben von ActionScript-Code beginnen. Diese Einfhrung in grundlegende Konzepte der objektorientierten Programmierung soll Ihnen das Verstndnis der Beispiele und Abschnitte in diesem und weiteren Kapiteln erleichtern. Dieses Kapitel enthlt eine ausfhrliche Beschreibung dieser Konzepte sowie Anleitungen dazu, wie sie in Flash implementiert werden. In den folgenden Abschnitten werden die OOP-Konzepte anhand der Analogie einer Katze erlutert.

Klassen

Objekte
Stellen Sie sich ein Objekt aus der wirklichen Welt vor zum Beispiel eine Katze. Eine Katze kann Eigenschaften haben, wie beispielsweise Name, Alter und Farbe. Eine Katze kann auch bestimmte Verhaltensweisen aufweisen, z. B. Schlafen, Fressen und Schnurren. In der objektorientierten Programmierung verfgen Objekte ebenfalls ber Eigenschaften und Verhaltensweisen. Mit objektorientierten Techniken knnen Sie ein Objekt aus der wirklichen Welt (wie eine Katze) oder ein abstrakteres Objekt (wie einen chemischen Prozess) modellieren.
H I NW E I S

Das Wort Verhaltensweisen wird hier ganz allgemein verwendet und bezieht sich nicht auf das Entwicklungsbedienfeld Verhalten der Flash-Authoring-Umgebung.

Weitere Informationen zu Objekten finden Sie in Object-Datentyp auf Seite 43.

Instanzen und Klassenmitglieder


Fhrt man die Analogie zur wirklichen Welt am Beispiel einer Katze fort, so muss bercksichtigt werden, dass Katzen unterschiedliche Farben und Namen und ein unterschiedliches Alter haben knnen. Hinzu kommt, dass sie unterschiedlich fressen und schnurren. Trotz all dieser Unterschiede gehren sie jedoch zur selben Kategorie, oder, in der Sprache der objektorientierten Programmierung, zur selben Klasse: der Klasse der Katzen. Im OOP-Sprachgebrauch ist jede Katze eine Instanz der Katzen-Klasse. Genauso definiert eine Klasse in OOP einen Entwurf fr einen Objekttyp. Die Merkmale und Verhaltensweisen, die zu einer Klasse gehren, werden als Mitglieder dieser Klasse bezeichnet. Die Merkmale (im Katzenbeispiel Name, Alter und Farbe) sind die Eigenschaften der Klasse, die als Variablen dargestellt werden. Die Verhaltensweisen (Spielen, Schlafen) werden als Methoden der Klasse bezeichnet und als Funktionen dargestellt. Weitere Informationen zu Instanzen und Klassenmitgliedern finden Sie in Klassenmitglieder auf Seite 233 und Klassenmitglieder verwenden auf Seite 237.

Objektorientierte Programmierung und Flash

213

Vererbung
Einer der Hauptvorteile der objektorientierten Programmierung ist, dass Sie Unterklassen einer Klasse erstellen (oder die Klasse erweitern) knnen. Die Unterklasse bernimmt (erbt) alle Eigenschaften und Methoden der bergeordneten Klasse. Die Unterklasse definiert in der Regel zustzliche Methoden und Eigenschaften oder setzt Methoden oder Eigenschaften auer Kraft, die in der bergeordneten Klasse definiert wurden. Unterklassen knnen auch die in einer bergeordneten Klasse definierten Methoden auer Kraft setzen (also durch ihre eigenen Definitionen ersetzen). Die Verwendung einer Struktur aus bergeordneten Klassen und Unterklassen bietet vor allem den Vorteil, dass hnlicher Code sich in verschiedenen Klassen einfach wieder verwenden lsst. Sie knnten beispielsweise eine bergeordnete Klasse namens Tiere erstellen, die gemeinsame Merkmale und Verhaltensweisen aller Tiere enthlt. Dann knnten Sie mehrere Unterklassen fr bestimmte Tiere erstellen, die Merkmale und Verhaltensweisen aus der bergeordneten Klasse Tiere bernehmen, zustzlich jedoch spezifische Eigenschaften und Verhaltensweisen des jeweiligen Tieres enthalten. Sie knnten beispielsweise eine Katzen-Klasse erstellen, die ihre Eigenschaften von einer anderen Klasse bernimmt. Angenommen, Sie erstellen die Sugetier-Klasse, die bestimmte Eigenschaften und Verhaltensweisen definiert, die allen Sugetieren gemeinsam sind. Sie knnen dann die Unterklasse Katze erstellen, die die Sugetier-Klasse erweitert. Eine andere Unterklasse, z. B. Siamesen, knnte wiederum die Katzen-Klasse erweitern und so weiter. Beim Schreiben von Unterklassen knnen Sie bereits vorhandenen Code recyceln. Anstatt den gesamten Code, der beiden Klassen gemeinsam ist, neu zu erstellen, knnen Sie einfach eine vorhandene Klasse erweitern.
TIPP 214

In einer komplexen Anwendung besteht ein wichtiger Teil des Designs darin, zu bestimmen, wie die Hierarchie der Klassen strukturiert werden soll. Entwerfen Sie diese Hierarchie, bevor Sie mit dem Programmieren beginnen.

Weitere Informationen zu Vererbung und Unterklassen Sie in Kapitel 7, Vererbung auf Seite 293.

Schnittstellen
In OOP knnen Sie sich Schnittstellen als Vorlagen fr Klassendefinitionen vorstellen. Klassen, die Schnittstellen implementieren, sind erforderlich, um diese Methodenvorlage zu implementieren. Um bei der Analogie der Katze zu bleiben, eine Schnittstelle hnelt dem Entwurf einer Katze: der Entwurf gibt an, welche Teile Sie bentigen, aber er gibt nicht an, wie diese Teile zusammengesetzt werden oder wie sie funktionieren.

Klassen

Mit Schnittstellen knnen Sie eine Struktur hinzufgen und die Pflege Ihrer Anwendungen vereinfachen. Das ActionScript 2.0 nur das Erweitern aus einer bergeordneten Klasse untersttzt, knnen Sie Schnittstellen als eine Art eingeschrnkte mehrfache Vererbung einsetzen. Eine Schnittstelle kann auch als eine Art Programmiervertrag angesehen werden, mit dem Beziehungen zwischen sonst nicht verwandten Klassen erzwungen werden. Angenommen, Sie arbeiten mit einem Programmiererteam, bei dem jeder einzelne Programmierer an einem anderen Teil (Klasse) derselben Anwendung arbeitet. Whrend des Anwendungsdesigns legen Sie eine Reihe von Methoden fest, mit deren Hilfe die verschiedenen Klassen kommunizieren. Sie erstellen also eine Schnittstelle, die diese Methoden, ihre Parameter und ihre Rckgabetypen deklariert. Jede Klasse, die diese Schnittstelle implementiert, muss fr diese Methoden Definitionen bereitstellen; andernfalls kommt es zu einem Compiler-Fehler. Weitere Informationen zur Vererbung finden Sie unter Kapitel 7, Vererbung auf Seite 293. Weitere Informationen zu Schnittstellen finden Sie in Kapitel 8, Schnittstellen auf Seite 309.

Kapselung
In eleganten objektorientierten Entwrfen werden Objekte als Blackbox dargestellt, die Funktionen enthalten oder einkapseln. Ein Programmierer sollte in der Lage sein, mit einem Objekt zu interagieren, dessen Eigenschaften, Methoden und Ereignisse (die Programmieroberflche) er kennt, ohne die Details der Implementierung zu kennen. Mit diesem Ansatz knnen sich Programmierer auf einer hheren Abstraktionsebene bewegen und erhalten einen Rahmen, der sie bei der Erstellung komplexer Systeme untersttzt. Aufgrund der Kapselung umfasst ActionScript 2.0 zum Beispiel eine Steuerung des Mitgliedzugriffs. Einzelheiten der Implementierung knnen so privat und unsichtbar fr den Code auerhalb eines Objekts erstellt werden. Die Interaktion des Codes auerhalb des Objekts muss mit der Programmierungsoberflche des Objekts erfolgen, nicht mit den Implementierungsdetails (die in den privaten Methoden und Eigenschaften ausgeblendet sein knnen). Dieser Ansatz bietet einige wichtige Vorteile. Solange sich die Programmierungsoberflche nicht ndert, kann der Ersteller eines Objekts beispielsweise die Implementierung des Objekts ndern, ohne dass nderungen am Code auerhalb des Objekts notwendig werden. Weitere Informationen zur Kapselung finden Sie in Kapselung verwenden auf Seite 246.

Objektorientierte Programmierung und Flash

215

Polymorphismus
Bei der objektorientierten Programmierung knnen Sie Unterschiede zwischen einzelnen Klassen durch eine besondere Technik, den so genannten Polymorphismus, ausdrcken. Hierbei knnen Klassen Methoden ihrer bergeordneten Klassen auer Kraft setzen und spezialisierte Implementierungen dieser Methoden definieren. In Flash knnen Unterklassen spezialisierte Implementationen von Methoden definieren, die von der bergeordneten Klasse geerbt wurden, aber sie knnen nicht, wie in anderen Programmiersprachen, auf die Implementation der Superklasse zugreifen. Angenommen, Ihre erste Klasse ist die Sugetier-Klasse mit den Methoden spielen() und Sie erstellen dann die Unterklassen Katze, Affe und Hund, um die Sugetier-Klasse zu erweitern. Die Unterklassen setzen die Methode sleep() der SugetierKlasse auer Kraft, um die Gewohnheiten der jeweiligen Tiere widerzuspiegeln. Affe implementiert die Methode spielen(), um von Ast zu Ast zu schwingen, Katze implementiert die Methode spielen(), um einem Wollknuel hinterher zu jagen, und Hund implementiert die Methode spielen(), um einen Ball zu apportieren. Da die Funktion sleep() fr alle Tiere hnlich ist, verwenden Sie hierfr die Implementierung der bergeordneten Klasse.
schlafen().

Weitere Informationen zum Polymorphismus finden Sie in Kapitel 7, Vererbung auf Seite 293 und Polymorphismus in einer Anwendung einsetzen auf Seite 303.

Benutzerdefinierte Klassendateien schreiben


Im folgenden Beispiel werden die Komponenten einer Klassendatei erlutert. Sie lernen, wie Sie eine Klasse schreiben und dann ndern knnen, um ihre Einsatzmglichkeiten in Flash zu erweitern. Sie finden hier auch Einzelheiten zu den Komponenten einer Klasse sowie Anleitungen zum Importieren. Weiterhin wird in diesem Abschnitt beschrieben, wie Sie in Flash mit benutzerdefinierten Klassendateien arbeiten. Beginnen wir mit einer sehr einfachen Klasse. Im folgenden Beispiel wird der Aufbau einer einfachen Klasse namens UserClass gezeigt:

216

Klassen

Eine Klasse wird mithilfe des Schlsselworts class in einer externen Skriptdatei definiert (jedoch nicht in einem Skript, das Sie im Bedienfeld Aktionen schreiben). Die Klassenstruktur ist auch fr Schnittstellendateien relevant. Diese Struktur wird in der folgenden Abbildung veranschaulicht, die Sie zum Erstellen einer Klasse heranziehen werden.

Die Klassendatei beginnt mit Kommentaren zur Dokumentierung. Hierzu gehren eine allgemeine Beschreibung des Codes ebenso wie Informationen zum Autor und zur Version. Fgen Sie import-Anweisungen hinzu (falls erforderlich). Schreiben Sie eine Paket-Anweisung, eine Klassendeklaration oder eine Schnittstellendeklaration, wie im Folgenden gezeigt:
class UserClass {...}

Schlieen Sie alle erforderlichen Implementierungskommentare fr die Klasse oder Schnittstelle ein. Geben Sie in diese Kommentare Informationen an, die die gesamte Klasse oder Schnittstelle betreffen. Fgen Sie alle statischen Variablen hinzu. Schreiben Sie zuerst die ffentlichen Klassenvariablen und dann die privaten Klassenvariablen. Fgen Sie Instanzvariablen hinzu. Schreiben Sie zuerst die ffentlichen Mitgliedsvariablen und dann die privaten Mitgliedsvariablen. Fgen Sie die Konstruktor-Anweisung hinzu, hnlich wie im folgenden Beispiel:
public function UserClass(username:String, password:String) {...}

Schreiben Sie Ihre Methoden. Fassen Sie die Methoden nach ihrer Funktionalitt zusammen, nicht nach Zugriff oder Gltigkeitsbereich. Durch eine solche Anordnung wird Ihr Code besser lesbar und nachvollziehbar. Schreiben Sie die get-/set-Methoden in die Klassendatei.

Das folgende Beispiel zeigt eine einfache ActionScript-Klasse namens User.

Benutzerdefinierte Klassendateien schreiben

217

So erstellen Sie Klassendateien:


1. 2. 3.

Whlen Sie Datei > Neu und dann ActionScript-Datei, und klicken Sie auf OK. Whlen Sie Datei > Speichern unter, und nennen Sie die neue Datei User.as. Geben Sie den folgenden ActionScript-Code in das Skriptfenster ein:
/** User-Klasse Autor: Hans Mustermann Version: 0.8 gendert: 08/21/2005 Copyright: Adobe Systems Incorporated Dieser Code definiert eine benutzerdefinierte User-Klasse, mit der Sie neue Benutzer erstellen und Anmeldeinformationen fr die Benutzer festlegen knnen. */ class User { // private Instanzvariablen private var __username:String; private var __password:String; // Konstruktor-Anweisung public function User(p_username:String, p_password:String) { this.__username = p_username; this.__password = p_password; } public function get username():String { return this.__username; } public function set username(value:String):Void { this.__username = value; } public function get password():String { return this.__password; } public function set password(value:String):Void { this.__password = value; } }

218

Klassen

4.

Speichern Sie die genderte Klassendatei. Das oben gezeigte Codebeispiel beginnt mit einem standardisierten Dokumentationskommentar, der folgende Angaben enthlt: Klassenname, Autor, Version, Datum der letzten nderung, Copyright-Informationen sowie eine kurze Beschreibung des Verwendungszwecks der Klasse. Die Konstruktor-Anweisung der Benutzer-Klasse hat zwei Parameter: p_username und p_password. Diese Parameter werden in die privaten Instanzvariablen __username und __password der Klasse kopiert. Der restliche Code in der Klasse definiert die get-/setEigenschaften fr die privaten Instanzvariablen. Wenn Sie eine schreibgeschtzte Eigenschaft erstellen mchten, definieren Sie nur eine get-Funktion, aber keine setFunktion. Wenn Sie z. B. sicherstellen mchten, dass ein bereits definierter Benutzername nicht mehr gendert werden kann, lschen Sie die set-Funktion username aus der UserKlassendatei.

5. 6.

Whlen Sie Datei > Neu und dann Flash-Dokument. Whlen Sie Datei > Speichern unter, und nennen Sie die Datei user_test.fla. Speichern Sie die Datei im selben Verzeichnis wie User.as. Geben Sie in Bild 1 der Zeitleiste den folgenden ActionScript-Code ein:
import User; var user1:User = new User("un1", "pw1"); trace("Before:"); trace("\t username = " + user1.username); trace("\t password = " + user1.password); user1.username = "1nu"; user1.password = "1wp"; trace("After:"); trace("\t username = " + user1.username); trace("\t password = " + user1.password);

7.

// un1 // pw1

// 1nu // 1wp

Da die zuvor erstellte User-Klasse sehr einfach ist, gestaltet sich auch der ActionScriptCode im Flash-Dokument sehr unkompliziert. Mit der ersten Codezeile wird die benutzerdefinierte User-Klasse in das Flash-Dokument importiert. Durch das Importieren kann die User-Klasse als benutzerdefinierter Datentyp verwendet werden.

Benutzerdefinierte Klassendateien schreiben

219

Eine Instanz der User-Klasse wird definiert und einer Variablen namens user1 zugewiesen. Sie weisen dem User-Objekt user1 einen Wert zu und legen fr username den Wert un1 und fr password den Wert pw1 fest. Die beiden folgenden trace-Anweisungen zeigen die aktuellen Werte von user1.username und user1.password an. Dazu werden die get-Funktionen der User-Klasse verwendet, die beide Strings zurckgeben. In den nchsten beiden Zeilen werden die set-Funktionen der User-Klasse verwendet, um neue Werte fr die Variablen username und password festzulegen. Abschlieend zeigen Sie die Werte fr username und password im Bedienfeld Ausgabe an. Die trace-Anweisungen zeigen die genderten Werte an, die Sie mit den set-Funktionen festgelegt haben.
8.

Speichern Sie die FLA-Datei, und whlen Sie Steuerung > Film testen, um die Dateien zu testen. Die Ergebnisse der trace-Anweisungen werden im Bedienfeld Ausgabe angezeigt. In den folgenden Beispielen wird gezeigt, wie Sie diese Dateien in einer Anwendung einsetzen.

Beispiele zur Erstellung eines dynamischen Mens mit XML-Daten und einer benutzerdefinierten Klassendatei finden Sie auf der Webseite mit Flash-Beispielen unter www.adobe.com/go/learn_fl_samples_de. Im Beispiel wird der ActionScript-Konstruktor XmlMenu() aufgerufen, dem zwei Parameter bergeben werden: der Pfad zur XML-Mendatei und ein Verweis auf die aktuelle Zeitleiste. Laden Sie die komprimierte Beispieldatei herunter, dekomprimieren Sie sie, und wechseln Sie in den Ordner ActionScript2.0/XML_Menu, um auf die Beispiele zuzugreifen.

XmlMenu.as xmlmenu.fla

Benutzerdefinierte Klassen in einer Anwendung einsetzen


Im Abschnitt Benutzerdefinierte Klassendateien schreiben auf Seite 216 haben Sie eine benutzerdefinierte Klassendatei erstellt. In den folgenden Abschnitten wird gezeigt, wie Sie diese Klassendatei in einer Anwendung einsetzen. Der Arbeitsablauf fr die Erstellung von Klassen umfasst mindestens die folgenden Schritte:
1.

Sie definieren eine Klasse in einer externen ActionScript-Klassendatei. Einzelheiten zum Definieren und Schreiben einer Klassendatei finden Sie in Benutzerdefinierte Klassendateien schreiben auf Seite 216.

220

Klassen

2.

Sie speichern die Klassendatei in einem bestimmten Klassenpfadverzeichnis (einem Speicherort, an dem Flash nach Klassen sucht) oder in demselben Verzeichnis, in dem sich die FLA-Datei der Anwendung befindet. Weitere Informationen zum Einrichten des Klassenpfads finden Sie in Klassenpfad festlegen und ndern auf Seite 223. Einen Vergleich und weitere Einzelheiten zum Importieren von Klassendateien finden Sie in Klassendateien importieren auf Seite 222. Sie erstellen eine Instanz der Klasse in einem anderen Skript, entweder in einem FLA-Dokument oder in einer externen Skriptdatei, oder indem Sie eine Unterklasse auf Grundlage der ursprnglichen Klasse erstellen. Weitere Informationen zum Erstellen einer Instanz einer Klasse finden Sie in Instanzen von Klassen in einem Beispiel erstellen auf Seite 265.

3.

In den folgenden Abschnitten dieses Kapitels werden Codebeispiele verwendet, mit deren Hilfe Sie sich mit der Erstellung von Klassen in ActionScript 2.0 vertraut machen knnen. Wenn Sie noch keine Erfahrung mit ActionScript 2.0 haben, lesen Sie zunchst Kapitel 3, Daten und Datentypen auf Seite 35 und Kapitel 4, Syntax- und Sprachgrundlagen auf Seite 83. Weitere Informationen zum Arbeiten mit benutzerdefinierten Klassen finden Sie in den folgenden Themen:

Klassendateien importieren auf Seite 222 Klassendatei in Flash verwenden auf Seite 227 Methoden und Eigenschaften einer Klassendatei verwenden auf Seite 228 Klassenmitglieder auf Seite 233 get-/set-Methoden auf Seite 239 So lst der Compiler Klassenverweise auf: auf Seite 227 Dynamische Klassen auf Seite 243 Kapselung verwenden auf Seite 246 this-Schlsselwort in Klassen verwenden auf Seite 247

Beispiele zur Erstellung eines dynamischen Mens mit XML-Daten und einer benutzerdefinierten Klassendatei finden Sie auf der Webseite mit Flash-Beispielen unter www.adobe.com/go/learn_fl_samples_de. Im Beispiel wird der ActionScript-Konstruktor XmlMenu() aufgerufen, dem zwei Parameter bergeben werden: der Pfad zur XML-Mendatei und ein Verweis auf die aktuelle Zeitleiste. Laden Sie die komprimierte Beispieldatei herunter, dekomprimieren Sie sie, und wechseln Sie in den Ordner ActionScript2.0/XML_Menu, um auf die Beispiele zuzugreifen.

XmlMenu.as xmlmenu.fla

Benutzerdefinierte Klassen in einer Anwendung einsetzen

221

Klassendateien importieren
Damit benutzerdefinierte Klassen oder Schnittstellen verwendet werden knnen, muss Flash die externen ActionScript-Dateien mit der Klassen- oder Schnittstellendefinition finden, so dass diese Dateien importiert werden knnen. Die Liste der Verzeichnisse, in denen Flash nach Klassen-, Schnittstellen-, Funktions- und Variablendefinitionen sucht, wird als Klassenpfad (classpath) bezeichnet. In Flash gibt es zwei Klassenpfad-Einstellungen: den globalen Klassenpfad und den Klassenpfad auf Dokumentebene.

Der globale Klassenpfad wird von allen Flash-Dokumenten genutzt. Sie richten ihn in dem Dialogfeld Voreinstellungen ein. Whlen Sie Bearbeiten > Voreinstellungen (Windows) bzw. Flash > Voreinstellungen (Macintosh), und klicken Sie im Dialogfeld Voreinstellungen in der Liste Kategorie auf ActionScript. Anschlieend klicken Sie auf ActionScript 2.0-Einstellungen. Der Klassenpfad auf Dokumentebene wird konkret fr ein bestimmtes FlashDokument festgelegt. Dieser Klassenpfad wird im Dialogfeld Einstellungen fr Verffentlichungen festgelegt (Datei > Einstellungen fr Verffentlichungen. Whlen Sie dann die Registerkarte Flash und klicken Sie auf die Schaltflche Einstellungen). Die import-Anweisungen knnen sich an den folgenden Orten befinden:

Fr den Import von Klassendateien gelten die folgenden Regeln:

An beliebigen Stellen vor der Klassendefinition in Klassendateien An beliebigen Stellen in Bildern oder Objektskripten An beliebigen Stellen in ActionScript-Dateien, die in eine Anwendung aufgenommen werden (mithilfe der #include-Anweisung).

Zum Importieren von einzelnen Paketdefinitionen verwenden Sie die folgende Syntax:
import flash.display.BitmapData;

Mit der Platzhaltersyntax knnen ganze Pakete importiert werden:


import flash.display.*;

Mithilfe einer include-Anweisung knnen Sie ein ActionScript-Code auch in eine FLA-Datei (ein Flash-Dokument) einschlieen. Fr die include-Anweisung gelten die folgenden Regeln:

Mit include-Anweisungen wird der Inhalt der eingeschlossenen ActionScript-Datei kopiert und eingefgt.
include-Anweisungen innerhalb von ActionScript-Klassendateien werden relativ zu dem Unterverzeichnis interpretiert, das die Datei enthlt.

222

Klassen

Mit einer include-Anweisung in einer FLA-Datei kann nur Code eingefgt werden, der in FLA-Dateien gltig ist. Dasselbe gilt fr andere Orte, an denen sich includeAnweisungen befinden knnen. Wenn Sie beispielsweise eine include-Anweisung in einer Klassendefinition verwenden, kann die eingeschlossene ActionScript-Datei nur Eigenschafts- und Methodendefinitionen enthalten:
// Foo.as class Foo { #include "FooDef.as" } // FooDef.as: var fooProp; function fooMethod() {} trace("Foo"); // Diese Anweisung ist in einer Klassendefinition nicht zulssig.

Weitere Informationen zur include-Anweisung finden Sie unter dem Eintrag #includeDirektive im ActionScript 2.0-Referenzhandbuch. Einzelheiten zu Klassenpfaden finden Sie in Klassenpfad festlegen und ndern auf Seite 223.

Klassenpfad festlegen und ndern


Damit benutzerdefinierte Klassen oder Schnittstellen verwendet werden knnen, muss Flash die externen ActionScript-Dateien mit der Klassen- oder Schnittstellendefinition finden. Die Liste der Verzeichnisse, in denen Flash nach Klassen- und Schnittstellendefinitionen sucht, wird als Klassenpfad (classpath) bezeichnet. Wenn Sie eine ActionScript-Klassendatei erstellen, mssen Sie die Datei in einem der im Klassenpfad angegebenen Verzeichnisse oder Unterverzeichnisse speichern. (Sie knnen den Klassenpfad so ndern, dass er den gewnschten Verzeichnispfad enthlt.) Andernfalls kann Flash die im Skript angegebene Klasse oder Schnittstelle nicht auflsen oder finden. Innerhalb eines Klassenpfadverzeichnisses erstellte Unterverzeichnisse werden als Pakete bezeichnet. Mit Paketen knnen Sie Ihre Klassen organisieren. Weitere Informationen zu Paketen finden Sie in Klassendateien erstellen und in Paketen zusammenfassen auf Seite 250. In Flash gibt es zwei Klassenpfad-Einstellungen: den globalen Klassenpfad und den Klassenpfad auf Dokumentebene. Der globale Klassenpfad wird von allen Flash-Dokumenten genutzt. Der Klassenpfad auf Dokumentebene wird konkret fr ein bestimmtes Flash-Dokument festgelegt.

Benutzerdefinierte Klassen in einer Anwendung einsetzen

223

Der globale Klassenpfad bezieht sich auf externe ActionScript- und auf FLA-Dateien und wird im Dialogfeld Voreinstellungen eingerichtet. Whlen Sie Bearbeiten > Voreinstellungen (Windows) bzw. Flash > Voreinstellungen (Macintosh). Klicken Sie im Dialogfeld Voreinstellungen in der Liste Kategorie auf ActionScript und anschlieend auf ActionScript 2.0-Einstellungen. Der Klassenpfad auf Dokumentebene kann im Dialogfeld Einstellungen fr Verffentlichungen des Flash-Dokuments festgelegt werden (Datei > Einstellungen fr Verffentlichungen, whlen Sie die Registerkarte Flash und klicken Sie auf die Schaltflche Einstellungen).
H I NW E I S

Wenn Sie bei der Bearbeitung einer ActionScript-Datei oberhalb des Skriptfensters auf die Schaltflche Syntax berprfen klicken, sucht der Compiler nur im globalen Klassenpfad. Im Bearbeitungsmodus sind ActionScript-Dateien nicht mit FLA-Dateien verknpft und verfgen ber keinen eigenen Klassenpfad.

Globalen Klassenpfad verwenden Der globale Klassenpfad wird von allen Flash-Dokumenten genutzt. Sie knnen den globalen Klassenpfad im Dialogfeld Voreinstellungen ndern. Die Einstellung des Klassenpfads auf Dokumentebene lsst sich mit dem Dialogfeld Einstellungen fr Verffentlichungen fr die jeweilige FLA-Datei ndern. In beiden Fllen knnen Sie absolute Verzeichnispfade (wie C:/meine_Klassen) und relative Verzeichnispfade (wie ./my_classes oder .) hinzufgen. Die Reihenfolge beim Durchsuchen der Verzeichnisse folgt der Reihenfolge der Verzeichnisse im Dialogfeld. Der globale Klassenpfad enthlt standardmig einen absoluten Pfad und einen relativen Pfad. Im Dialogfeld Voreinstellungen enthlt der absolute Pfad die Angabe $(LocalData)/ Classes. Die Position des absoluten Pfads ist: Windows: Festplatte\Dokumente und Einstellungen\Benutzer\Lokale Einstellungen\Anwendungsdaten\Adobe\Adobe Flash CS3\Sprache\Configuration\Classes. Macintosh: Festplatte/Users/Benutzername/Library/Application Support/Adobe/Adobe Flash CS3/Sprache/Configuration/Classes.
H I NW E I S 224

Lschen Sie den absoluten globalen Klassenpfad nicht. Flash verwendet diesen Klassenpfad, um auf integrierte Klassen zuzugreifen. Wenn Sie diesen Klassenpfad versehentlich lschen, stellen Sie ihn wieder her, indem Sie $(LocalData)/Classes als neuen Klassenpfad hinzufgen.

Der relative Abschnitt des globalen Klassenpfads wird durch einen Punkt (.) gekennzeichnet und verweist auf das aktuelle Dokumentverzeichnis. Beachten Sie, dass relative Klassenpfade je nach Speicherort des Dokuments, das gerade kompiliert oder verffentlicht wird, auf verschiedene Verzeichnisse verweisen knnen. Mit den folgenden Schritten knnen Sie einen globalen Klassenpfad hinzufgen oder einen vorhandenen Klassenpfad ndern.
Klassen

So ndern Sie den globalen Klassenpfad:


1.

Whlen Sie Bearbeiten > Voreinstellungen (Windows) bzw. Flash > Voreinstellungen (Macintosh), um das Dialogfeld Voreinstellungen zu ffnen. Klicken Sie in der linken Spalte auf ActionScript, und dann auf die Schaltflche ActionScript 2.0-Einstellungen. Klicken Sie auf die Schaltflche Pfad ffnen, und wechseln Sie zu dem Verzeichnis, das Sie hinzufgen mchten. Wechseln Sie zu dem Pfad, den Sie hinzufgen mchten, und klicken Sie dann auf OK.

2.

3.

4.

So lschen Sie ein Verzeichnis aus dem Klassenpfad:


1. 2.

Whlen Sie den Pfad in der Liste Classpath aus. Klicken Sie auf die Schaltflche Ausgewhlten Pfad entfernen.
HINWEIS

Lschen Sie den absoluten globalen Klassenpfad nicht. Flash verwendet diesen Klassenpfad, um auf integrierte Klassen zuzugreifen. Falls Sie diesen Klassenpfad versehentlich lschen, stellen Sie ihn wieder her, indem Sie $(LocalData)/Classes als neuen Klassenpfad hinzufgen.

Weitere Informationen zum Importieren von Paketen finden Sie in Pakete verwenden auf Seite 210. Klassenpfad auf Dokumentebene verwenden Der Klassenpfad auf Dokumentebene gilt nur fr FLA-Dateien. Der Klassenpfad auf Dokumentebene wird im Dialogfeld Einstellungen fr Verffentlichungen fr eine bestimmte FLA-Datei festgelegt (Datei > Einstellungen fr Verffentlichungen, dann whlen Sie die Registerkarte Flash und klicken auf die Schaltflche ActionScript 2.0-Einstellungen). Der Klassenpfad auf Dokumentebene ist standardmig leer. Wenn Sie eine FLA-Datei erstellen und in einem Verzeichnis speichern, wird dieses Verzeichnis zum Klassenpfadverzeichnis. Wenn Sie Klassen erstellen, sollten Sie diese in einem Verzeichnis speichern, das Sie dann in den folgenden Situationen zur Liste der globalen Klassenpfadverzeichnisse hinzufgen:

Wenn es sich um eine Ansammlung von Dienstprogrammklassen handelt, die von allen Ihren Projekten verwendet werden Wenn Sie die Syntax des Codes in der externen ActionScript-Datei berprfen mchten (klicken Sie auf die Schaltflche Syntax berprfen)

Benutzerdefinierte Klassen in einer Anwendung einsetzen

225

Durch das Erstellen eines Verzeichnisses wird verhindert, dass benutzerdefinierte Klassen verloren gehen, falls Sie Flash zu einem spteren Zeitpunkt deinstallieren und dann neu installieren. Dies ist insbesondere dann wichtig, wenn das Standardverzeichnis fr globale Klassenpfade gelscht und berschrieben wird, denn in diesem Fall wrden alle Klassen, die in diesem Verzeichnis gespeichert sind, verloren gehen. Sie knnen z. B. fr Ihre benutzerdefinierten Klassen ein Verzeichnis wie das folgende erstellen:

Windows: Festplatte\Dokumente und Einstellungen\Benutzer\Benutzerdefinierte Klassen. Macintosh: Festplatte\Benutzer\Benutzer/Benutzerdefinierte Klassen.

Sie fgen diesen Pfad dann der Liste der globalen Klassenpfade hinzu (siehe Globalen Klassenpfad verwenden auf Seite 224). Wenn Flash einen Klassenverweis in einem FLA-Skript auflst, durchsucht es zunchst den fr diese FLA-Datei auf Dokumentebene angegebenen Klassenpfad. Wenn Flash die Klasse in diesem Klassenpfad nicht findet oder wenn der Klassenpfad leer ist, wird der globale Klassenpfad durchsucht. Wenn die Klasse auch im globalen Klassenpfad nicht gefunden wird, tritt ein Compiler-Fehler auf.
So ndern Sie den Klassenpfad auf Dokumentebene:
1.

Whlen Sie Datei > Einstellungen fr Verffentlichungen, um das Dialogfeld Einstellungen fr Verffentlichungen zu ffnen. Klicken Sie auf die Registerkarte Flash. Klicken Sie neben dem Popupmen ActionScript-Version auf die Schaltflche Einstellungen. Sie knnen den Dateipfad entweder manuell eingeben oder auf die Schaltflche Pfad ffnen klicken und zu dem Verzeichnis wechseln, das Sie dem Klassenpfad hinzufgen mchten.
H I N W E IS H I NW E I S

2. 3.

4.

Wenn Sie ein vorhandenes Klassenpfadverzeichnis bearbeiten mchten, whlen Sie den Pfad in der Klassenpfadliste aus, klicken Sie auf die Schaltflche Pfad ffnen, wechseln Sie zu dem Verzeichnis, das Sie hinzufgen mchten, und klicken Sie auf OK. Wenn Sie ein Verzeichnis aus dem Klassenpfad lschen mchten, whlen Sie den Pfad in der Klassenpfadliste aus und klicken dann auf die Schaltflche Ausgewhlten Pfad entfernen (-).

Weitere Informationen zu Paketen finden Sie in Pakete auf Seite 208.

226

Klassen

So lst der Compiler Klassenverweise auf:


Wenn Flash einen Klassenverweis in einem FLA-Skript auflst, durchsucht es zunchst den fr diese FLA-Datei auf Dokumentebene angegebenen Klassenpfad. Wird die Klasse in diesem Klassenpfad nicht gefunden oder ist der Klassenpfad leer, durchsucht Flash den globalen Klassenpfad. Wenn die Klasse auch im globalen Klassenpfad nicht gefunden wird, tritt ein Compiler-Fehler auf. Klicken Sie whrend der Bearbeitung einer ActionScript-Datei auf die Schaltflche Syntax berprfen, sucht der Compiler nur im globalen Klassenpfad. ActionScript-Dateien sind im Bearbeitungsmodus nicht mit FLA-Dateien verknpft und verfgen ber keinen eigenen Klassenpfad.

Klassendatei in Flash verwenden


Zum Erstellen einer Instanz einer ActionScript-Klasse rufen Sie die Konstruktorfunktion der Klasse mit dem Operator new auf. Die Konstruktorfunktion hat immer denselben Namen wie die zugehrige Klasse und gibt eine Instanz der Klasse zurck, die Sie in der Regel einer Variablen zuweisen. Wenn Sie beispielsweise die User-Klasse aus dem Abschnitt Benutzerdefinierte Klassendateien schreiben auf Seite 216 verwenden, schreiben Sie den folgenden Code, um ein neues User-Objekt zu erstellen:
var firstUser:User = new User();
H IN W E I S

In einigen Fllen mssen Sie keine Instanz einer Klasse erstellen, um ihre Eigenschaften und Methoden zu verwenden. Weitere Informationen zu (statischen) Klassenmitgliedern finden Sie in Statische Klassenmitglieder auf Seite 288 und Statische Methoden und Eigenschaften auf Seite 232.

Mithilfe des Punkt-Operators (.) knnen Sie auf den Wert einer Eigenschaft in einer Instanz zugreifen. Hierbei steht der Name der Instanz links und der Name der Eigenschaft rechts vom Punkt. In der folgenden Anweisung ist firstUser die Instanz und username die Eigenschaft:
firstUser.username

Sie knnen auch die integrierten oder bergeordneten Klassen der ActionScript-Sprache in einem Flash-Dokument verwenden. Mit dem folgenden Code wird ein neues Array-Objekt erstellt und seine Eigenschaft length angezeigt:
var myArray:Array = new Array("apples", "oranges", "bananas"); trace(myArray.length); // 3

Weitere Informationen zur Verwendung von benutzerdefinierten Klassen in Flash finden Sie in Beispiel: Benutzerdefinierte Klassendateien in Flash verwenden auf Seite 263. Weitere Informationen zur Konstruktorfunktion finden Sie in Konstruktorfunktion schreiben auf Seite 253.
Benutzerdefinierte Klassen in einer Anwendung einsetzen 227

Methoden und Eigenschaften einer Klassendatei verwenden


In der objektorientierten Programmierung kann es sich bei den Mitgliedern einer Klasse (Eigenschaften oder Methoden) um Instanzmitglieder oder Klassenmitglieder handeln. Instanzmitglieder werden fr jede Instanz der Klasse erstellt. Beim Initialisieren in der Klassendefinition werden die Instanzmitglieder als Prototyp der Klasse definiert. Im Gegensatz dazu werden Klassenmitglieder einmal pro Klasse erstellt. (Klassenmitglieder werden auch als statische Mitglieder bezeichnet.) Eigenschaften sind Attribute, die ein Objekt definieren. So ist zum Beispiel length eine Eigenschaft aller Arrays, mit der die Anzahl der Elemente im Array festgelegt wird. Methoden sind Funktionen, die Sie mit einer Klasse verknpfen. Weitere Informationen zu Funktionen und Methoden finden Sie in Kapitel 5, Funktionen und Methoden auf Seite 177. Im folgenden Beispiel wird gezeigt, wie Sie eine Methode in einer Klassendatei erstellen:
class Sample { public function myMethod():Void { trace("myMethod"); } }

Dann knnten Sie diese Methode in einem Dokument aufrufen. Um eine Instanzmethode aufzurufen oder auf eine Instanzeigenschaft zuzugreifen, mssen Sie auf eine Instanz der Klasse verweisen. Im folgenden Beispiel ruft picture01, eine Instanz der benutzerdefinierten Picture-Klasse aus der nchsten bung, die Methode showInfo() auf:
var img1:Picture = new Picture("http://www.helpexamples.com/flash/images/ image1.jpg"); // Ruft die showInfo()-Methode auf. img1.showInfo();

Im folgenden Beispiel wird gezeigt, wie Sie eine benutzerdefinierte Klasse namens Picture erstellen, die verschiedene Informationen ber ein Foto enthlt.

228

Klassen

So verwenden Sie die Picture- und PictureClass-Klassen in einer FLA-Datei:


1.

Whlen Sie Datei > Neu > ActionScript-Datei. Speichern Sie das Dokument unter dem Namen Picture.as und klicken Sie auf OK. Sie schreiben die benutzerdefinierte Picture-Klasse in diesem Dokument. Geben Sie den folgenden ActionScript-Code in das Skriptfenster ein:
/** Picture-Klasse Autor: Hans Mustermann Version: 0.53 gendert: 6/24/2005 Copyright: Adobe Systems Incorporated Die Picture-Klasse enthlt ein Bild und die zugehrige URL. */ class Picture { private var __infoObj:Object; public function Picture(src:String) { this.__infoObj = new Object(); this.__infoObj.src = src; } public function showInfo():Void { trace(this.toString()); } private function toString():String { return "[Picture src=" + this.__infoObj.src + "]"; } public function get src():String { return this.__infoObj.src; } public function set src(value:String):Void { this.__infoObj.src = value; } }

2.

3. 4.

Speichern Sie die ActionScript-Datei. Whlen Sie Datei > Neu und dann Flash-Dokument, um eine neue FLA-Datei zu erstellen. Speichern Sie das Dokument unter dem Namen picture_test.fla in dem Verzeichnis, in dem sich auch die Picture-Klassendatei befindet.

Benutzerdefinierte Klassen in einer Anwendung einsetzen

229

5.

Geben Sie in Bild 1 der Zeitleiste den folgenden ActionScript-Code ein:


var picture1:Picture = new Picture("http://www.helpexamples.com/flash/ images/image1.jpg"); picture1.showInfo(); this.createEmptyMovieClip("img_mc", 9); img_mc.loadMovie(picture1.src);

6. 7.

Speichern Sie das Flash-Dokument. Whlen Sie Steuerung > Film testen, um das Dokument zu testen. Im Bedienfeld Ausgabe wird der folgende Text angezeigt:
[Picture src=http://www.helpexamples.com/flash/images/image1.jpg]

Beispiele zur Erstellung eines dynamischen Mens mit XML-Daten und einer benutzerdefinierten Klassendatei finden Sie auf der Webseite mit Flash-Beispielen unter www.adobe.com/go/learn_fl_samples_de. Im Beispiel wird der ActionScript-Konstruktor XmlMenu() aufgerufen, dem zwei Parameter bergeben werden: der Pfad zur XMLMendatei und ein Verweis auf die aktuelle Zeitleiste. Laden Sie die komprimierte Beispieldatei herunter, dekomprimieren Sie sie, und wechseln Sie in den Ordner ActionScript2.0/XML_Menu, um auf die Beispiele zuzugreifen.

XmlMenu.as xmlmenu.fla

ffentliche, private und statische Methoden und Eigenschaften (Mitglieder)


Beim Schreiben von ActionScript-Klassendateien in einer externen Skriptdatei knnen Sie vier verschiedene Arten von Methoden und Eigenschaften erstellen. ffentliche Methoden und Eigenschaften, private Methoden und Eigenschaften, ffentliche statische Methoden und Eigenschaften und private statische Methoden und Eigenschaften. Diese Methoden und Eigenschaften definieren, wie Flash auf Variablen zugreifen kann. Auerdem knnen Sie mit den Methoden und Eigenschaften angeben, welche Teile Ihres Codes auf bestimmte Methoden und Eigenschaften zugreifen knnen. Bei der Erstellung von klassenbasierten Anwendungen muss unabhngig von der Gre der Anwendung stets bercksichtigt werden, ob die Methoden und Eigenschaften ffentlich oder privat sein sollen. Dadurch wird ein Hchstma an Sicherheit fr Ihren Code gewhrleistet. Wenn Sie beispielsweise eine User-Klasse erstellen, mchten Sie mglicherweise verhindern, dass Benutzer der Klasse die Benutzer-IDs ndern. In diesem Fall knnen Sie die Klasseneigenschaft (auch als Instanzmitglied bezeichnet) auf privat einstellen, so dass nur Code innerhalb der Klasse oder ihrer Unterklassen auf die Eigenschaft zugreifen kann. Dies bewirkt, dass die Benutzer die Eigenschaft nicht direkt ndern knnen.

230

Klassen

ffentliche Methoden und Eigenschaften Das Schlsselwort public gibt an, dass eine Variable oder Funktion fr jedes aufrufende Objekt verfgbar ist. Da Variablen und Funktionen standardmig ffentlich (public) sind, wird das Schlsselwort this hauptschlich aus Stilgrnden verwendet und um die Lesbarkeit zu verbessern. So wird angegeben, dass die Variable in aktuellen Bereich existiert. Sie knnen das Schlsselwort this zum Beispiel aus Konsistenzgrnden in einem Codeblock verwenden, der auch private und statische Variablen enthlt. Das Schlsselwort this kann mit dem Schlsselwort public oder private verwendet werden. Die folgende Sample-Klasse enthlt bereits eine ffentliche Methode namens myMethod():
class Sample { private var ID:Number; public function myMethod():Void { this.ID = 15; trace(this.ID); // 15 trace("myMethod"); } }

Wenn Sie eine ffentliche Eigenschaft (public) hinzufgen mchten, verwenden Sie das Wort public anstelle von private, wie im folgenden Beispielcode gezeigt:
class Sample { private var ID:Number; public var email:String; public function myMethod():Void { trace("myMethod"); } }

Da die Eigenschaft email ffentlich ist, knnen Sie sie in der Sample-Klasse oder direkt in einer FLA-Datei ndern. Private Methoden und Eigenschaften Das Schlsselwort private gibt an, dass eine Variable oder Funktion nur fr die Klasse verfgbar ist, die sie deklariert oder definiert, oder fr eine Unterklasse dieser Klasse. Standardmig sind Variablen und Funktionen ffentlich und fr jedes aufrufende Objekt verfgbar. Mit dem Schlsselwort this knnen Sie den Zugriff auf eine Variable oder eine Funktion einschrnken, wie im folgenden Beispiel gezeigt:
class Sample { private var ID:Number; public function myMethod():Void { this.ID = 15; trace(this.ID); // 15 trace("myMethod"); } }
Benutzerdefinierte Klassen in einer Anwendung einsetzen 231

Wenn Sie der Klasse im vorherigen Beispiel eine private Eigenschaft hinzufgen mchten, geben Sie einfach das Schlsselwort private vor dem Schlsselwort var an. Wenn Sie versuchen, auerhalb der Sample-Klasse auf die private ID-Eigenschaft zuzugreifen, wird ein Compiler-Fehler ausgelst, und im Bedienfeld Ausgabe wird eine Meldung eingeblendet. Die Meldung gibt an, dass das Mitglied privat ist und der Zugriff darauf nicht mglich ist. Statische Methoden und Eigenschaften Das Schlsselwort static gibt an, dass eine Variable oder Funktion nur einmal pro Klasse erstellt wird, statt in jedem Objekt, das auf dieser Klasse basiert. Sie knnen auf ein statisches Klassenmitglied zugreifen, ohne eine Instanz der Klasse zu erstellen. Statische Methoden und Eigenschaften knnen im ffentlichen oder privaten Gltigkeitsbereich definiert werden. Statische Mitglieder, auch Klassenmitglieder genannt, werden nicht einer Instanz der Klasse, sondern der Klasse selbst zugewiesen. Um eine Klassenmethode aufzurufen oder auf eine Klasseneigenschaft zuzugreifen, mssen Sie nicht auf eine bestimmte Instanz der Klasse verweisen, sondern wie im folgenden Beispielcode auf den Klassennamen selbst:
trace(Math.PI / 8); // 0.392699081698724

Wenn Sie diese Codezeile in das Skriptfenster im Bedienfeld Aktionen eingeben, wird ein Ergebnis im Bedienfeld Ausgabe angezeigt. Im vorherigen Beispiel der Sample-Klasse knnten Sie eine statische Variable erstellen, um zu protokollieren, wie viele Instanzen der Klasse erstellt wurden, wie im folgenden Code gezeigt:
class Sample { public static var count:Number = 0; private var ID:Number; public var email:String; public function Sample() { Sample.count++; trace("count updated: " + Sample.count); } public function myMethod():Void { trace("myMethod"); } }

Jedes Mal, wenn Sie eine neue Instanz der Sample-Klasse erstellen, bestimmt die Konstruktormethode die Gesamtanzahl der Sample-Klasseninstanzen, die bisher definiert wurden.

232

Klassen

Einige bergeordnete ActionScript-Klassen verfgen ber Klassenmitglieder (oder statische Mitglieder), wie Sie bereits beim Aufruf der Eigenschaft Math.PI gesehen haben. Klassenmitglieder (Eigenschaften und Methoden) werden nicht von der Instanz der Klasse, sondern von dem eigentlichen Klassennamen aufgerufen. Sie erstellen also keine Instanz der Klasse, um diese Eigenschaften und Methoden zu verwenden. Die bergeordnete Math-Klasse besteht beispielsweise nur aus statischen Methoden und Eigenschaften. Um eine ihrer Methoden aufzurufen, mssen Sie keine Instanz der Math-Klasse erstellen, sondern einfach die Methoden der Math-Klasse selbst aufrufen. Mit dem folgenden Code wird die Methode sqrt() der Math-Klasse aufgerufen:
var squareRoot:Number = Math.sqrt(4); trace(squareRoot); // 2

Mit dem folgenden Code wird die Methode max() der Math-Klasse zur Bestimmung der greren von zwei Zahlen aufgerufen:
var largerNumber:Number = Math.max(10, 20); trace(largerNumber); // 20

Weitere Informationen zum Erstellen von Klassenmitgliedern finden Sie in Klassenmitglieder auf Seite 233 und Klassenmitglieder verwenden auf Seite 237. Beispiele zur Erstellung eines dynamischen Mens mit XML-Daten und einer benutzerdefinierten Klassendatei finden Sie auf der Webseite mit Flash-Beispielen unter www.adobe.com/go/learn_fl_samples_de. Im Beispiel wird der ActionScript-Konstruktor XmlMenu() aufgerufen, dem zwei Parameter bergeben werden: der Pfad zur XMLMendatei und ein Verweis auf die aktuelle Zeitleiste. Laden Sie die komprimierte Beispieldatei herunter, dekomprimieren Sie sie, und wechseln Sie in den Ordner ActionScript2.0/XML_Menu, um auf die Beispiele zuzugreifen.

XmlMenu.as xmlmenu.fla

Klassenmitglieder
Die meisten bisher in diesem Kapitel behandelten Mitglieder (Methoden und Eigenschaften) gehren zum Typ der Instanzmitglieder. Fr jedes Instanzmitglied befindet sich eine einmalige Kopie dieses Mitglieds in jeder Instanz der Klasse. Die Mitgliedsvariable email der Sample-Klasse hat beispielsweise ein Instanzmitglied, da alle Personen unterschiedliche E-Mail-Adressen haben.

Benutzerdefinierte Klassen in einer Anwendung einsetzen

233

Ein weiterer Mitgliedstyp ist das Klassenmitglied. Es gibt nur eine Kopie des Klassenmitglieds, die fr die gesamte Klasse verwendet wird. Jede Variable, die innerhalb einer Klasse, jedoch auerhalb einer Funktion deklariert wird, ist eine Eigenschaft der Klasse. Im folgenden Beispiel hat die Person-Klasse die beiden Eigenschaften age und username vom Typ Number bzw. String.
class Person { public var age:Number; public var username:String; }

Eine in einer Klasse deklarierte Funktion wird als Methode der Klasse betrachtet. Im Beispiel der Person-Klasse knnen Sie eine Methode namens getInfo() erstellen:
class Person { public var age:Number; public var username:String; public function getInfo():String { // Definition der Methode getInfo() } }

Im vorigen Codebeispiel sind die Methode getInfo() der Person-Klasse sowie die Eigenschaften age und username ffentliche Instanzmitglieder. Die Eigenschaft age wre kein geeignetes Klassenmitglied, da die Personen nicht alle gleich alt sind. Es sollten also nur Eigenschaften und Methoden, die allen Angehrigen der Klasse gemein sind, als Klassenmitglied definiert werden. Angenommen, Sie mchten jeder Klasse die Variable species zuweisen, die den lateinischen Name der Art angibt, die die Klasse reprsentiert. Fr jedes Person-Objekt lautet die Art Homo sapiens. Es wre ein unntiger Aufwand, fr jede Instanz der Klasse eine Kopie des Strings "Homo sapiens" zu speichern. Dieses Mitglied sollte also ein Klassenmitglied sein. Klassenmitglieder werden mit dem Schlsselwort static deklariert. Sie knnen das Klassenmitglied species z. B. mit dem folgenden Code deklarieren:
class Person { public static var species:String = "Homo sapiens"; // ... }

Sie knnen die Methoden einer Klasse wie im folgenden Beispiel auch als statisch deklarieren:
public static function getSpecies():String { return Person.species; }

234

Klassen

Statische Methoden knnen nur auf statische Eigenschaften, nicht jedoch auf Instanzeigenschaften zugreifen. Der folgende Code fhrt zu einem Compiler-Fehler, da die Klassenmethode getAge() auf die Instanzvariable age verweist.
class Person { public var age:Number = 15; // ... public static function getAge():Number { return age; /* **Fehler**: Auf Instanzvariablen kann in statischen Funktionen nicht zugegriffen werden. */ } }

Um dieses Problem zu lsen, knnen Sie entweder aus der Methode eine Instanzmethode oder aus der Variablen eine Klassenvariable machen. Weitere Informationen zu Klassenmitgliedern (auch als statische Eigenschaften bezeichnet) finden Sie in Statische Methoden und Eigenschaften auf Seite 232. Beispiele zur Erstellung eines dynamischen Mens mit XML-Daten und einer benutzerdefinierten Klassendatei finden Sie auf der Webseite mit Flash-Beispielen unter www.adobe.com/go/learn_fl_samples_de. Im Beispiel wird der ActionScript-Konstruktor XmlMenu() aufgerufen, dem zwei Parameter bergeben werden: der Pfad zur XML-Mendatei und ein Verweis auf die aktuelle Zeitleiste. Laden Sie die komprimierte Beispieldatei herunter, dekomprimieren Sie sie, und wechseln Sie in den Ordner ActionScript2.0/XML_Menu, um auf die Beispiele zuzugreifen.

XmlMenu.as xmlmenu.fla

Singleton-Entwurfsmuster verwenden
Klassenmitglieder werden hufig mit dem Singleton-Entwurfsmuster verwendet. Ein Entwurfsmuster definiert eine formale Strukturierungsweise fr Ihren Code. Meist dienen Entwurfsmuster als Lsung fr ein hufiges Programmierungsproblem. In der Branche haben sich zahlreiche Entwurfsmuster durchgesetzt, wie beispielsweise Singleton. Dieses Entwurfsmuster stellt sicher, dass eine Klasse nur ber eine Instanz verfgt, und ermglicht den globalen Zugriff auf die Instanz. Ausfhrliche Informationen zum Singleton-Entwurfsmuster finden Sie unter www.adobe.com/devnet/coldfusion/articles/design_patterns.html.

Benutzerdefinierte Klassen in einer Anwendung einsetzen

235

In vielen Situationen bentigen Sie genau ein Objekt eines bestimmten Typs in einem System. Bei einem Schachspiel gibt es z. B. nur ein Schachbrett, und jedes Land hat nur eine Hauptstadt. Obwohl nur ein Objekt vorhanden ist, empfiehlt es sich, die Funktionalitt dieses Objekts in einer Klasse einzuschlieen. Mglicherweise mssen Sie die Instanz des Objekts jedoch verwalten und darauf zugreifen. Dies kann zwar ber eine globale Variable geschehen, doch sind globale Variablen fr die meisten Projekte nicht geeignet. Es ist daher besser, die einzelne Instanz des Objekts ber Klassenmitglieder durch die Klasse selbst verwalten zu lassen: Das folgende Beispiel zeigt eine typische Anwendung fr ein SingletonEntwurfsmuster, bei dem die Singleton-Instanz nur einmal erstellt wird.
So verwenden Sie das Singleton-Entwurfsmuster:
1.

Whlen Sie Datei > Neu und dann ActionScript-Datei. Speichern Sie das Dokument unter dem Namen Singleton.as. Geben Sie den folgenden ActionScript-Code in das Skriptfenster ein:
/** Singleton-Klasse Autor: Hans Mustermann Version: 0.53 gendert: 6/24/2008 Copyright: Adobe Systems Incorporated */ class Singleton { private static var instance:Singleton = null; public function trackChanges():Void { trace("tracking changes."); } public static function getInstance():Singleton { if (Singleton.instance == null) { trace("creating new Singleton."); Singleton.instance = new Singleton(); } return Singleton.instance; } }

2.

3. 4.

Speichern Sie das Dokument Singleton.as. Whlen Sie Datei > Neu, dann whlen Sie Flash-Dokument, um eine neue FLA-Datei zu erstellen. Speichern Sie sie unter dem Namen singleton_test.fla in dem Verzeichnis, in dem sich auch die Singleton-Klassendatei befindet.

236

Klassen

5.

Geben Sie in Bild 1 der Zeitleiste den folgenden ActionScript-Code ein:


Singleton.getInstance().trackChanges(); // nderungen verfolgen. var s:Singleton = Singleton.getInstance(); // nderungen verfolgen. s.trackChanges();

6. 7.

Speichern Sie das Flash-Dokument. Whlen Sie Steuerung > Film testen, um das Dokument zu testen.

Das Singleton-Objekt wird erst dann erstellt, wenn es bentigt wird also wenn ein anderer Code es durch Aufruf der getInstance()-Methode anfordert. Dies wird als Lazy Creation bezeichnet und kann in vielen Fllen die Effizienz des Codes verbessern. Denken Sie daran, nicht zu wenige oder zu viele Klassendateien fr Ihre Anwendung zu verwenden, da dies zu schlecht strukturierten Klassendateien fhren kann, die sich sowohl auf die Leistung der Anwendung als auch Ihre Arbeitsablufe nachteilig auswirken. Sie sollten immer versuchen, Klassendateien zu verwenden anstelle Code an anderen Orten abzulegen (z. B. als Zeitleisten). Andererseits sollten Sie auch vermeiden, viele Klassen mit nur geringem Funktionsumfang oder nur wenige Klassen zu erstellen, die einen groen Funktionsumfang verwalten. Beide Szenarien zeugen von schlechter Strukturierung.

Klassenmitglieder verwenden
Klassenmitglieder (statische Mitglieder) haben u. a. die Aufgabe, Statusinformationen ber eine Klasse und ihre Instanzen zu verwalten. Angenommen, Sie mchten die Anzahl der Instanzen verfolgen, die von einer bestimmten Klasse erstellt wurden. Dies lsst sich problemlos mit einer Klasseneigenschaft erreichen, deren Wert immer dann erhht wird, wenn eine neue Instanz erstellt wird. Im folgenden Beispiel erstellen Sie die Widget-Klasse, die einen einzelnen statischen Instanzzhler mit dem Namen widgetCount definiert. Jedes Mal, wenn eine neue Instanz der Klasse erstellt wird, wird der Wert von widgetCount um 1 erhht, und der aktuelle Wert von widgetCount wird im Bedienfeld Ausgabe angezeigt.

Benutzerdefinierte Klassen in einer Anwendung einsetzen

237

So erstellen Sie Instanzzhler mit einer Klassenvariablen:


1. 2.

Whlen Sie Datei > Neu und dann ActionScript-Datei, und klicken Sie auf OK. Geben Sie den folgenden Code in das Skriptfenster ein:
class Widget { // Klassenvariable initialisieren public static var widgetCount:Number = 0; public function Widget() { Widget.widgetCount++; trace("Creating widget #" + Widget.widgetCount); } }

Die Variable widgetCount wird als statisch deklariert und daher nur einmalig auf 0 initialisiert. Jedes Mal, wenn die Konstruktoranweisung der Widget-Klasse aufgerufen wird, addiert sie 1 zu widgetCount und zeigt dann die Nummer der aktuell erstellten Instanz an.
3. 4.

Speichern Sie die Datei unter Widget.as. Whlen Sie Datei > Neu und dann Flash-Dokument, um eine neue FLA-Datei zu erstellen, und speichern Sie sie unter dem Namen widget_test.fla in dem Verzeichnis, in dem sich auch die Datei Widget.as befindet. Geben Sie in der Datei widget_test.fla den folgenden Code in Bild 1 der Zeitleiste ein:
// Bevor Sie Instanzen der Klasse erstellen, // Widget.widgetCount ist Null (0). trace("Widget count at start: " + Widget.widgetCount); // 0 var widget1:Widget = new Widget(); // 1 var widget2:Widget = new Widget(); // 2 var widget3:Widget = new Widget(); // 3 trace("Widget count at end: " + Widget.widgetCount); // 3

5.

6. 7.

Speichern Sie die genderte Datei widget_test.fla. Whlen Sie Steuerung > Film testen, um die SWF-Datei zu testen. Flash zeigt im Bedienfeld Ausgabe folgende Informationen an:
Widget count at Creating widget Creating widget Creating widget Widget count at start: 0 # 1 # 2 # 3 end: 3

238

Klassen

get-/set-Methoden
Die get-/set-Methoden sind Zugriffsmethoden und bilden deshalb in erster Linie eine ffentliche Schnittstelle zum ndern privater Klassenmitglieder. Sie verwenden die get-/setMethoden zum Definieren einer Eigenschaft. Obwohl get-/set-Methoden innerhalb einer Klasse als Methoden definiert werden, erfolgt der Zugriff von auerhalb der Klasse und in Form von Eigenschaften. Die Eigenschaften auerhalb der Klasse knnen einen anderen Namen haben als die Eigenschaften in der Klasse. Die get-/set-Methoden bieten verschiedene Vorteile. Beispielsweise knnen Sie mit diesen Methoden Mitglieder erstellen, die ber erweiterte Funktionalitt verfgen und auf die Sie wie auf Eigenschaften zugreifen knnen. Auerdem knnen Sie mit get-/set-Methoden Eigenschaften erstellen, fr die nur Lesezugriff oder nur Schreibzugriff gilt. Obwohl die get-/set-Methoden sehr ntzlich sein knnen, sollten Sie nicht zu viele dieser Methoden verwenden, da sie unter anderem in bestimmten Situationen die Verwaltung des Codes erschweren. Die get-/set-Methoden ermglichen auch den Zugriff auf Ihre Klassenimplementierung, wie ffentliche Mitglieder. In der objektorientierten Programmierung wird der direkte Zugriff auf die Eigenschaften einer Klasse nicht empfohlen. Beim Schreiben von Klassen sollten Sie stets mglichst viele Instanzvariablen als privat definieren und entsprechende get-/set-Methoden hinzufgen. Grund hierfr ist, dass die Benutzer in vielen Fllen nicht die Mglichkeit haben sollen, bestimmte Variablen innerhalb der Klassen zu ndern. Wenn Sie beispielsweise eine private statische Methode definiert haben, die die erstellten Instanzen einer bestimmten Klasse protokolliert, drfen Benutzer diesen Zhler nicht mithilfe von Code ndern, sondern die Variable soll bei jedem Aufruf nur von der Konstruktoranweisung inkrementiert werden. In einem solchen Fall knnen Sie eine private Instanzvariable erstellen und fr die Zhlervariable nur eine get-Methode zulassen. Dies bedeutet, dass die Benutzer zwar mit der get-Methode den aktuellen Wert abrufen knnen, aber keine set-Methode verwenden knnen, um neue Werte festzulegen. Die Erstellung einer get-Methode ohne set-Methode ist eine einfache Mglichkeit, bestimmte Variablen in der Klasse als schreibgeschtzt zu definieren.

Benutzerdefinierte Klassen in einer Anwendung einsetzen

239

get-/set-Methoden verwenden
Fr get-/set-Methoden gilt folgende Syntax:

Eine get-Methode hat keine Parameter und gibt immer einen Wert zurck. Eine set-Methode hat immer einen Parameter und gibt nie einen Wert zurck.

Klassen definieren normalerweise get-Methoden, die Lesezugriff auf eine bestimmte Eigenschaft gestatten, und set-Methoden, die Schreibzugriff gestatten. Als Beispiel soll eine Klasse mit der Eigenschaft userName dienen:
private var userName:String;

Die Instanzen der Klasse knnen nicht direkt auf diese Eigenschaft (wie user.userName = "Bernd") zugreifen. Die Klasse erfordert stattdessen die beiden Methoden getUserName() und setUserName(), die wie folgt implementiert werden knnen:
So verwenden Sie die get-/set-Methoden:
1. 2.

Whlen Sie Datei > Neu und dann ActionScript-Datei, und klicken Sie auf OK. Geben Sie den folgenden Code in das Skriptfenster ein:
class Login { private var __username:String; public function Login(username:String) { this.__username = username; } public function getUserName():String { return this.__username; } public function setUserName(value:String):Void { this.__username = value; } }

3.

Speichern Sie das ActionScript-Dokument unter dem Namen Login.as.


getUserName() gibt also den aktuellen Wert von userName zurck, und setUserName() setzt den Wert von userName auf den an die Methode bergebenen String-Parameter.

4.

Whlen Sie Datei > Neu und dann Flash-Dokument, um eine neue FLA-Datei zu erstellen, und speichern Sie sie unter dem Namen login_test.fla in dem Verzeichnis, in dem sich auch die Datei Login.as befindet.

240

Klassen

5.

Fgen Sie dem ersten Bild der Hauptzeitleiste den folgenden ActionScript-Code hinzu:
var user:Login = new Login("RickyM"); // Methode getUserName() aufrufen var userName:String = user.getUserName(); trace(userName); // RickyM // setUserName()-Methode aufrufen user.setUserName("EnriqueI"); trace(user.getUserName()); // EnriqueI

6.

Whlen Sie Steuerung > Film testen, um die SWF-Datei zu testen. Flash zeigt im Bedienfeld Ausgabe folgende Informationen an:
RickyM EnriqueI

Wenn Sie jedoch eine krzere Syntax verwenden mchten, sollten Sie mit den impliziten get-/set-Methoden arbeiten. Mit impliziten get-/set-Methoden knnen Sie auf Klasseneigenschaften direkt zugreifen und trotzdem die Regeln der objektorientierten Programmierung bercksichtigen. Sie knnen diese Methoden mit den Methodenattributen get und set definieren. Erstellen Sie Methoden, die den Wert einer Eigenschaft abrufen oder festlegen, und setzen Sie wie im folgenden Beispiel vor den Methodennamen das Schlsselwort get bzw. set.
H I N WE I S

Implizite get-/set-Methoden sind syntaktische Kurzelemente fr die Object.addProperty()-Methode in ActionScript 1.0.

So verwenden Sie die impliziten get-/set-Methoden:


1. 2.

Whlen Sie Datei > Neu und dann ActionScript-Datei, und klicken Sie auf OK. Geben Sie den folgenden Code in das Skriptfenster ein:
class Login2 { private var __username:String; public function Login2(username:String) { this.__username = username; } public function get userName():String { return this.__username; } public function set userName(value:String):Void { this.__username = value; } }

Benutzerdefinierte Klassen in einer Anwendung einsetzen

241

3.

Speichern Sie das ActionScript-Dokument unter dem Namen Login2.as. Beachten Sie, dass eine get-Methode keine Parameter hat. Einer set-Methode muss genau ein erforderlicher Parameter bergeben werden. Eine set-Methode kann im gleichen Gltigkeitsbereich denselben Namen wie eine get-Methode haben. Die get-/set-Methoden drfen nicht dieselben Namen wie andere Eigenschaften haben. Im letzten Beispiel haben Sie get-/set-Methoden namens userName definiert. Hier wre es nicht mglich, auch eine Eigenschaft mit dem Namen userName in derselben Klasse zu haben.

4.

Whlen Sie Datei > Neu und dann Flash-Dokument, um eine neue FLA-Datei zu erstellen, und speichern Sie sie unter dem Namen login2_test.fla in dem Verzeichnis, in dem sich auch die Datei Login2.as befindet. Fgen Sie Bild 1 der Hauptzeitleiste den folgenden ActionScript-Code hinzu:
var user:Login2 = new Login2("RickyM"); // "get"-Methode aufrufen var userNameStr:String = user.userName; trace(userNameStr); // RickyM // "set"-Methode aufrufen user.userName = "EnriqueI"; trace(user.userName); // EnriqueI

5.

Im Gegensatz zu gewhnlichen Methoden werden get-/set-Methoden ohne runde Klammern oder Argumente aufgerufen. Sie rufen die get- und set-Methoden wie eine Eigenschaft ber den gleichen Namen auf.
6.

Speichern Sie das Flash-Dokument, und whlen Sie Steuerung > Film testen, um die Datei zu testen. Flash zeigt im Bedienfeld Ausgabe folgende Informationen an:
RickyM EnriqueI
H IN W E I S

Die get-/set-Methodenattribute knnen nicht in SchnittstellenMethodendeklarationen verwendet werden.

242

Klassen

Dynamische Klassen
Das Hinzufgen des Schlsselworts dynamic zu einer Klassendefinition legt fest, dass die auf der angegebenen Klasse basierenden Objekte zur Laufzeit dynamische Eigenschaften hinzufgen und darauf zugreifen knnen. Sie sollten dynamische Klassen nur dann erstellen, wenn diese Funktionalitt konkret bentigt wird. Typprfungen sind fr dynamische Klassen weniger strikt als fr nicht dynamische Klassen, da Mitglieder, auf die innerhalb der Klassendefinition und in Klasseninstanzen zugegriffen wird, nicht mit den Klassen in der Klassenebene verglichen werden. Bei Klassenmitgliedsfunktionen knnen jedoch immer noch Typberprfungen nach Rckgabetypen und Parametertypen durchgefhrt werden. Weitere Informationen zum Erstellen von dynamischen Klassen finden Sie in Dynamische Klassen erstellen auf Seite 243.

Dynamische Klassen erstellen


Standardmig haben Klassen feste Eigenschaften und Methoden. Instanzen einer Klasse knnen also keine Eigenschaften und Methoden erstellen oder aufrufen, die nicht ursprnglich von der Klasse deklariert oder definiert wurden. Als Beispiel soll die Person-Klasse dienen, die die beiden Eigenschaften userName und age definiert.
So erstellen Sie eine nicht dynamische Klasse:
1. 2.

Whlen Sie Datei > Neu und dann ActionScript-Datei, und klicken Sie auf OK. Geben Sie den folgenden ActionScript-Code in das Skriptfenster ein:
class Person { public var userName:String; public var age:Number; }

Wenn Sie in einem anderen Skript eine Instanz der Person-Klasse erstellen und versuchen, auf eine nicht vorhandene Eigenschaft der Klasse zuzugreifen, tritt ein Compiler-Fehler auf.
3. 4.

Speichern Sie die Datei unter dem Namen Person.as auf Ihrer Festplatte. Whlen Sie Datei > Neu und dann Flash-Dokument, um eine neue FLA-Datei zu erstellen. Klicken Sie dann auf OK. Whlen Sie Datei > Speichern unter, geben Sie der Datei den Namen person_test.fla, und speichern Sie sie im gleichen Verzeichnis wie die bereits erstellte Person-Klasse.

5.

Benutzerdefinierte Klassen in einer Anwendung einsetzen

243

6.

Fgen Sie den folgenden Code hinzu, um eine neue Instanz der Person-Klasse zu erstellen (firstPerson). Versuchen Sie dann, der Eigenschaft hairColor einen Wert zuzuweisen (diese Eigenschaft ist nicht in der Person-Klasse vorhanden):
var firstPerson:Person = new Person(); firstPerson.hairColor = "blue"; // Fehler. Keine Eigenschaft mit dem Namen 'hairColor' vorhanden.

7. 8.

Speichern Sie das Flash-Dokument. Whlen Sie Steuerung > Film testen, um den Code zu testen. Dieser Code verursacht einen Compiler-Fehler, weil die Person-Klasse keine Eigenschaft mit dem Namen hairColor deklariert. In den meisten Fllen soll genau das passieren. Compiler-Fehler mgen zwar wenig wnschenswert erscheinen, doch knnen sie fr Programmierer uerst hilfreich sein, da aussagekrftige Fehlermeldungen schon zu einem frhen Zeitpunkt der Codeerstellung auf Fehler hinweisen und somit letztlich zu einem fehlerfreien Code beitragen.

In manchen Fllen mchten Sie jedoch vielleicht zur Laufzeit einer Klasse Eigenschaften oder Methoden hinzufgen oder auf Eigenschaften oder Methoden zugreifen, die in der ursprnglichen Klasse nicht definiert sind. Dies knnen Sie mit dem Klassenmodifizierer dynamic erreichen.
So erstellen Sie eine dynamische Klasse:
1. 2.

Whlen Sie Datei > Neu und dann ActionScript-Datei, und klicken Sie auf OK. Whlen Sie Datei > Speichern unter, und nennen Sie die Datei Person2.as. Speichern Sie die Datei auf Ihrer Festplatte. Geben Sie den folgenden Code in das Skriptfenster ein:
dynamic class Person2 { public var userName:String; public var age:Number; }

3.

Mit diesem ActionScript-Code wird der Person-Klasse aus dem letzten Beispiel das Schlsselwort dynamic hinzugefgt. Instanzen der Person2-Klasse knnen Eigenschaften und Methoden, die nicht in dieser Klasse definiert sind, hinzufgen und aufrufen.
4. 5.

Speichern Sie die genderte ActionScript-Datei. Whlen Sie Datei > Neu und dann Flash-Dokument, um eine neue FLA-Datei zu erstellen. Klicken Sie dann auf OK. Whlen Sie Datei > Speichern unter, und nennen Sie die neue Datei person2_test.fla. Speichern Sie die Datei im selben Verzeichnis wie Person2.as.

6.

244

Klassen

7.

Geben Sie den folgenden Code ein, um eine neue Instanz der Person2-Klasse zu erstellen (firstPerson). Versuchen Sie dann, der Eigenschaft hairColor einen Wert zuzuweisen (diese Eigenschaft ist nicht in der Person2-Klasse vorhanden):
var firstPerson:Person2 = new Person2(); firstPerson.hairColor = "blue"; trace(firstPerson.hairColor); // blau

8. 9.

Speichern Sie die genderte Datei person2_test.fla. Whlen Sie Steuerung > Film testen, um den Code zu testen. Da die benutzerdefinierte Flash-Klasse dynamisch ist, knnen Sie ihr zur Laufzeit Eigenschaften und Methoden hinzufgen (bei der Wiedergabe der SWF-Datei). Wenn Sie den Code testen, sollte der Text blau im Bedienfeld Ausgabe angezeigt werden.

Bei der Entwicklung von Anwendungen sollten Sie Klassen nur dann als dynamisch definieren, wenn dies unbedingt erforderlich ist. Ein Grund hierfr ist, dass Typberprfungen fr dynamische Klassen weniger strikt sind als fr nicht dynamische Klassen, da Mitglieder, auf die innerhalb der Klassendefinition und in Klasseninstanzen zugegriffen wird, nicht mit den Klassen in der Klassenebene verglichen werden. Bei Klassenmitgliedsfunktionen knnen jedoch immer noch Typberprfungen nach Rckgabetypen und Parametertypen durchgefhrt werden. Unterklassen von dynamischen Klassen sind mit einer Ausnahme ebenfalls dynamisch. Die Unterklassen der MovieClip-Klasse sind standardmig nicht dynamisch, obwohl die MovieClip-Klasse selbst dynamisch ist. Diese Implementierung gibt Ihnen mehr Kontrolle ber die Unterklassen der MovieClip-Klasse, da Sie selbst whlen knnen, ob die Unterklassen dynamisch sein sollen oder nicht:
class A dynamic class C class D dynamic extends class B extends extends class E MovieClip {} extends A {} B {} A {} extends MovieClip{} // // // // // A B C D E ist ist ist ist ist nicht dynamisch dynamisch dynamisch nicht dynamisch dynamisch

Einzelheiten zu Unterklassen finden Sie in Kapitel 7, Vererbung auf Seite 293.

Benutzerdefinierte Klassen in einer Anwendung einsetzen

245

Kapselung verwenden
In eleganten objektorientierten Entwrfen werden Objekte als Blackbox dargestellt, die Funktionen enthalten oder einkapseln. Ein Programmierer sollte in der Lage sein, mit einem Objekt zu interagieren, dessen Eigenschaften, Methoden und Ereignisse (die Programmieroberflche) er kennt, ohne die Details der Implementierung zu kennen. Mit diesem Ansatz knnen sich Programmierer auf einer hheren Abstraktionsebene bewegen und erhalten einen Rahmen, der sie bei der Erstellung komplexer Systeme untersttzt. Aufgrund der Kapselung umfasst ActionScript 2.0 zum Beispiel eine Steuerung des Mitgliedzugriffs. Einzelheiten der Implementierung knnen so privat und unsichtbar fr den Code auerhalb eines Objekts erstellt werden. Die Interaktion des Codes auerhalb des Objekts muss mit der Programmierungsoberflche des Objekts erfolgen, nicht mit den Implementierungsdetails. Dieser Ansatz bietet einige wichtige Vorteile. Solange sich die Programmierungsoberflche nicht ndert, kann der Ersteller eines Objekts beispielsweise die Implementierung des Objekts ndern, ohne dass nderungen am Code auerhalb des Objekts notwendig werden. Bei der Kapselung in Flash knnen Sie beispielsweise alle Mitglieds- und Klassenvariablen als privat definieren, so dass die Benutzer, die die Klassen implementieren, mithilfe von get-/setMethoden auf diese Variablen zugreifen mssen. Die Kapselung bietet den folgenden Vorteil: Wenn Sie zu einem spteren Zeitpunkt die Struktur der Variablen ndern mssen, muss nur das Verhalten der get-/set-Methoden gendert werden. Es ist also nicht erforderlich, dass alle Entwickler das Verfahren zum Zugriff auf die Klassenvariablen ndern. Im folgenden Code wird gezeigt, wie Sie die Person-Klasse der vorherigen Beispiele ndern, ihre Instanzmitglieder als privat definieren und dann get-/set-Methoden fr die privaten Instanzmitglieder festlegen:
class Person { private var __userName:String; private var __age:Number; public function get userName():String { return this.__userName; } public function set userName(value:String):Void { this.__userName = value; } public function get age():Number { return this.__age; } public function set age(value:Number):Void { this.__age = value; } }

246

Klassen

this-Schlsselwort in Klassen verwenden


Verwenden Sie in Ihren Klassen das this-Schlsselwort als Prfix fr Methoden und Mitgliedsvariablen. Obwohl das this-Schlsselwort nicht unbedingt erforderlich ist, lsst sich damit einfach erkennen, ob eine Eigenschaft oder Methode zu einer Klasse gehrt. Ohne das Schlsselwort wissen Sie nicht, ob die Eigenschaft oder Methode zur bergeordneten Klasse gehrt. Sie knnen Klassennamenprfixe auch fr statische Variablen und Methoden, selbst in einer Klasse, verwenden. So knnen Sie den Verweis qualifizieren und die Lesbarkeit des Codes verbessern. Je nach Ihrer Kodierungsumgebung kann das Hinzufgen von Prfixen auch bewirken, dass Codehinweise eingeblendet werden.
H I N WE I S A C H TU N G

Sie mssen diese Prfixe nicht hinzufgen. Manche Entwickler betrachten sie als unntig. Adobe empfiehlt jedoch, das Schlsselwort this als Prfix hinzuzufgen, da es die Lesbarkeit verbessert und einen Kontext fr Methoden und Variablen bietet, was die Erstellung von optimalem Code vereinfacht.

Beispiel: Benutzerdefinierte Klassen schreiben


Sie haben nun die Grundlagen einer Klassendatei sowie die enthaltenen Komponenten kennen gelernt. Im Folgenden werden einige allgemeine Richtlinien zur Erstellung einer Klassendatei beschrieben. Im ersten Beispiel in diesem Kapitel wird gezeigt, wie Sie Klassen schreiben und in Paketen zusammenfassen. Das zweite Beispiel zeigt, wie diese Klassendateien in einer FLA-Datei verwendet werden.
Der ActionScript-Code in externen Dateien wird beim Verffentlichen, Exportieren, Testen oder Debuggen von FLA-Dateien in eine SWF-Datei kompiliert. Wenn Sie eine externe Datei ndern, mssen Sie sie also speichern und alle FLA-Dateien neu kompilieren, die diese Datei verwenden.

Wie Sie im Abschnitt Benutzerdefinierte Klassendateien schreiben auf Seite 216 gesehen haben, bestehen Klassen aus zwei Teilen: der Deklaration und dem Body. Klassendeklarationen bestehen mindestens aus der Anweisung class, auf die ein Bezeichner fr den Klassennamen und schlielich eine ffnende und eine schlieende geschweifte Klammer ({}) folgen. Der Inhalt zwischen den geschweiften Klammern ist der Klassen-Body, wie im folgenden Beispiel gezeigt:
class className { // Klassen-Body }

Beispiel: Benutzerdefinierte Klassen schreiben

247

Denken Sie daran, Klassen knnen nur in externen ActionScript-Dateien definiert werden. Sie knnen beispielsweise keine Klasse in einem Bildskript einer FLA-Datei definieren. Deshalb erstellen Sie in diesem Beispiel eine neue Datei. Klassendeklarationen bestehen im Wesentlichen aus dem class-Schlsselwort, auf das der Klassenname (in diesem Fall Person) und dann die linke und rechte geschweifte Klammer ({}) folgen. Der Teil zwischen den geschweiften Klammern wird als Klassen-Body bezeichnet. Hier sind die Eigenschaften und Methoden der Klasse definiert. Nach Abschluss dieses Beispiels werden Ihre Klassendateien die folgende grundlegende Anordnung aufweisen:

Kommentare zur Dokumentierung Klassendeklaration Konstruktorfunktion Klassen-Body

In diesem Kapitel erstellen Sie keine Unterklassen. Weitere Informationen zu Vererbung und Unterklassen Sie in Kapitel 7, Vererbung auf Seite 293. Dieses Beispiel enthlt die folgenden Themen:

Allgemeine Richtlinien zum Erstellen einer Klasse auf Seite 249 Klassendateien erstellen und in Paketen zusammenfassen auf Seite 250 Konstruktorfunktion schreiben auf Seite 253 Methoden und Eigenschaften hinzufgen auf Seite 255 Mitgliedszugriff in Klassen steuern auf Seite 259 Klassen dokumentieren auf Seite 261

Beispiele zur Erstellung eines dynamischen Mens mit XML-Daten und einer benutzerdefinierten Klassendatei finden Sie auf der Webseite mit Flash-Beispielen unter www.adobe.com/go/learn_fl_samples_de. Im Beispiel wird der ActionScript-Konstruktor XmlMenu() aufgerufen, dem zwei Parameter bergeben werden: der Pfad zur XML-Mendatei und ein Verweis auf die aktuelle Zeitleiste. Laden Sie die komprimierte Beispieldatei herunter, dekomprimieren Sie sie, und wechseln Sie in den Ordner ActionScript2.0/XML_Menu, um auf die Beispiele zuzugreifen.

XmlMenu.as xmlmenu.fla

248

Klassen

Allgemeine Richtlinien zum Erstellen einer Klasse


Beachten Sie beim Schreiben von benutzerdefinierten Klassendateien die folgenden Richtlinien. Sie helfen Ihnen dabei, korrekte und gut strukturierte Klassen zu erstellen. Die knnen den Umgang mit diesen Richtlinien in den folgenden Beispielen ben.

Im Allgemeinen sollten Sie pro Zeile nur eine Deklaration eingeben und gleiche oder unterschiedliche Deklarationstypen nicht auf einer Zeile unterbringen. Formatieren Sie Ihre Deklarationen wie im folgenden Beispiel:
private var SKU:Number; // Produkt-SKU-(Identifizierungs)-Nummer private var quantity:Number; // Produktmenge

Initialisieren Sie lokale Variablen beim Deklarieren, es sei denn, der Ausgangswert wird durch eine Berechnung ermittelt. Informationen zum Initialisieren von Variablen finden Sie in Methoden und Eigenschaften hinzufgen auf Seite 255. Deklarieren Sie Variablen, bevor Sie sie zum ersten Mal verwenden (einschlielich Schleifen). Im folgenden Code wird beispielsweise die Schleifeniterationsvariable (i) deklariert, bevor sie in der for-Schleife verwendet wird:
var my_array:Array = new Array("one", "two", "three"); var i:Number; for (i = 0 ; i < my_array.length; i++) { trace(i + " = " + my_array[i]); }

Vermeiden Sie lokale Deklarationen, die Deklarationen hherer Ebenen verbergen. Deklarieren Sie eine Variable zum Beispiel nicht wie im folgenden Beispiel zweimal:
// fehlerhafter Code var counter:Number = 0; function myMethod() { var counter:Number; for (counter = 0; counter <= 4; counter++) { // Anweisungen; } }

In diesem Code wird dieselbe Variable in einem inneren Block deklariert.

Weisen Sie einem einzelnen Wert in einer Anweisung nicht zu viele Variablen zu. Dies fhrt zu schlechter Lesbarkeit, wie im folgenden ActionScript-Codebeispiel gezeigt:
// fehlerhafte Form xPos = yPos = 15;

oder
// fehlerhafte Form class User { private var m_username:String, m_password:String; }

Beispiel: Benutzerdefinierte Klassen schreiben

249

Definieren Sie Instanzvariablen, statische Variablen sowie Klassen- und Mitgliedsvariablen nur mit gutem Grund als ffentlich. Stellen Sie sicher, dass diese Variablen explizit als ffentlich deklariert wurden, bevor Sie sie auf diese Art erstellen. Definieren Sie die meisten Mitgliedsvariablen als privat, es sei denn, Sie haben einen guten Grund, sie als ffentlich zu definieren. Unter dem Gesichtspunkt des Designs empfiehlt es sich, Mitgliedsvariablen als privat zu definieren und den Zugriff auf diese Variablen nur ber eine Gruppe von get- und set-Funktionen zu gestatten.

Klassendateien benennen
Klassennamen mssen Bezeichner sein; das erste Zeichen ist also ein Buchstabe, ein Unterstrich (_) oder ein Dollarzeichen ($), und jedes folgende Zeichen ist ein Buchstabe, eine Ziffer, ein Unterstrich oder ein Dollarzeichen. Es empfiehlt sich, nach Mglichkeit nur Buchstaben fr Klassennamen zu verwenden. Der Klassenname muss auch in der Gro- und Kleinschreibung genau mit dem Namen der ActionScript-Datei bereinstimmen, die ihn enthlt. Wenn Sie z.B. eine Klasse namens Rock erstellen, muss die ActionScript-Datei mit der Klassendefinition den Namen Rock.as haben.
// In Datei Rock.as class Rock { // Rock-Klassen-Body }

Im folgenden Abschnitt werden Sie eine Klassendefinition erstellen und benennen. In Klassendateien erstellen und in Paketen zusammenfassen auf Seite 250 wird beschrieben, wie Sie Klassendateien erstellen, benennen und in Paketen zusammenfassen. Weitere Informationen zum Benennen von Klassendateien finden Sie in Klassen und Objekte benennen auf Seite 752.

Klassendateien erstellen und in Paketen zusammenfassen


In diesem Abschnitt werden Sie die Klassendateien fr dieses Beispiel erstellen, benennen und in einem Paket zusammenfassen (Beispiel: Benutzerdefinierte Klassen schreiben auf Seite 247). In den folgenden Abschnitten wird gezeigt, wie Sie einfache, aber vollstndige Klassendateien schreiben. Weitere Informationen zu Paketen finden Sie in Pakete auf Seite 208, Klassen und Pakete im Vergleich auf Seite 210 und Pakete verwenden auf Seite 210.

250

Klassen

Wenn Sie eine Klassendatei erstellen, mssen Sie sich berlegen, wo die Datei gespeichert werden soll. In den folgenden Schritten speichern Sie die Klassendatei und die FLA-Datei der Anwendung, die die Klassendatei verwendet, aus Grnden der Einfachheit im selben Verzeichnis. Wenn Sie die Syntax berprfen mchten, mssen Sie Flash jedoch auch mitteilen, wo die Datei sich befindet. Bei der Erstellung einer Anwendung fgen Sie in der Regel das Verzeichnis, in dem Sie die Anwendungs- und Klassendateien speichern, dem Flash-Klassenpfad hin. Informationen zu Klassenpfaden finden Sie in Klassenpfad festlegen und ndern auf Seite 223. Klassendateien werden auch als ActionScript-Dateien (AS) bezeichnet. Sie knnen ASDateien im Flash-Authoring-Tool oder mit einem externen Editor erstellen, Beispielsweise kann Macromedia Dreamweaver AS-Dateien erstellen.
HINWEIS

Der Name der Klasse (ClassA) muss mit dem Namen der AS-Datei, die die Klasse enthlt (ClassA.as) genau bereinstimmen. Dies ist sehr wichtig, denn wenn diese beiden Namen nicht bereinstimmen (einschlielich Gro- und Kleinschreibung), wird die Klasse nicht kompiliert.

So erstellen Sie eine Klassendatei und eine Klassendeklaration:


1.

Whlen Sie Datei > Neu und dann Flash-Dokument, um eine neue FLA-Datei zu erstellen, und klicken Sie dann auf OK. Whlen Sie Datei > Speichern unter, und speichern Sie die neue Flash-Datei unter dem Namen package_test.fla im aktuellen Verzeichnis. Sie werden diesem Flash-Dokument spter Inhalt hinzufgen. Whlen Sie Datei > Neu und dann ActionScript-Datei, und klicken Sie auf OK. Whlen Sie Datei > Speichern unter, und erstellen Sie ein neues Unterverzeichnis namens com. Dann fhren Sie folgende Schritte aus:
a. b. c.

2.

3. 4.

Erstellen Sie im Unterordner com einen neuen Unterordner namens adobe. Erstellen Sie im Unterordner adobe einen neuen Unterordner namens utils. Speichern Sie das aktuelle ActionScript-Dokument unter dem Namen ClassA.as im Verzeichnis utils.

5.

Geben Sie den folgenden Code in das Skriptfenster ein:


class com.adobe.utils.ClassA { }

Der oben stehende Code erstellt eine neue Klasse namens ClassA in dem Paket com.adobe.utils.
6. 7.

Speichern Sie das ActionScript-Dokument ClassA.as. Whlen Sie Datei > Neu und dann ActionScript-Datei, und klicken Sie auf OK.

Beispiel: Benutzerdefinierte Klassen schreiben

251

8.

Whlen Sie Datei > Speichern unter, und nennen Sie die neue Datei ClassB.as. Speichern Sie sie in dem Verzeichnis, in dem sich auch die bereits erstellte Datei ClassA.as befindet. Geben Sie den folgenden Code in das Skriptfenster ein:
class com.adobe.utils.ClassB { }

9.

Der oben stehende Code erstellt eine neue Klasse namens ClassB in dem Paket com.adobe.utils.
10. Speichern

Sie die genderten Klassendateien ClassA.as und ClassB.as.

Die Klassendateien, die Sie in einer FLA-Datei verwenden, werden beim Kompilieren in eine SWF-Datei importiert. Der in einer Klassendatei erstellte Code sollte bestimmten Verfahren und Anordnungen entsprechen, die in den folgenden Abschnitten beschrieben werden. Wenn Sie mehrere benutzerdefinierte Klassen erstellen, knnen Sie die Klassendateien mithilfe von Paketen organisieren. Ein Paket ist ein Verzeichnis mit einer oder mehreren Klassendateien, das sich in einem angegebenen Klassenpfadverzeichnis befindet. Ein Klassenname muss innerhalb der Datei, in der er deklariert wird, vollstndig qualifiziert sein; er muss also das Verzeichnis (Paket) wiedergeben, in dem er gespeichert ist. Einzelheiten zu Klassenpfaden finden Sie in Klassenpfad festlegen und ndern auf Seite 223. Beispielsweise wird eine Klasse namens com.adobe.docs.YourClass im Verzeichnis com/ adobe/docs gespeichert. Die Klassendeklaration in der Datei YourClass.as sieht folgendermaen aus:
class com.adobe.docs.YourClass { // Ihre Klasse }
H IN W E I S 252

Sie schreiben die Klassendeklaration, die dem Paketverzeichnis entspricht, im folgenden Abschnitt, Beispiel: Benutzerdefinierte Klassen schreiben auf Seite 247.

Deshalb ist es empfehlenswert, vor dem Erstellen von Klassen die Paketstruktur zu planen. Wenn Sie die Klassendateien nach dem Erstellen verschieben mchten, mssen Sie andernfalls die Deklarationsanweisungen fr die Klasse entsprechend dem neuen Pfad ndern.

Klassen

So erstellen Sie ein Paket fr Ihre Klassendateien:


1.

Whlen Sie einen Namen fr das Paket. Paketnamen sollten intuitiv und auch fr andere Entwickler leicht verstndlich sein. Beachten Sie, dass der Paketname auch einer bestimmten Verzeichnisstruktur entspricht. Beispielsweise mssen alle Klassen im Paket com.adobe.utils in dem Ordner com/adobe/utils auf Ihrer Festplatte abgelegt werden.

2.

Nachdem Sie einen Paketnamen gewhlt haben, erstellen Sie die erforderliche Verzeichnisstruktur. Wenn Ihr Paket beispielsweise com.adobe.utils heit, mssen Sie die Verzeichnisstruktur com/adobe/utils erstellen und die Klassen im Ordner utils ablegen.

3.

Verwenden Sie das Prfix com.adobe.utils fr jede Klasse, die Sie in diesem Paket erstellen. Wenn der Klassenname beispielsweise ClassA ist, muss der vollstndige Klassenname com.adobe.utils.ClassA innerhalb der Klassendatei com/adobe/utils/ClassA.as lauten.

4.

Wenn Sie die Paketstruktur zu einem spteren Zeitpunkt ndern, mssen Sie nicht nur die Verzeichnisstruktur ndern, sondern auch den Paketnamen in jeder Klassendatei sowie alle Import-Anweisungen und Verweise auf eine Klasse innerhalb des Pakets.

Um mit dem Schreiben der Klassendateien fortzufahren, lesen Sie den Abschnitt Konstruktorfunktion schreiben auf Seite 253.

Konstruktorfunktion schreiben
Im Abschnitt Klassendateien erstellen und in Paketen zusammenfassen auf Seite 250 haben Sie gelernt, wie Sie die Klassendeklaration schreiben. In diesem Teil des Kapitels schreiben Sie die so genannte Konstruktorfunktion der Klassendatei.
H I N W E IS

In folgenden Abschnitten erfahren Sie, wie Sie Kommentare, Anweisungen und Deklarationen erstellen.

Konstruktoren sind Funktionen, mit denen Sie die Eigenschaften und Methoden einer Klasse initialisieren (definieren). Definitionsgem sind Konstruktoren Funktionen innerhalb einer Klassendefinition, die denselben Namen wie die Klasse haben. Der folgende Code definiert beispielsweise die Person-Klasse und implementiert eine Konstruktorfunktion: In der objektorientierten Programmierung initialisiert die Konstruktorfunktion jede neue Instanz einer Klasse.

Beispiel: Benutzerdefinierte Klassen schreiben

253

Der Konstruktor einer Klasse ist eine besondere Funktion, die automatisch aufgerufen wird, wenn Sie mit dem Operator new eine Instanz einer Klasse erstellen. Die Konstruktorfunktion hat denselben Namen wie die Klasse, in der sie enthalten ist. Zum Beispiel enthielt die Person-Klasse, die Sie erstellt hatten, die folgende Konstruktorfunktion:
// Konstruktorfunktion der Person-Klasse public function Person (uname:String, age:Number) { this.__name = uname; this.__age = age; }

Bercksichtigen Sie beim Schreiben von Konstruktorfunktionen die folgenden Punkte:

Wenn eine Konstruktorfunktion nicht ausdrcklich deklariert wird d. h., wenn Sie keine Funktion erstellen, deren Name mit dem der Klasse bereinstimmt erstellt der Compiler automatisch eine leere Konstruktorfunktion. Eine Klasse kann nur eine Konstruktorfunktion enthalten; in ActionScript 2.0 sind keine berladenen Konstruktorfunktionen zulssig. Eine Konstruktorfunktion sollte keinen Rckgabetyp haben.

Der Begriff Konstruktor wird auerdem hufig verwendet, wenn Sie ein Objekt erstellen (instanziieren), das auf einer bestimmten Klasse basiert. Die folgenden Anweisungen sind Aufrufe der Konstruktorfunktionen fr die bergeordnete Array-Klasse und die benutzerdefinierte Person-Klasse:
var day_array:Array = new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"); var somePerson:Person = new Person("Tom", 30);

Jetzt fgen Sie eine besondere Funktion, eine so genannte Konstruktorfunktion, hinzu.
H IN W E I S 254

Die folgende bung gehrt zu Beispiel: Benutzerdefinierte Klassen schreiben auf Seite 247. Falls Sie dieses Beispiel nicht ausfhren mchten, knnen Sie die Klassendateien auch unter www.helpexamples.com/flash/learnas/classes/ herunterladen.

Klassen

So fgen Sie Ihren Klassendateien Konstruktorfunktionen hinzu:


1. 2.

ffnen Sie die Klassendatei ClassA.as im Flash-Authoring-Tool. ndern Sie die vorhandene Klassendatei so, dass sie dem folgenden Code entspricht (die vorzunehmenden nderungen werden fett angezeigt):
class com.adobe.utils.ClassA { function ClassA() { trace("ClassA constructor"); } }

Im vorherigen Code wird eine Konstruktormethode fr die ClassA-Klasse erstellt. Dieser Konstruktor sendet einen einfachen String an das Bedienfeld Ausgabe, um Sie darauf hinzuweisen, wann eine neue Instanz der Klasse erstellt wurde.
3. 4.

ffnen Sie die Klassendatei ClassB.as im Flash-Authoring-Tool. ndern Sie die Klassendatei so, dass sie dem folgenden Code entspricht (die vorzunehmenden nderungen werden fett angezeigt):
class com.adobe.utils.ClassB { function ClassB() { trace("ClassB constructor"); } }

5.

Speichern Sie beide ActionScript-Dateien, bevor Sie fortfahren.

Um mit dem Schreiben der Klassendatei fortzufahren, lesen Sie den Abschnitt Methoden und Eigenschaften hinzufgen auf Seite 255.

Methoden und Eigenschaften hinzufgen


Um die Eigenschaften fr die ClassA- und ClassB-Klassen zu erstellen, verwenden Sie das var-Schlsselwort zur Definition von Variablen.
H I N W E IS

Die folgenden drei bungen gehren zu Beispiel: Benutzerdefinierte Klassen schreiben auf Seite 247. Falls Sie dieses Beispiel nicht ausfhren mchten, knnen Sie die Klassendateien auch unter www.helpexamples.com/flash/learnas/classes/ herunterladen.

Beispiel: Benutzerdefinierte Klassen schreiben

255

So fgen Sie den ClassA- und ClassB-Klassen Eigenschaften hinzu:


1. 2.

ffnen Sie die Klassendateien ClassA.as und ClassB.as im Flash-Authoring-Tool. ndern Sie die die ActionScript-Datei ClassA.as so, dass sie dem folgenden Code entspricht (die vorzunehmenden nderungen werden fett angezeigt):
class com.adobe.utils.ClassA { static var _className:String; function ClassA() { trace("ClassA constructor"); } }

Mit dem vorherigen Codeblock wird eine neue statische Variable namens _className hinzugefgt, die den Namen der aktuellen Klasse enthlt.
3.

ndern Sie die ClassB-Klasse, und fgen Sie die statische Variable hinzu, damit die Klasse dem vorherigen Code hnelt. Speichern Sie beide ActionScript-Dateien, bevor Sie fortfahren.
TIPP

4.

In der Standardeinstellung werden Klasseneigenschaften oben im Klassen-Body definiert. Dies ist zwar nicht unbedingt erforderlich, vereinfacht jedoch die Interpretation des Codes.

In Variablendeklarationen verwenden Sie die Syntax mit nachgestelltem Doppelpunkt (beispielsweise var username:String und var age:Number). Dies ist ein Beispiel fr eine strikte Typisierung. Wenn Sie eine Variable mit dem Format var variableName:variableType eingeben, stellt der ActionScript 2.0-Compiler sicher, dass die dieser Variablen zugewiesenen Werte dem festgelegten Typ entsprechen. Wird in der FLA-Datei, die diese Klasse importiert, nicht der richtige Datentyp verwendet, gibt der Compiler eine Fehlermeldung aus. Weitere Informationen zur strikten Datentypisierung finden Sie in Datentypen zuweisen und strikte Datentypisierung auf Seite 46. Die Mitglieder einer Klasse bestehen aus Eigenschaften (Variablendeklarationen) und Methoden (Funktionsdefinitionen). Sie mssen alle Eigenschaften und Methoden im Klassen-Body zwischen den geschweiften Klammern ({}) deklarieren und definieren, andernfalls treten bei der Kompilierung Fehler auf. Einzelheiten zu Mitgliedern finden Sie in ffentliche, private und statische Methoden und Eigenschaften (Mitglieder) auf Seite 230.

256

Klassen

So fgen Sie den ClassA- und ClassB-Klassen Methoden hinzu:


1. 2.

ffnen Sie die Klassendateien ClassA.as und ClassB.as im Flash-Authoring-Tool. ndern Sie die Klassendatei ClassA so, dass sie dem folgenden Code entspricht (die vorzunehmenden nderungen werden fett angezeigt):
class com.adobe.utils.ClassA { static var _className:String; function ClassA() { trace("ClassA constructor"); } function doSomething():Void { trace("ClassA - doSomething()"); } }

Der Codeblock in Fettschrift erstellt eine neue Methode in der Klasse, die einen String an das Bedienfeld Ausgabe sendet.
3.

Whlen Sie in der Datei ClassA.as die Befehle Werkzeuge > Syntax berprfen, um die Syntax der ActionScript-Datei zu berprfen. Wenn im Bedienfeld Ausgabe Fehler gemeldet werden, vergleichen Sie den ActionScriptCode in Ihrem Skript mit dem vollstndigen Code im vorherigen Schritt. Wenn Sie die Codefehler nicht beheben knnen, kopieren Sie den vollstndigen Code in das Skriptfenster, bevor Sie fortfahren.

4.

berprfen Sie die Syntax der Datei ClassB.as wie Sie es fr die Datei ClassA.as durchgefhrt haben. Falls Fehler im Bedienfeld Ausgabe anzeigt werden, kopieren Sie den vollstndigen Code in das Skriptfenster, bevor Sie fortfahren.
class com.adobe.utils.ClassB { static var _className:String; function ClassB() { trace("ClassB constructor"); } function doSomething():Void { trace("ClassB - doSomething()"); } }

Beispiel: Benutzerdefinierte Klassen schreiben

257

5.

Speichern Sie beide ActionScript-Dateien, bevor Sie fortfahren.

Sie knnen Eigenschaften inline, also bei der Deklaration, mit Standardwerten initialisieren. Dies wird im folgenden Beispiel gezeigt:
class Person { var age:Number = 50; var username:String = "John Doe"; }

Wenn Sie Eigenschaften inline initialisieren, muss der Ausdruck auf der rechten Seite der Zuweisung eine Konstante zur Kompilierungszeit sein. Das heit, der Ausdruck kann nicht auf Elemente verweisen, die erst zur Laufzeit festgelegt oder definiert werden. Zu den Konstanten zur Kompilierzeit gehren String-Literale, Zahlen, Boolean-Werte, null und undefined sowie Konstruktorfunktionen fr die folgenden bergeordneten Klassen: Array, Boolean, Number, Object und String.
So initialisieren Sie Eigenschaften inline:
1. 2.

ffnen Sie die Klassendateien ClassA.as und ClassB.as im Flash-Authoring-Tool. ndern Sie die Klassendatei ClassA so, dass der Code dem folgenden ActionScript entspricht (die vorzunehmenden nderungen werden fett angezeigt):
class com.adobe.utils.ClassA { static var _className:String = "ClassA"; function ClassA() { trace("ClassA constructor"); } function doSomething():Void { trace("ClassA - doSomething()"); } }

Der einzige Unterschied zwischen der vorhandenen Klassendatei und dem vorherigen Codeblock besteht darin, dass nun ein Wert fr die statische Variable _className definiert ist, und zwar ClassA.
3.

ndern Sie die ClassB-Klassendatei, und fgen Sie die Inline-Eigenschaft hinzu, wobei Sie den Wert in ClassB ndern.

258

Klassen

4.

Speichern Sie beide ActionScript-Dateien, bevor Sie fortfahren.

Diese Regel gilt nur fr Instanzvariablen (Variablen, die in jede Instanz einer Klasse kopiert werden), nicht fr Klassenvariablen (Variablen, die zur Klasse selbst gehren).
HINWEIS

Wenn Sie Arrays inline initialisieren, wird nur ein Array fr alle Instanzen der Klasse erstellt.

Um mit dem Schreiben der Klassendatei fortzufahren, lesen Sie den Abschnitt Mitgliedszugriff in Klassen steuern auf Seite 259.

Mitgliedszugriff in Klassen steuern


Standardmig kann jede Klasse auf jede Eigenschaft oder Methode einer anderen Klasse zugreifen: Alle Mitglieder einer Klasse sind standardmig ffentlich (public). In einigen Fllen mchten Sie jedoch mglicherweise Daten oder Methoden einer Klasse vor dem Zugriff anderer Klassen schtzen. Dann mssen Sie diese Mitglieder als privat (private) deklarieren. Diese Mitglieder stehen dann nur der Klasse zur Verfgung, in der sie deklariert oder definiert werden. Mit den Attributen public oder private legen Sie fest, ob es sich bei den Mitgliedern um ffentliche oder private Mitglieder handelt. Der folgende Code deklariert beispielsweise eine private Variable (Eigenschaft) und eine private Methode (Funktion). Die folgende Klasse (LoginClass) definiert eine private Eigenschaft namens userName sowie eine private Methode mit der Bezeichnung getUserName().
class LoginClass { private var userName:String; private function getUserName():String { return this.userName; } // Konstruktor: public function LoginClass(user:String) { this.userName = user; } }

Beispiel: Benutzerdefinierte Klassen schreiben

259

Private Mitglieder (Eigenschaften und Methoden) sind nur der Klasse zugnglich, welche diese Mitglieder definiert, und den Unterklassen dieser ursprnglichen Klasse. Instanzen der ursprnglichen Klasse oder Instanzen von Unterklassen knnen nicht auf als privat deklarierte Eigenschaften und Methoden zugreifen. Der Zugriff auf private Mitglieder ist also nur innerhalb von Klassendefinitionen und nicht auf der Instanzstufe mglich. Im folgenden Beispiel ndern Sie den Mitgliedszugriff in Ihren Klassendateien.
HINWEIS

Diese bung gehrt zu Beispiel: Benutzerdefinierte Klassen schreiben auf Seite 247. Falls Sie dieses Beispiel nicht ausfhren mchten, knnen Sie die Klassendateien auch unter www.helpexamples.com/flash/learnas/classes/ herunterladen.

So steuern Sie den Mitgliedszugriff:


1. 2.

ffnen Sie die Klassendateien ClassA.as und ClassB.as im Flash-Authoring-Tool. ndern Sie die die ActionScript-Datei ClassA.as so, dass ihr Inhalt dem folgenden ActionScript entspricht (die vorzunehmenden nderungen werden fett angezeigt):
class com.adobe.utils.ClassA { private static var _className:String = "ClassA"; public function trace("ClassA } public function trace("ClassA } } ClassA() { constructor"); doSomething():Void { - doSomething()");

Mit dem vorigen Code werden beide Methoden (ClassA-Konstruktor und doSomething()-Methode) als ffentlich definiert, so dass auch externe Skripts darauf zugreifen knnen. Die statische Variable _className wird als privat definiert, so dass der Zugriff auf die Variable nur aus der Klasse, nicht aber von externen Skripts aus mglich ist.
3.

ndern Sie die ActionScript-Datei ClassB.as, und legen Sie denselben Zugriff auf Eigenschaften und Methoden wie in der ClassA-Klasse fest. Speichern Sie beide ActionScript-Dateien, bevor Sie fortfahren.

4.

Eine Instanz von ClassA oder ClassB kann nicht auf die privaten Mitglieder zugreifen. Wenn Sie beispielsweise den folgende Code in Bild 1 der Zeitleiste in einer FLA-Datei einfgen, wird ein Compiler-Fehler verursacht, der Sie darauf hinweist, dass die Methode privat ist und der Zugriff auf die Methode deshalb nicht mglich ist.
import com.adobe.utils.ClassA; var a:ClassA = new ClassA(); trace(a._className); // Fehler. Das Mitglied ist privat, // und der Zugriff darauf ist nicht mglich.

260

Klassen

Die Steuerung des Mitgliedszugriffs steht nur zur Kompilierzeit zur Verfgung. Zur Laufzeit unterscheidet Flash Player nicht zwischen privaten und ffentlichen Mitgliedern. Um mit dem Schreiben der Klassendatei fortzufahren, lesen Sie den Abschnitt Klassen dokumentieren auf Seite 261.

Klassen dokumentieren
Kommentare sind ein wichtiges Instrument zur Dokumentierung von Klassen und Schnittstellen fr andere Benutzer. Beispielsweise mchten Sie Ihre Klassendateien anderen Mitgliedern der Flash Community zur Verfgung stellen, oder Sie arbeiten in einem Team mit anderen Designern und Entwicklern, die Ihre Klassendateien im Rahmen eines gemeinsamen Projekts verwenden. Mithilfe der Dokumentation sind Zweck und Ursprung der Klassen fr andere Benutzer leichter verstndlich. Eine typische Klassen- oder Schnittstellendatei enthlt zwei Arten von Kommentaren: Dokumentierungskommentare und Implementierungskommentare. Mit Dokumentierungskommentaren beschreiben Sie die Merkmale des Codes, aber nicht seine Implementierung. Mit Implementierungskommentaren knnen Sie Code auskommentieren oder Kommentare zur Implementierung bestimmter Codeabschnitte hinzufgen. Fr die beiden Kommentararten werden etwas unterschiedliche Trennzeichen verwendet. Dokumentierungskommentare werden durch /** und */ abgegrenzt, whrend bei Implementierungskommentaren die Trennzeichen /* und */ verwendet werden.
H IN W E I S

Kommentare zur Dokumentierung stellen in ActionScript 2.0 kein Sprachkonstrukt dar. Sie sind jedoch eine bliche Methode zur Strukturierung von Kommentaren in einer Klassendatei, die Sie in Ihren AS-Dateien verwenden knnen.

Mit Dokumentierungskommentaren werden Schnittstellen, Klassen, Methoden und Konstruktoren beschrieben. Fgen Sie pro Klasse, Schnittstelle oder Mitglied einen Dokumentierungskommentar ein, und zwar direkt vor der Deklaration.

Beispiel: Benutzerdefinierte Klassen schreiben

261

Wenn Sie weitere Informationen dokumentieren wollen, die sich nicht in die Kommentare zur Dokumentierung einordnen lassen, verwenden Sie Kommentare zur Implementierung (im Format von Kommentarblocks oder einzeiligen Kommentaren, wie in Kommentare auf Seite 105 beschrieben). Implementierungskommentare folgen direkt auf die Deklaration.
H I NW E I S

Fgen Sie keine Kommentare ein, die sich nicht direkt auf die gelesene Klasse beziehen. Fgen Sie z. B. keine Kommentare ein, die das entsprechende Paket beschreiben.

So dokumentieren Sie Ihre Klassendateien:


1. 2.

3.

4.

262

HINWEIS

Die folgende bung gehrt zu Beispiel: Benutzerdefinierte Klassen schreiben auf Seite 247. Falls Sie dieses Beispiel nicht ausfhren mchten, knnen Sie die Klassendateien auch unter www.helpexamples.com/flash/learnas/classes/ herunterladen.

ffnen Sie die Klassendateien ClassA.as und ClassB.as im Flash-Authoring-Tool. ndern Sie die Klassendatei ClassA.as und fgen Sie den neuen Code am Anfang der Klassendatei ein (die vorzunehmenden nderungen werden fett angezeigt):
/** ClassA-Klasse Version 1.1 6/21/2005 Copyright Adobe Systems Incorporated */ class com.adobe.utils.ClassA { private static var _className:String = "ClassA"; public function trace("ClassA } public function trace("ClassA } } ClassA() { constructor"); doSomething():Void { - doSomething()");

In dem oben stehenden Code wurde ein Kommentar am Anfang der Klassendatei eingefgt. Es empfiehlt sich, Kommentare in ActionScript- und Flash-Dateien einzufgen, die u. a. folgende Informationen enthalten: Autor der Klasse, letztes nderungsdatum, Copyright-Informationen sowie potenzielle Probleme oder Fehler in der Datei. Fgen Sie oben in die ActionScript-Datei ClassB.as einen hnlichen Kommentar ein, und ndern Sie dabei den Klassennamen und andere Informationen nach Bedarf. Speichern Sie beide ActionScript-Dateien, bevor Sie fortfahren.

Klassen

Sie knnen auch Blockkommentare, einzeilige oder nachgestellte Kommentare in den Code der Klasse einfgen. Empfehlungen zum Schreiben von Kommentaren im Code finden Sie in Empfehlungen zu Kommentaren auf Seite 756. Allgemeine Informationen zu Kommentaren finden Sie in Einzeilige Kommentare auf Seite 106, Mehrzeilige Kommentare auf Seite 106 und Nachgestellte Kommentare auf Seite 107. In Beispiel: Benutzerdefinierte Klassendateien in Flash verwenden auf Seite 263 wird beschrieben, wie Sie diese benutzerdefinierten Klassendateien in einer SWF-Datei verwenden.

Beispiel: Benutzerdefinierte Klassendateien in Flash verwenden


In diesem Beispiel werden Klassendateien verwendet, die in dem Beispiel in Beispiel: Benutzerdefinierte Klassen schreiben auf Seite 247 geschrieben wurden. Sie knnen diese Dateien auch unter www.helpexamples.com/flash/learnas/classes/ herunterladen. Wenn Beispiel: Benutzerdefinierte Klassen schreiben auf Seite 247 abgeschlossen haben, suchen Sie die Dateien ClassA.as und ClassB.as auf Ihrer Festplatte. Da der Paketname der ClassA-Klassendatei com.adobe.utils.ClassA lautet, mssen Sie sicherstellen, dass Sie die Klassendateien in der richtigen Verzeichnisstruktur speichern. Erstellen Sie im aktuellen Verzeichnis einen Unterordner namens com. Erstellen Sie im Ordner com einen neuen Ordner namens adobe. Fgen Sie im Ordner adobe einen dritten Unterordner mit dem Namen utils hinzu. Speichern Sie die Klassendateien ClassA.as und ClassB.as im Ordner utils. Jetzt knnen Sie mit diesem Beispiel fortfahren. Sie knnen die benutzerdefinierten Klassen, die in Beispiel: Benutzerdefinierte Klassen schreiben auf Seite 247 erstellt wurden, mit einer FLA-Datei verwenden. In diesem Beispiel verwenden Sie die benutzerdefinierten Klassen zur Erstellung einer kleinen FlashAnwendung. Bei der Verffentlichung des Dokuments werden die Klassen in der SWF-Datei kompiliert, so dass eine Interaktion zwischen allen Komponenten entsteht. In den folgenden bungen erfahren Sie Nheres ber die Funktionsweise von Klassenpfaden, die Verwendung von Klassendateien in Ihrer Anwendung und das Importieren von Klassen und Paketen. Um in diesem Beispiel weiterzuarbeiten, fahren Sie mit Klassen und Pakete importieren auf Seite 264 fort.

Beispiel: Benutzerdefinierte Klassendateien in Flash verwenden

263

Klassen und Pakete importieren


Um auf eine Klasse in einem anderen Skript zu verweisen, mssen Sie dem Klassennamen den Paketnamen der Klasse voranstellen. Die Kombination aus dem Namen und dem Paketpfad einer Klasse ist der vollstndig qualifizierte Klassenname. Wenn eine Klasse in einem Klassenpfadverzeichnis auf oberster Ebene und nicht in einem Unterordner des Klassenpfadverzeichnisses gespeichert ist, dann ist der vollstndig qualifizierte Klassenname auch der Klassenname. Um Paketpfade festzulegen, trennen Sie die Paketverzeichnisnamen mittels Punktnotation (.). Paketpfade sind hierarchisch gegliedert. Jeder Punkt stellt ein verschachteltes Verzeichnis dar. Angenommen, Sie erstellen die ClassName-Klasse, die in Ihrem Klassenpfad im Paket com/adobe/docs/learnAs2 abgelegt ist. Um eine Instanz dieser Klasse zu erstellen, knnten Sie den vollstndig qualifizierten Klassennamen angeben. Zum Festlegen des Variablentyps knnen Sie den vollstndig qualifizierten Klassennamen verwenden. Dies wird im folgenden Beispiel gezeigt:
var myInstance:com.adobe.docs.learnAs2.ClassName = new com.adobe.docs.learnAs2.ClassName();

Sie knnen die import-Anweisung verwenden, um Pakete in ein Skript zu importieren. Dadurch knnen Sie den abgekrzten Klassennamen anstelle des vollstndig qualifizierten Namens verwenden. Mit dem Platzhalterzeichen (*) knnen alle Klassen in einem Paket importiert werden. Wenn Sie das Platzhalterzeichen verwenden, mssen Sie nicht bei jeder Verwendung der Klasse den vollstndig qualifizierten Klassennamen angeben. Angenommen, Sie haben wie im folgenden Beispiel gezeigt die oben genannte Klasse in einem Skript mit der import-Anweisung importiert:
import com.adobe.docs.learnAs2.util.UserClass;

Sie knnen spter im selben Skript wie im folgenden Beispiel gezeigt auf diese Klasse verweisen, indem Sie deren abgekrzten Namen angeben:
var myUser:UserClass = new UserClass();

Mit dem Platzhalterzeichen (*) knnen Sie alle Klassen in einem bestimmten Paket importieren. Angenommen, Sie haben ein Paket namens com.adobe.utils, das die beiden ActionScript-Klassendateien ClassA.as und ClassB.as enthlt. In einem anderen Skript knnten Sie die beiden Klassen im Paket mit dem Platzhalterzeichen importieren, wie im folgenden Code gezeigt:
import com.adobe.utils.*;

264

Klassen

Im folgenden Beispiel wird gezeigt, wie Sie dann auf beide Klassen direkt im selben Skript verweisen knnen:
var myA:ClassA = new ClassA(); var myB:ClassB = new ClassB();

Die import-Anweisung gilt nur fr das aktuelle Skript (Bild oder Objekt), in dem sie aufgerufen wird. Wenn eine importierte Klasse nicht in einem Skript verwendet wird, wird die Klasse nicht in den Bytecode der resultierenden SWF-Datei aufgenommen. Die Klasse ist auch nicht in den SWF-Dateien verfgbar, die von der FLA-Datei geladen werden, in der die import-Anweisung enthalten ist.
HINWEIS

Die folgende bung gehrt zu Beispiel: Benutzerdefinierte Klassendateien in Flash verwenden auf Seite 263, die das Beispiel Beispiel: Benutzerdefinierte Klassen schreiben fortsetzt. Falls Sie ClassA und ClassB bentigen, knnen Sie diese Dateien unter www.helpexamples.com/flash/learnas/classes/ herunterladen.

So importieren Sie eine Klasse oder ein Paket:


1. 2.

ffnen Sie die Datei package_test.fla. Geben Sie den folgenden Code in das Skriptfenster ein:
import com.adobe.utils.*; var a = new ClassA(); // ClassA-Konstruktor var b = new ClassB(); // ClassB-Konstruktor:

Mit dem vorherigen Codeblock werden zunchst alle Klassen im Paket com.adobe.utils mit dem Platzhalterzeichen (*) importiert. Als Nchstes erstellen Sie eine neue Instanz der ClassA-Klasse. Dadurch sendet die Konstruktormethode eine Meldung an das Bedienfeld Ausgabe. Eine Instanz der ClassB-Klasse wird ebenfalls erstellt, die auch DebuggingMeldungen an das Bedienfeld Ausgabe sendet.
3.

Speichern Sie das genderte Flash-Dokument, bevor Sie fortfahren.

Um mit der Verwendung dieser Klassendateien in einer Flash-Datei fortzufahren, lesen Sie den Abschnitt Instanzen von Klassen in einem Beispiel erstellen auf Seite 265.

Instanzen von Klassen in einem Beispiel erstellen


Instanzen sind Objekte, die alle Eigenschaften und Methoden einer Klasse enthalten. Alle Arrays sind beispielsweise Instanzen der Array-Klasse, so dass Sie alle Methoden und Eigenschaften der Array-Klasse mit jeder Array-Instanz verwenden knnen. Sie knnen aber auch eine eigene Klasse erstellen, wie beispielsweise UserSettings, und dann eine Instanz der UserSettings-Klasse erstellen.

Beispiel: Benutzerdefinierte Klassendateien in Flash verwenden

265

Wir setzen nun das Beispiel fort, das Sie in Beispiel: Benutzerdefinierte Klassendateien in Flash verwenden auf Seite 263 begonnen haben. Sie hatten eine FLA-Datei gendert, um von Ihnen erstellte Klassen zu importieren, damit es nicht erforderlich ist, mit den vollstndig qualifizierten Namen auf die Klassen zu verweisen. Im nchsten Schritt dieses Beispiels (Beispiel: Benutzerdefinierte Klassendateien in Flash verwenden auf Seite 263) erstellen Sie eine Instanz der Klassen ClassA und ClassB in einem Skript, wie beispielsweise in einem Bildskript im Flash-Dokument package_test.fla, und weisen es einer Variablen zu. Um eine Instanz einer benutzerdefinierten Klasse zu erstellen, verwenden Sie den Operator new genauso wie bei der Erstellung einer Instanz einer bergeordneten ActionScript-Klasse (wie Date oder Array). Sie verweisen anhand des vollstndig qualifizierten Klassennamens auf die Klasse oder importieren die Klasse, wie in Klassen und Pakete importieren auf Seite 264 beschrieben.
H I N WE I S

Die folgende bung gehrt zu Beispiel: Benutzerdefinierte Klassendateien in Flash verwenden auf Seite 263, die das Beispiel Beispiel: Benutzerdefinierte Klassen schreiben fortsetzt.

So erstellen Sie eine neue Instanz der ClassA- und ClassB-Klassen:


1. 2.

ffnen Sie die Datei package_test.fla. Geben Sie den fett gedruckten Code in das Skriptfenster ein:
import com.adobe.utils.*; var a:ClassA = new ClassA(); // ClassA-Konstruktor a.doSomething(); // doSomething()-Methode von ClassA aufrufen var b:ClassB = new ClassB(); // ClassB-Konstruktor: b.doSomething(); // doSomething()-Methode von ClassB aufrufen

Durch die Datentypisierung Ihrer Objekte in diesem Codebeispiel wei der Compiler, dass Sie nicht versuchen, auf Eigenschaften oder Methoden zuzugreifen, die nicht in der benutzerdefinierten Klasse definiert sind. Weitere Informationen zur strikten Datentypisierung finden Sie in Datentypen zuweisen und strikte Datentypisierung auf Seite 46. Eine Ausnahme zur Datentypisierung liegt vor, wenn Sie die Klasse mit dem Schlsselwort dynamic als dynamisch deklarieren. Siehe Dynamische Klassen erstellen auf Seite 243.
3.

Speichern Sie die genderte Flash-Datei, bevor Sie fortfahren.

Sie sollten jetzt eine Vorstellung davon haben, wie Klassen erstellt und in Flash-Dokumenten verwendet werden. Bercksichtigen Sie, dass Sie auch Instanzen der bergeordneten ActionScript-Klassen und der integrierten Klassen erstellen knnen (siehe Integrierte Klassen verwenden auf Seite 285). Um mit der Verwendung dieser Klassendateien in einer Flash-Datei fortzufahren, lesen Sie den Abschnitt Symbolen in Flash eine Klasse zuweisen auf Seite 267.
266 Klassen

Symbolen in Flash eine Klasse zuweisen


Sie knnen den Symbolen in einer Flash-Datei, wie einem Movieclip-Objekt auf der Bhne, eine Klasse zuweisen.
So weisen Sie einem Movieclip-Symbol eine Klasse zu:
1. 2.

Whlen Sie Datei > Neu und dann ActionScript-Datei, und klicken Sie auf OK. Whlen Sie Datei > Speichern unter, nennen Sie die Datei Animal.as und speichern Sie die Datei auf Ihrer Festplatte. Geben Sie den folgenden Code in das Skriptfenster ein:
class Animal { public function Animal() { trace("Animal::constructor"); } }

3.

Dieser ActionScript-Code erstellt eine neue Klasse namens Animal, die ber eine Konstruktormethode verfgt, welche einen String an das Bedienfeld Ausgabe sendet.
4. 5.

Speichern Sie die genderte ActionScript-Datei. Whlen Sie Datei > Neu und dann Flash-Dokument, um eine neue FLA-Datei zu erstellen. Klicken Sie dann auf OK. Whlen Sie Datei > Speichern unter, und nennen Sie die Datei animal_test.fla. Speichern Sie die Datei im gleichen Ordner wie die bereits erstellte Datei Animal.as. Whlen Sie Einfgen > Neues Symbol, um das Dialogfeld Neues Symbol erstellen zu ffnen. Geben Sie den Symbolnamen Animal ein, und whlen Sie die Option Movieclip. Klicken Sie auf die Schaltflche Erweitert in der rechten unteren Ecke des Dialogfelds Neues Symbol erstellen, um weitere Optionen zu aktivieren. Die Schaltflche Erweitert wird verfgbar, wenn das Dialogfeld Neues Symbol erstellen im einfachen Modus angezeigt wird.

6.

7.

8. 9.

10. Aktivieren

Sie im Bereich Verknpfung das Kontrollkstchen Export fr ActionScript.

Wenn diese Option aktiviert ist, knnen Sie zur Laufzeit dynamisch Instanzen dieses Symbols in die Flash-Dokumente einfgen.
11.

Geben Sie den Bezeichner animal_id ein und setzen Sie die ActionScript 2.0-Klasse auf Animal (gem dem Klassennamen, den Sie in Schritt 3 angegeben haben). Sie dann das Kontrollkstchen In erstes Bild exportieren und klicken Sie auf OK, um die nderungen zu speichern und das Dialogfeld zu schlieen.

12. Aktivieren

Symbolen in Flash eine Klasse zuweisen

267

13.

Speichern Sie das Flash-Dokument, und whlen Sie Steuerung > Film testen. Im Bedienfeld Ausgabe sollte nun der Text aus der Konstruktorfunktion der Animal-Klasse angezeigt werden.
HINWEIS

Wenn Sie die Verknpfungseigenschaften des Movieclips ndern mssen, knnen Sie in der Dokumentbibliothek mit der rechten Maustaste auf das Symbol klicken und dann Eigenschaften oder Verknpfung im Kontextmen auswhlen.

Klassen kompilieren und exportieren


Standardmig werden Klassen von SWF-Dateien in das erste Bild dieser Datei eingebettet und exportiert. Sie knnen jedoch auch ein anderes Bild angeben, in dem ihre Klassen zusammengefasst und exportiert sind. Das ist dann ntzlich, wenn in einer SWF-Datei mehrere Klassen verwendet werden, deren Download relativ viel Zeit in Anspruch nimmt (wie Komponenten). Wenn die Klassen ber das erste Bild exportiert werden, muss der Anwender warten, bis der gesamte Klassencode heruntergeladen worden ist, bevor das Bild angezeigt wird. Durch das Festlegen eines spter auftretenden Bilds in der Zeitleiste knnten Sie eine schnell ladende Animation in den ersten Bildern der Zeitleiste abspielen lassen, whrend der Klassencode aus dem nachfolgenden Bild heruntergeladen wird.
So legen Sie das Exportbild fr Klassen in einem Flash-Dokument fest:
1.

Whlen Sie Datei > Neu und dann Flash-Dokument. Speichern Sie das neue Dokument unter dem Namen exportClasses.fla. Benennen Sie die Standardebene in content um, ziehen Sie eine ProgressBar-Komponente aus dem Bedienfeld Komponenten auf die Bhne, und nennen Sie die Instanz my_pb. Fgen Sie eine neue Ebene ein, ziehen Sie sie so, dass sie der content-Ebene bergeordnet ist, und nennen Sie sie actions. Fgen Sie Bild 1 in der actions-Ebene in der Hauptzeitleiste den folgenden ActionScript-Code hinzu:
my_pb.indeterminate = true;

2.

3.

4.

268

Klassen

5.

Erstellen Sie ein neues Schlsselbild von Bild 2 in der actions-Ebene und geben Sie den folgenden ActionScript-Code ein:
var classesFrame:Number = 10; if (_framesloaded < classesFrame) { trace(this.getBytesLoaded() + " of " + this.getBytesTotal() + " bytes loaded"); gotoAndPlay(1); } else { gotoAndStop(classesFrame); }

6.

Erstellen Sie ein neues Schlsselbild von Bild 10 in der actions-Ebene und geben Sie das folgende ActionScript ein:
stop();

7.

Erstellen Sie ein neues Schlsselbild von Bild 10 in der content-Ebene und ziehen Sie verschiedene Komponenten auf die Bhne. Klicken Sie im Bedienfeld Bibliothek mit der rechten Maustaste auf jede Komponenten (auer der ProgressBar) und whlen Sie Verknpfung im Kontextmen aus. Das Dialogfeld Verknpfungseigenschaften wird aufgerufen. Aktivieren Sie im Dialogfeld Verknpfungseigenschaften die Option Export fr ActionScript, und deaktivieren Sie das Kontrollkstchen In erstes Bild exportieren. Klicken Sie auf OK. Sie Datei > Einstellungen fr Verffentlichungen. Klicken Sie im Dialogfeld Einstellungen fr Verffentlichungen auf die Registerkarte Flash. Sie neben dem Popupmen ActionScript-Version auf die Schaltflche Einstellungen. Das Dialogfeld ActionScript-Einstellungen wird geffnet.

8.

9.

10. Whlen 11.

12. Klicken

13.

Geben Sie in das Textfeld Klassen exportieren in Bild die Nummer des Bilds ein, in das Sie Ihren Klassencode exportieren mchten (Bild 10) . Sollte das Bild auf der Zeitleiste nicht vorhanden sein, erhalten Sie beim Verffentlichen Ihrer SWF-Datei eine Fehlermeldung.

14. Mit

OK schlieen Sie das Dialogfeld ActionScript-Einstellungen. Klicken Sie anschlieend auf OK, um das Dialogfeld Einstellungen fr Verffentlichungen zu schlieen.

Klassen kompilieren und exportieren

269

15.

Whlen Sie Steuerung > Film testen, um das Flash-Dokument zu testen. Wenn die Komponenten zu schnell geladen werden, whlen Sie in der SWF-Datei Ansicht > Download simulieren. Flash simuliert das Herunterladen des Flash-Dokuments mit einer geringeren Geschwindigkeit, so dass Sie die ProgressBar-Komponenten animiert sehen knnen, whrend die Dateien heruntergeladen werden.

Weitere Informationen zu ASO-Dateien finden Sie in ASO-Dateien verwenden auf Seite 270.

ASO-Dateien verwenden
Whrend der Kompilierung erstellt Flash in einigen Fllen Dateien mit der Erweiterung .aso im Unterverzeichnis /aso des Standardverzeichnisses fr globale Klassenpfade (siehe Klassenpfad festlegen und ndern auf Seite 223). Die Erweiterung .aso steht auch fr das ActionScript-Objekt (ASO). Flash erstellt eine ASO-Datei fr jede ActionScript 2.0-Datei, die implizit oder explizit importiert und erfolgreich kompiliert wird. Die Datei enthlt den Bytecode, der von der zugehrigen ActionScript-Datei generiert wird. Diese Dateien enthalten deshalb die kompilierte Version einer Klassendatei (den Bytecode). Flash muss eine ASO-Datei nur in den folgenden Fllen neu generieren:

Die zugehrige AS-Datei wurde gendert. ActionScript-Dateien, die Definitionen enthalten, die von der zugehrigen ActionScriptDatei importiert oder verwendet werden, wurden gendert. ActionScript-Dateien, die in der zugehrigen ActionScript-Datei eingeschlossen sind, wurden gendert.

Der Compiler erstellt ASO-Dateien fr das Caching. Sie werden vermutlich feststellen, dass die erste Kompilierung langsamer verluft als folgende Kompilierungen. Der Grund liegt darin, dass nur die AS-Dateien, die gendert wurden, zu ASO-Dateien rekompiliert werden. Bei unvernderten AS-Dateien liest der Compiler den bereits kompilierten Bytecode direkt aus der ASO-Datei und kompiliert die AS-Datei nicht neu. Beim ASO-Dateiformat handelt es sich um ein Zwischenformat, das nur fr den internen Gebrauch entwickelt wurde. Das Dateiformat ist nicht dokumentiert und ist nicht fr die Weitergabe gedacht. Wenn Flash eine ltere Version einer bearbeiteten Datei zu kompilieren scheint, lschen Sie die ASO-Dateien und fhren Sie die Kompilierung erneut aus. Lschen Sie ASO-Dateien nur, wenn Flash keine anderen Vorgnge wie Syntaxberprfungen oder SWF-Exporte ausfhrt.

270

Klassen

So lschen Sie ASO-Dateien:

Wenn Sie eine FLA-Datei bearbeiten und eine ASO-Datei lschen mchten, whlen Sie eine der folgenden Optionen in der Authoring-Umgebung:

Whlen Sie Steuerung > ASO-Dateien lschen, um ASO-Dateien zu lschen und das Bearbeiten fortzusetzen. Whlen Sie Steuerung > ASO-Dateien lschen und Film testen, um ASO-Dateien zu lschen und die Anwendung zu testen. Whlen Sie Steuerung > ASO-Dateien lschen, um ASO-Dateien zu lschen und das Bearbeiten fortzusetzen. Whlen Sie Steuerung > ASO-Dateien lschen und Projekt testen, um ASO-Dateien zu lschen und die Anwendung zu testen.

Wenn Sie ein ActionScript-Dokument im Skriptfenster bearbeiten:

Die Codemenge, die Sie in eine einzelne Klasse aufnehmen knnen, ist begrenzt. Der Bytecode fr eine Klassendefinition in einer exportierten SWF-Datei kann nicht mehr als 32.767 Byte betragen. berschreitet der Bytecode diese Lnge, wird eine Warnmeldung eingeblendet. Die Gre der Bytecode-Darstellung einer Klasse lsst sich nicht prognostizieren, doch Klassen mit bis zu 1.500 Zeilen berschreiten das Limit gewhnlich nicht. berschreitet Ihre Klasse dieses Limit, sollten Sie einen Teil des Codes in eine andere Klasse verschieben. Im Allgemeinen sollten Klassen bei der objektorientierten Programmierung relativ kurz gehalten werden.

Klassen kompilieren und exportieren

271

Klassen und Gltigkeitsbereiche


Wenn Sie Code in ActionScript-Klassen verschieben, mssen Sie mglicherweise die Verwendung des Schlsselworts this ndern. Wenn Sie beispielsweise eine Klassenmethode mit einer Rckruffunktion verwenden (wie die onLoad()-Methode der LoadVars-Klasse), ist mglicherweise nicht eindeutig, ob sich das Schlsselwort this auf die Klasse oder das LoadVars-Objekt bezieht. In diesem Fall kann es erforderlich sein, wie im folgenden Beispiel einen Zeiger auf die aktuelle Klasse zu erstellen:
So arbeiten Sie mit dem Gltigkeitsbereich und externen Klassendateien:
1. 2.

Whlen Sie Datei > Neu und dann ActionScript-Datei, und klicken Sie auf OK. Geben oder fgen Sie den folgenden Code in das Skriptfenster ein:
/** Product-Klasse Product.as */ class Product { private var productsXml:XML; // Konstruktor // targetXmlStr - String, enthlt den Pfad einer XML-Datei function Product(targetXmlStr:String) { /* Lokalen Verweis auf die aktuelle Klasse erstellen. Selbst wenn Sie sich in der onLoad-Ereignisprozedur von XML befinden, knnen Sie auf die aktuelle Klasse anstelle des XMLPakets verweisen. */ var thisObj:Product = this; // Lokale Variable erstellen, die fr das Laden der XML-Datei // verwendet wird. var prodXml:XML = new XML(); prodXml.ignoreWhite = true; prodXml.onLoad = function(success:Boolean) { if (success) { /* Wenn XML erfolgreich geladen und geparst wird, die Variable productsXml der Klasse auf das geparste XML-Dokument setzen und die Funktion init aufrufen. */ thisObj.productsXml = this; thisObj.init(); } else { /* Fehler beim Laden der XML-Datei. */ trace("error loading XML"); } }; // Laden des XML-Dokuments starten. prodXml.load(targetXmlStr);

272

Klassen

} public function init():Void { // XML-Paket anzeigen. trace(this.productsXml); } }

Da Sie versuchen, in einer onLoad-Prozedur auf die private Mitgliedsvariable zu verweisen, verweist das Schlsselwort this tatschlich auf die Instanz prodXml, und nicht wie erwartet auf die Klasse Product. Sie mssen daher einen Zeiger auf die lokale Klassendatei erstellen, damit Sie direkt aus der Prozedur onLoad auf die Klasse verweisen knnen. Sie knnen diese Klasse nun mit einem Flash-Dokument verwenden.
3. 4. 5. 6.

Speichern Sie den vorherigen ActionScript-Code in einer Datei namens Product.as. Erstellen Sie im gleichen Verzeichnis ein neues Flash-Dokument namens testProduct.fla. Whlen Sie Bild 1 der Hauptzeitleiste aus. Geben Sie den folgenden ActionScript-Code in das Bedienfeld Aktionen ein:
var myProduct:Product = new Product("http://www.helpexamples.com/ crossdomain.xml");

7.

Whlen Sie Steuerung > Film testen, um diesen Code in der Testumgebung zu testen. Der Inhalt des angegebenen XML-Dokuments wird im Bedienfeld Ausgabe angezeigt.

Ein anderer Gltigkeitsbereich, der bei der Arbeit mit diesen Klassen relevant ist, bezieht sich auf statische Variablen und statische Funktionen. Das Schlsselwort static gibt an, dass eine Variable oder Funktion nur einmal pro Klasse erstellt wird, statt in jeder Instanz der Klasse. Sie knnen auf ein statisches Klassenmitglied zugreifen, ohne eine Instanz der Klasse zu erstellen, indem Sie die Syntax someClassName.username verwenden. Weitere Informationen zu statischen Variablen und Funktionen finden Sie in ffentliche, private und statische Methoden und Eigenschaften (Mitglieder) auf Seite 230 und Klassenmitglieder verwenden auf Seite 237. Statische Variablen bieten zudem den Vorteil, dass sie ihre Werte auerhalb ihres Gltigkeitsbereichs nicht verlieren. Im folgenden Beispiel wird gezeigt, wie Sie mit dem Schlsselwort static einen Zhler erstellen knnen, der protokolliert, wie viele Instanzen der Klasse Flash erstellt hat. Da die Variable numInstances statisch ist, wird sie nur einmal fr die ganze Klasse erstellt, also nicht fr jede einzelne Instanz.

Klassen und Gltigkeitsbereiche

273

So verwenden Sie das Schlsselwort static:


1. 2.

Whlen Sie Datei > Neu und dann ActionScript-Datei, und klicken Sie auf OK. Geben Sie den folgenden Code in das Skriptfenster ein:
class User { private static var numInstances:Number = 0; public function User() { User.numInstances++; } public static function get instances():Number { return User.numInstances; } }

Mit dem vorherigen Code wird eine User-Klasse definiert, die protokolliert, wie oft der Konstruktor aufgerufen wurde. Eine private, statische Variable User.numInstances wird innerhalb der Konstruktormethode inkrementiert.
3. 4.

Speichern Sie das Dokument unter dem Namen User.as. Whlen Sie Datei > Neu und dann Flash-Dokument, um eine neue FLA-Datei zu erstellen. Speichern Sie die FLA-Datei im gleichen Verzeichnis, in dem sich auch die Datei User.as befindet. Geben Sie in Bild 1 der Zeitleiste den folgenden ActionScript-Code ein:
trace(User.instances); // 0 var user1:User = new User(); trace(User.instances); // 1 var user2:User = new User(); trace(User.instances); // 2

5.

Mit der ersten Codezeile wird die statische get-Methode instances() aufgerufen, die den Wert der privaten, statischen Variablen numInstances zurckgibt. Der restliche Code bewirkt, dass neue Instanzen der User-Klasse erstellt werden und der aktuelle von der get-Methode instances() zurckgegebene Wert angezeigt wird.
6.

Whlen Sie Steuerung > Film testen, um die Dokumente zu testen.

Weitere Informationen zur Verwendung des Schlsselworts this in Klassen finden Sie in this-Schlsselwort in Klassen verwenden auf Seite 247.

274

Klassen

bergeordnete und integrierte Klassen


Neben den Kernelementen und Konstrukten der ActionScript-Sprache (z. B. die Schleifen for und while) und Grunddatentypen (Zahlen, Strings und Boolesch), die in diesem Handbuch bereits erlutert wurden (siehe Kapitel 3, Daten und Datentypen auf Seite 35 und Kapitel 4, Syntax- und Sprachgrundlagen auf Seite 83), enthlt ActionScript mehrere integrierte Klassen (komplexe Datentypen). Mithilfe dieser Klassen knnen Sie zahlreiche Funktionsmerkmale zur Skripterstellung nutzen. Sie haben die bergeordneten und integrierten Klassen der ActionScript-Sprache bereits in frheren Kapiteln kennen gelernt und werden sie auch im weiteren Verlauf dieses Handbuchs verwenden. Zum Lieferumfang von Flash gehren zahlreiche Klassen, mit denen Sie Ihren SWF-Dateien die verschiedensten Funktionsmerkmale und Interaktionsmglichkeiten hinzufgen knnen. Sie knnen mit diesen Klassen sogar komplexe Anwendungen erstellen. Beispielsweise knnen Sie die Math-Klasse verwenden, um in Ihren Anwendungen Gleichungen zu berechnen, und mit der BitmapData-Klasse lassen sich beispielsweise Pixel und Animationsskripten erstellen. bergeordnete Klassen, die in bergeordnete Klassen auf Seite 277 aufgelistet sind, sind in Flash Player geschrieben. Diese Klasse befinden sich in der Werkzeugleiste Aktionen im Verzeichnis ActionScript 2.0 Classes. Einige bergeordnete Klassen basieren auf der ECMAScript Edition 3 Sprachspezifikation (ECMA-262) und werden als ActionScriptKernklassen bezeichnet. Zu den Kernklassen gehren z. B. die Klassen Array, Boolean, Date und Math. Weitere Informationen zu Paketen finden Sie in Pakete verwenden auf Seite 210. Sie finden die ActionScript-Klassen auf Ihrer Festplatte. Sie befinden sich in den folgenden Klassenordnern:

Windows: Festplatte\Dokumente und Einstellungen\user\Lokale Einstellungen\Anwendungsdaten\Adobe\Flash CS3\Sprache\Configuration\Classes. Macintosh: Festplatte/Users/Benutzername/Library/Application Support/Adobe/Adobe Flash CS3/Sprache/Configuration/Classes.

Die Readme-Datei in diesem Verzeichnis enthlt weitere Informationen zur Struktur. Der Unterschied zwischen ActionScript-Kernklassen und Flash-spezifischen Klassen lsst sich mit dem Unterschied zwischen grundlegenden Kernfunktionen von JavaScript und clientseitigem JavaScript vergleichen. Die clientseitigen JavaScript-Klassen dienen zur Steuerung der Client-Umgebung (Webbrowser und Webseiteninhalt). Auf hnliche Weise dienen die Flash-spezifischen Klassen zur Laufzeitsteuerung der Darstellung und des Verhaltens von Flash-Anwendungen.

bergeordnete und integrierte Klassen

275

Die brigen integrierten ActionScript-Klassen gelten speziell fr Flash und das Flash PlayerObjektmodell. Beispiele hierfr sind die Klassen Camera, MovieClip und LoadVars. Andere Klassen sind in Paketen zusammengefasst, wie flash.display. Alle diese Klassen werden auch als integrierte Klassen bezeichnet (vordefinierte Klassen, mit denen Sie Ihre Anwendungen um zustzliche Funktionalitt erweitern knnen). In den folgenden Abschnitten finden Sie eine Einfhrung zu den integrierten ActionScriptKlassen und eine Beschreibung der grundlegenden Arbeitsschritte, die Sie mit diesen integrierten Klassen durchfhren knnen. Eine bersicht zum Arbeiten mit Klassen und Objekten beim objektorientierten Programmieren finden Sie in Integrierte Klassen verwenden auf Seite 285. Code-Beispiele, die diese Klassen verwenden, finden Sie an verschiedenen Stellen in diesem Handbuch. Informationen zu Sprachelementen (wie Konstanten, Operatoren und Direktiven) finden Sie in Kapitel 4, Syntax- und Sprachgrundlagen auf Seite 83 Weitere Informationen zur Arbeit mit Klassen auf oberster Ebene und integrierten Klassen finden Sie in den folgenden Themen:

bergeordnete Klassen auf Seite 277 Das Paket flash.display auf Seite 281 Das Paket flash.external auf Seite 282 Das Paket flash.filters auf Seite 282 Das Paket flash.geom auf Seite 283 Das Paket flash.net auf Seite 284 Das Paket flash.text auf Seite 284 Das Paket mx.lang auf Seite 284 Die Pakete System und TextField auf Seite 285

Andere Sprachelemente
Des gibt andere Sprachelemente auerhalb von Klassen, aus denen ActionScript besteht. Hierzu gehren Direktiven, Konstanten, globale Funktionen, globale Eigenschaften, Operatoren und Anweisungen. Informationen zur Verwendung dieser Sprachelementen finden Sie in den folgenden Themen:

Kapitel 4, Syntax- und Sprachgrundlagen Kapitel 5, Funktionen und Methoden

276

Klassen

Eine Liste dieser Sprachelemente finden Sie in den folgenden Abschnitten des ActionScript 2.0-Referenzhandbuchs:

Compiler-Direktiven Konstanten Globale Funktionen Globale Eigenschaften Operatoren Anweisungen

bergeordnete Klassen
Die bergeordnete Ebene enthlt die Klassen und globalen Funktionen in ActionScript, die hufig Grundfunktionen fr Anwendungen bereitstellen. Kernklassen stammen direkt aus ECMAScript und umfassen Array, Boolean, Date, Error, Function, Math, Number, Object, String und System. Weitere Informationen zu den einzelnen Klassen finden Sie in der folgenden Tabelle.
H I NW E I S

Die CustomActions- und XMLUI-Klassen sind nur in der Flash-Authoring-Umgebung verfgbar.

Klasse
Accessibility

Beschreibung
Mit der Accessibility-Klasse wird die Kommunikation zwischen SWFDateien und Bildschirmleseprogrammen verwaltet. Die Methoden dieser Klasse werden mit der globalen Eigenschaft _accProps fr die Steuerung zugnglicher Eigenschaften von Movieclips, Schaltflchen und Textfeldern zur Laufzeit eingesetzt. Siehe Accessibility. Die Array-Klasse steht fr Arrays in ActionScript. Alle Array-Objekte sind Instanzen dieser Klasse. Die Array-Klasse enthlt Methoden und Eigenschaften fr die Arbeit mit Array-Objekten. Siehe Array. Diese Klasse bietet Funktionalitt fr die Ereignisbenachrichtigung und das Listener-Management, die anderen Objekten hinzugefgt werden kann. Siehe AsBroadcaster. Bei der Boolean-Klasse handelt es sich um einen Wrapper fr Boolesche Werte (true oder false). Siehe Boolean.>.

Array

AsBroadcaster

Boolean

bergeordnete und integrierte Klassen

277

Klasse
Button

Beschreibung
Die Button-Klasse enthlt Methoden, Eigenschaften und Ereignisprozeduren zum Arbeiten mit Schaltflchen. Siehe Button. Die integrierte Button-Klasse darf nicht mit der ButtonKomponentenklasse verwechselt werden, die der Version 2Komponente Button zugeordnet ist. Die Camera-Klasse bietet Zugriff auf die an das System angeschlossene Kamera des Benutzers. In Kombination mit Flash Media Server knnen Sie in Ihren SWF-Dateien Bilder von dieser Kamera aufnehmen, aufzeichnen und bertragen. Siehe Camera. Mit der Color-Klasse knnen Sie den RGB-Farbwert und die Farbtransformation von Movieclip-Instanzen einstellen und die festgelegten Werte abrufen. In Flash Player 8 wurde auf die ColorKlasse zugunsten der ColorTransform-Klasse verzichtet. Weitere Informationen zu Farbtransformationen finden Sie unter ColorTransform (flash.geom.ColorTransform). Mit der ContextMenu-Klasse legen Sie den Inhalt des FlashPlayerKontextmens zur Laufzeit fest. Sie knnen den verschiedenen ContextMenu-Objekten die MovieClip-, Button- oder TextFieldObjekte ber die Eigenschaft menu der jeweiligen Klassen zuweisen. Sie knnen ContextMenu-Objekten auch benutzerdefinierte Menelemente mithilfe der ContextMenuItem-Klasse hinzufgen. Siehe ContextMenu. Mithilfe der ContextMenuItem-Klasse erstellen Sie neue Menelemente, die im Kontextmen von Flash Player angezeigt werden. Mit dieser Klasse neu erstellte Menelemente knnen dem Kontextmen von Flash Player ber die ContextMenu-Klasse hinzugefgt werden. Siehe ContextMenuItem. Mit der CustomActions-Klasse verwalten Sie benutzerdefinierte Aktionen, die beim Authoring-Tool registriert sind. Siehe CustomActions. Die Date-Klasse dient der Darstellung von Datum- und Uhrzeitangaben in ActionScript. Sie untersttzt Vorgnge, mit denen Datum und Uhrzeit manipuliert werden knnen. Mithilfe der Klasse knnen auch das aktuelle Datum und die aktuelle Uhrzeit vom Betriebssystem abgerufen werden. Siehe Date. Die Error-Klasse enthlt Informationen zu Laufzeitfehlern in Ihren Skripts. Die throw-Anweisung wird in der Regel zum Erstellen von Fehlerbedingungen eingesetzt, die sich dann ber die try..catch..finally-Anweisung bearbeiten lassen. Siehe Error.

Camera

Color

ContextMenu

ContextMenuItem

CustomActions

Date

Error

278

Klassen

Klasse
Function

Beschreibung
Bei der Function-Klasse handelt es sich um die Klassendarstellung aller ActionScript-Funktionen, einschlielich nativer ActionScriptFunktionen und den von Ihnen erstellten Funktionen. Siehe Function. Die Key-Klasse enthlt Methoden und Eigenschaften zum Abrufen von Daten ber die Tastatur und gedrckte Tasten. Siehe Key. Mit der LoadVars-Klasse knnen Sie Variablen zwischen SWFDateien und Servern in Form von Name-/Wert-Paaren bertragen. Siehe LoadVars. Mit der LocalConnection-Klasse knnen Sie SWF-Dateien entwickeln, die ohne die Methode fscommand() oder JavaScript untereinander Anweisungen versenden knnen. Siehe LocalConnection. ber die Math-Klasse kann auf allgemeine mathematische Konstanten und verschiedene mathematische Funktionen zugegriffen werden. Alle Eigenschaften und Methoden der Math-Klasse sind statisch und mssen ber die Syntax Math.method(parameter) oder Math.constant aufgerufen werden. Siehe Math. Die Microphone-Klasse bietet Zugriff auf das an das System angeschlossene Mikrofon des Benutzers. In Kombination mit Flash Media Server knnen Sie in Ihren SWF-Dateien Audiosignale vom Mikrofon eines Benutzers aufzeichnen und bertragen. Siehe Microphone. Mit der Mouse-Klasse knnen Sie die Maus in einer SWF-Datei steuern. So lsst sich beispielsweise der Mauszeiger ein- oder ausblenden. Siehe Mouse. Jeder Movieclip in einer SWF-Datei ist eine Instanz der MovieClipKlasse. Mit den Methoden und Eigenschaften dieser Klasse werden Movieclip-Objekte gesteuert. Siehe MovieClip. Mit dieser Klasse knnen Sie Listener-Rckrufe einrichten, die Statusinformationen enthalten, whrend SWF-, JPEG-, GIF- und PNG-Dateien in Movieclips geladen werden. Siehe MovieClipLoader. Mit der NetConnection-Klasse knnen Sie eine lokale StreamingVerbindung herstellen, um Flash Video-Dateien (FLV) von einer HTTP-Adresse oder vom lokalen Dateisystem aus abzuspielen. Siehe NetConnection. Die NetStream-Klasse steuert die Wiedergabe von FLV-Dateien von einem lokalen Dateisystem oder einer HTTP-Adresse. Siehe NetStream.

Key LoadVars

LocalConnection

Math

Microphone

Mouse

MovieClip

MovieClipLoader

NetConnection

NetStream

bergeordnete und integrierte Klassen

279

Klasse
Number Object

Beschreibung
Bei der Number-Klasse handelt es sich um einen Wrapper fr den Grunddatentyp Zahl. Siehe Number. Die Object-Klasse befindet sich auf der obersten Stufe der ActionScript-Klassenhierarchie. Alle brigen Klassen bernehmen ihre Methoden und Eigenschaften. Siehe Object. Mit der PrintJob-Klasse knnen Sie Inhalt einer SWF-Datei drucken. Hierzu gehrt auch Inhalt, der dynamisch wiedergegeben wird, oder mehrere Seiten umfassende Dokumente. Siehe PrintJob. Mit der Selection-Klasse knnen Sie festlegen und steuern, in welchem Textfeld sich die Einfgemarke befindet, d. h., welches Feld den Fokus hat. Siehe Selection. Mit der SharedObjekt-Klasse knnen lokale Daten hnlich wie Cookies dauerhaft auf dem Client-Computer gespeichert werden. Diese Klasse ermglicht den Datenaustausch in Echtzeit zwischen den Objekten auf dem Client. Siehe SharedObject. Mit der Sound-Klasse werden akustische Signale in SWF-Dateien gesteuert. Siehe Sound. Die Stage-Klasse enthlt Informationen zu den Bemaungen, der Ausrichtung und dem Skalierungsmodus einer SWF-Datei. Hier werden auch Informationen zu nderungen der Bhnengre protokolliert. Siehe Stage. Bei der String-Klasse handelt es sich um einen Wrapper fr den Grunddatentyp String, mit dem Sie die Methoden und Eigenschaften des String-Objekts zum Manipulieren von Werten des Grunddatentyps String aufrufen knnen. Siehe String. Die System-Klasse dient zum Abrufen von Informationen zu Flash Player und zum System, auf dem Flash Player ausgefhrt wird (z. B. Bildschirmauflsung und Systemsprache). Auerdem knnen Sie mit dieser Klasse das Bedienfeld Einstellungen in Flash Player ein- oder ausblenden und die Sicherheitseinstellungen fr SWFDateien ndern. Siehe System. Mit der TextField-Klasse knnen dynamische Textfelder und Eingabetextfelder gesteuert werden, es knnen also Formatierungsinformationen abgerufen, Ereignisprozeduren aufgerufen und Eigenschaften wie Alpha und Hintergrundfarbe gendert werden. Siehe TextField. Mit der TextFormat-Klasse knnen Sie Formatierungsstile auf Zeichen oder Abstze in einem TextField-Objekt anwenden. Siehe TextFormat.

PrintJob

Selection

SharedObject

Sound Stage

String

System

TextField

TextFormat

280

Klassen

Klasse
TextSnapshot

Beschreibung
Mit dem TextSnapshot-Objekt knnen Sie auf statischen Text in einem Movieclip zugreifen und dessen Layout bearbeiten. Siehe TextSnapshot. Die Video-Klasse dient zum Anzeigen von Video-Objekten in SWF-Dateien. In Kombination mit Flash Media Server knnen Sie mit dieser Klasse Live-Streaming-Video in einer SWF-Datei oder eine Flash Video-Datei (FLV) in Flash anzeigen. Siehe Video. Diese Klasse enthlt Methoden und Eigenschaften fr die Arbeit mit XML-Objekten. Siehe XML. Die XMLNode-Klasse stellt einen einzelnen Knoten in einer XML-Dokumentstruktur dar. Sie bildet die bergeordnete Klasse fr die XML-Klasse. Siehe XMLNode. Mit der XMLSocket-Klasse knnen Sie eine permanente SocketVerbindung zwischen einem Server und einem Client einrichten, auf dem Flash Player ausgefhrt wird. Client-Sockets ermglichen eine Datenbertragung mit kurzen Latenzzeiten, wie beispielsweise fr Chat-Anwendungen in Echtzeit erforderlich. Siehe XMLSocket. Das XMLUI-Objekt ermglicht die Kommunikation mit SWF-Dateien, die als benutzerdefinierte Benutzeroberflchen fr die Erweiterungsfunktionen des Flash-Authoring-Tools verwendet werden (wie z. B. Verhalten, Befehle, Effekte und Tools). Siehe XMLUI.

Video

XML XMLNode

XMLSocket

XMLUI

Das Paket flash.display


Das Paket flash.display enthlt die BitmapData-Klasse, mit der Sie Anzeigebereiche erstellen knnen.
Klasse
BitmapData

Beschreibung
Mit der BitmapData-Klasse knnen Sie transparente oder undurchsichtige Bitmapbilder mit willkrlich festgelegter Gre in einem Dokument erstellen und zur Laufzeit auf verschiedene Weise bearbeiten. Siehe BitmapData (flash.display.BitmapData).

bergeordnete und integrierte Klassen

281

Das Paket flash.external


Das Paket flash.external ermglicht die Kommunikation mit dem Flash Player-Container unter Verwendung von ActionScript-Code. Wenn Sie beispielsweise eine SWF-Datei in eine HTML-Seite einbetten, ist diese HTML-Seite der Container. Sie knnten ber die ExternalInterface-Klasse und JavaScript mit der HTML-Seite kommunizieren. Dies wird auch als External-API bezeichnet.
Klasse
ExternalInterface

Beschreibung
Die ExternalInterface-Klasse bildet die External-API. Dieses Subsystem ermglicht die Kommunikation zwischen ActionScript und dem Flash Player-Container (wie eine HTML-Seite mit JavaScript) oder einer Desktop-Anwendung, die Flash Player verwendet. Siehe ExternalInterface (flash.external.ExternalInterface).

Das Paket flash.filters


Das Paket flash.filters enthlt Klassen fr die Bitmap-Filtereffekte, die in Flash Player 8 zur Verfgung stehen. Mit Filtern knnen Sie ausdrucksstarke visuelle Effekte auf Image- und MovieClip-Instanzen anwenden, wie beispielsweise Weichzeichnung, Schliff, Glhen und Schlagschatten. Weitere Informationen zu den einzelnen Klassen finden Sie unter den Querverweisen, die in der folgenden Tabelle genannt werden.
Klasse
BevelFilter

Beschreibung
Mit der BevelFilter-Klasse knnen Sie einen Schliffeffekt auf Movieclip-Instanzen anwenden. Siehe BevelFilter (flash.filters.BevelFilter). Die BitmapFilter-Klasse ist die Basisklasse fr alle Filtereffekte. Siehe BitmapFilter (flash.filters.BitmapFilter). Mit der BlurFilter-Klasse knnen Sie einen Weichzeichnungseffekt auf Movieclip-Instanzen anwenden. Siehe BlurFilter (flash.filters.BlurFilter). Mit der ColorMatrixFilter-Klasse knnen Sie eine 4x5Matrixtransformation auf die ARGB-Farbwerte und Alphawerte der einzelnen Pixel in einem Bild anwenden. Nachdem die Transformation durchgefhrt wurde, knnen Sie ein Ergebnis mit neuen ARGB-Farbwerten und Alphawerten generieren. Siehe ColorMatrixFilter (flash.filters.ColorMatrixFilter).

BitmapFilter BlurFilter

ColorMatrixFilter

282

Klassen

Klasse
ConvolutionFilter

Beschreibung
Mit der ConvolutionFilter-Klasse knnen Sie einen MatrixConvolution-Filtereffekt anwenden. Siehe ConvolutionFilter (flash.filters.ConvolutionFilter). Mit der DisplacementMapFilter-Klasse knnen Sie die Pixelwerte eines angegebenen Bilds (Verschiebungsmatrix) verwenden, um die ursprngliche Instanz (Movieclip), auf die Sie den Filter anwenden, rumlich zu verschieben. Siehe DisplacementMapFilter (flash.filters.DisplacementMapFilter). Mit der DropShadowFilter-Klasse knnen Sie einem Movieclip einen Schlagschatten hinzufgen. Siehe DropShadowFilter (flash.filters.DropShadowFilter). Mit der GlowFilter-Klasse knnen Sie einen Glheffekt auf einen Movieclip anwenden. Siehe GlowFilter (flash.filters.GlowFilter). Mit der GradientBevelFilter-Klasse knnen Sie einen geschliffenen Farbverlaufseffekt auf einen Movieclip anwenden. Siehe GradientBevelFilter (flash.filters.GradientBevelFilter). Mit der GradientGlowFilter-Klasse knnen Sie einen Glheffekt mit Farbverlauf auf einen Movieclip anwenden. Siehe GradientGlowFilter (flash.filters.GradientGlowFilter).

DisplacementMapFilter

DropShadowFilter

GlowFilter GradientBevelFilter

GradientGlowFilter

Das Paket flash.geom


Das Paket flash.geom enthlt Geometrieklassen, wie beispielsweise fr Punkte, Rechtecke und Transformationsmatrizen. Diese Klassen untersttzen die BitmapData-Klasse und die Bitmap-Zwischenspeicherung. Weitere Informationen zu den einzelnen Klassen finden Sie unter den Querverweisen, die in der folgenden Tabelle genannt werden.
Klasse
ColorTransform

Beschreibung
Mit der ColorTransform-Klasse knnen Sie die RGB-Farbwerte und Farbtransformation einer Instanz mathematisch festlegen. Sie knnen diese Werte abrufen, nachdem sie festgelegt wurden. Siehe ColorTransform (flash.geom.ColorTransform). Bildet eine Transformationsmatrix, die bestimmt, wie Punkte eines Koordinatenraums einem anderen Koordinatenraum zugeordnet werden. Siehe Matrix (flash.geom.Matrix). Das Point-Objekt ist eine Position in einem 2D-Koordinatensystem, in dem x die horizontale Achse und y die vertikale Achse darstellt. Siehe Point (flash.geom.Point).

Matrix

Point

bergeordnete und integrierte Klassen

283

Klasse
Rectangle Transform

Beschreibung
Mit der Rectangle-Klasse knnen Rectangle-Objekte erstellt und gendert werden. Siehe Rectangle (flash.geom.Rectangle). Sammelt Daten zu Farbtransformationen und Koordinatennderungen, die auf eine Objektinstanz angewendet werden. Siehe Transform (flash.geom.Transform).

Das Paket flash.net


Das Paket flash.net enthlt Klassen, mit denen Dateien zwischen dem Computer eines Benutzers und dem Server bertragen werden knnen. Weitere Informationen zu den einzelnen Klassen finden Sie unter den Querverweisen, die in der folgenden Tabelle genannt werden.
Klasse
FileReference

Beschreibung
Mit den FileReference-Klasse knnen Dateien zwischen dem Computer eines Benutzers und dem Server bertragen werden. Siehe FileReference (flash.net.FileReference). Mit der FileReferenceList-Klasse knnen Dateien vom Computer eines Benutzers auf einen Server hochgeladen werden. Siehe FileReferenceList (flash.net.FileReferenceList).

FileReferenceList

Das Paket flash.text


Das Paket flash.text enthlt die TextRenderer-Klasse zum Arbeiten mit dem erweiterten Anti-Aliasing in Flash Player 8.
Klasse
TextRenderer

Beschreibung
Diese Klasse bietet die Funktionalitt fr das erweiterte Anti-Aliasing in Flash Player 8. Siehe TextRenderer (flash.text.TextRenderer).

Das Paket mx.lang


Das Paket mx.lang enthlt die Locale-Klasse zum Arbeiten mit mehrsprachigem Text.
Klasse
Locale

Beschreibung
Mit dieser Klasse knnen Sie steuern, wie mehrsprachiger Text in einer SWF-Datei angezeigt wird. Siehe Locale (mx.lang.Locale).

284

Klassen

Die Pakete System und TextField


Das System-Paket enthlt die Capabilities-, IME- und Security-Klassen. Diese Klassen beziehen sich auf Clienteinstellungen, die Ihre Anwendung in Flash Player beeinflussen knnen. Weitere Informationen zu den einzelnen Klassen finden Sie unter den Querverweisen, die in der folgenden Tabelle genannt werden.
Klasse
Capabilities

Beschreibung
Die Capabilities-Klasse bestimmt die Fhigkeiten des Systems und des Flash Players, die fr das Hosten der SWF-Datei verwendet werden. Hiermit knnen Sie Inhalt an verschiedene Formate anpassen. Siehe capabilities (System.capabilities). Mit der IME-Klasse knnen Sie den Eingabemethodeneditor (Input Method Editor, IME) des Betriebssystems direkt bearbeiten. Der Eingabemethodeneditor befindet sich in dem Flash Player, der auf einem Client ausgefhrt wird. Siehe IME (System.IME). Die Security-Klasse enthlt Methoden, die angeben, wie SWF-Dateien in verschiedenen Domnen untereinander kommunizieren knnen. Siehe security (System.security).

IME

Security

Das TextField-Paket enthlt die StyleSheet-Klasse, mit der Sie CSS-Stile auf Text anwenden knnen.
Klasse
StyleSheet

Beschreibung
Mit der StyleSheet-Klasse knnen Sie ein Styesheet-Objekt erstellen, das Textformatierungsregeln enthlt, beispielsweise fr Schriftgre und Farbe. Siehe StyleSheet (TextField.StyleSheet).

Integrierte Klassen verwenden


Beim objektorientierten Programmieren (OOP) definiert eine Klasse eine Objektkategorie. Eine Klasse beschreibt die Eigenschaften (Daten) und das Verhalten (Methoden) fr ein Objekt. Dies lsst sich mit Bauplnen in der Architektur vergleichen, welche die Merkmale von Gebuden beschreiben. Weitere Informationen zu Klassen und den Konzepten der objektorientierten Programmierung finden Sie in den folgenden Abschnitten:

Grundlagen der objektorientiertem Programmierung auf Seite 212 Benutzerdefinierte Klassendateien schreiben auf Seite 216

Integrierte Klassen verwenden

285

Flash verfgt ber zahlreiche integrierte Klassen, die Sie in Ihrem Code verwenden knnen (siehe bergeordnete und integrierte Klassen auf Seite 275). So knnen Sie Ihren Anwendungen auf einfache Weise eine Interaktivitt hinzufgen. Um die durch eine integrierte Klasse definierten Eigenschaften und Methoden verwenden zu knnen, mssen Sie zuerst eine Instanz dieser Klasse erstellen. Hiervon ausgenommen sind Klassen mit statischen Elementen. Das Verhltnis zwischen einer Instanz und ihrer Klasse hnelt dem eines Hauses und den entsprechenden Entwrfen des Architekten. Lesen Sie hierzu auch bergeordnete und integrierte Klassen auf Seite 275. Weitere Informationen zur Verwendung der in Flash integrierten Klassen finden Sie in den folgenden Themen:

Neue Instanz einer integrierten Klasse erstellen auf Seite 286 Auf integrierte Objekteigenschaften zugreifen auf Seite 287 Integrierte Objektmethoden aufrufen auf Seite 288 Statische Klassenmitglieder auf Seite 288 Klassendateien vorausladen auf Seite 289 Klassen ausschlieen auf Seite 288

Neue Instanz einer integrierten Klasse erstellen


Zum Erstellen einer Instanz einer ActionScript-Klasse rufen Sie die Konstruktorfunktion der Klasse mit dem Operator new auf. Die Konstruktorfunktion hat immer denselben Namen wie die zugehrige Klasse und gibt eine Instanz der Klasse zurck, die Sie in der Regel einer Variablen zuweisen. Der folgende Code erstellt beispielsweise ein neues Sound-Objekt:
var song_sound:Sound = new Sound();

In einigen Fllen mssen Sie keine Instanz einer Klasse erstellen, um ihre Eigenschaften und Methoden zu verwenden. Weitere Informationen finden Sie unter Statische Klassenmitglieder auf Seite 288.

286

Klassen

Auf integrierte Objekteigenschaften zugreifen


Mithilfe des Punktoperators (.) knnen Sie auf den Wert einer Eigenschaft in einem Objekt zugreifen. Hierbei steht der Name des Objekts links und der Name der Eigenschaft rechts vom Punkt. In der folgenden Anweisung ist my_obj das Objekt und firstName die Eigenschaft:
my_obj.firstName

Durch den folgenden Code wird ein neues Array-Objekt erstellt und seine length-Eigenschaft angezeigt:
var my_array:Array = new Array("apples", "oranges", "bananas"); trace(my_array.length); // 3

Sie knnen fr den Zugriff auf die Eigenschaften eines Objekts auch den ArrayZugriffsoperator ([]) verwenden, also z. B. den Array-Zugriffsoperator fr das Debugging einsetzen. Das folgende Beispiel durchluft ein Objekt, um all seine Eigenschaften anzuzeigen:
So durchlaufen Sie den Inhalt eines Objekts:
1. 2.

Erstellen Sie ein neues Flash-Dokument und speichern Sie es unter dem Namen forin.fla. Fgen Sie Bild 1 der Hauptzeitleiste den folgenden ActionScript-Code hinzu:
var results:Object = {firstName:"Tommy", lastName:"G", age:7, avg:0.336, b:"R", t:"L"}; for (var i:String in results) { trace("the value of [" + i + "] is: " + results[i]); }

Der oben stehende Code definiert ein neues Objekt mit der Bezeichnung results und definiert Werte fr firstName, lastName, age, avg, b und t. Eine for..in-Schleife verfolgt jede Eigenschaft im results-Objekt und zeigt deren Werte im Bedienfeld Ausgabe an.
3.

Whlen Sie Steuerung > Film testen, um das Flash-Dokument zu testen.

Weitere Informationen zu Operatoren, einschlielich dot- und array access-Operatoren finden Sie in Operatoren auf Seite 151. Weitere Informationen zu Methoden und Eigenschaften finden Sie in Kapitel 5, Funktionen und Methoden auf Seite 177. Beispiele zum Arbeiten mit den Eigenschaften der integrierten MovieClip-Klasse finden Sie in Kapitel 10, Mit Movieclips arbeiten auf Seite 351. Beispiele zum Arbeiten mit den Eigenschaften der TextField-, String-, TextRenderer- und TextFormat-Klassen finden Sie in Kapitel 11, Mit Text und Strings arbeiten auf Seite 385.

Integrierte Klassen verwenden

287

Integrierte Objektmethoden aufrufen


Zum Aufruf einer Objektmethode verwenden Sie den Operator (.) gefolgt von der Methode. Mit dem folgenden Code wird beispielsweise ein neues Sound-Objekt erstellt und seine Methode setVolume() aufgerufen:
var my_sound:Sound = new Sound(this); my_sound.setVolume(50);

Beispiele zum Arbeiten mit den Methoden der integrierten MovieClip-Klasse finden Sie in Kapitel 10, Mit Movieclips arbeiten auf Seite 351. Beispiele zum Arbeiten mit den Methoden der integrierten TextField-, String-, TextRenderer- und TextFormat-Klassen finden Sie in Kapitel 11, Mit Text und Strings arbeiten auf Seite 385.

Statische Klassenmitglieder
Einige integrierte ActionScript-Klassen haben Klassenmitglieder (oder statische Mitglieder). Klassenmitglieder (Eigenschaften und Methoden) werden nicht von der Instanz der Klasse, sondern von dem eigentlichen Klassennamen aufgerufen. Sie erstellen also keine Instanz der Klasse, um diese Eigenschaften und Methoden zu verwenden. Alle Eigenschaften der Math-Klasse sind zum Beispiel statisch. Mit dem folgenden Code wird die Methode max() der Math-Klasse zur Bestimmung der greren von zwei Zahlen aufgerufen:
var largerNumber:Number = Math.max(10, 20); trace(largerNumber); // 20

Weitere Informationen zu den statischen Methoden der Math-Klasse und Beispiele deren Verwendung finden Sie unter dem Eintrag Math im ActionScript 2.0-Referenzhandbuch.

Klassen ausschlieen
Um die Gre einer SWF-Datei zu reduzieren, mchten Sie eventuell Klassen von der Kompilierung ausschlieen, jedoch weiterhin auf sie zugreifen und fr die Typberprfung verwenden knnen. Dies ist beispielsweise der Fall, wenn Sie eine Anwendung mit mehreren SWF-Dateien oder gemeinsamen Bibliotheken entwickeln, besonders dann, wenn zahlreiche dieser Dateien und Bibliotheken auf dieselben Klassen zugreifen. Durch das Ausschlieen dieser Klassen knnen Sie in den entsprechenden Dateien doppelte Klassen vermeiden. Weitere Informationen zum Ausschlieen von Klassen finden Sie in den folgenden Themen:

Klassendateien vorausladen auf Seite 289

288

Klassen

So schlieen Sie Klassen von der Kompilierung aus:


1. 2.

Erstellen Sie eine neue XML-Datei. Nennen Sie die XML-Datei FLA_Dateiname_exclude.xml, wobei FLA_Dateiname der Name der FLA-Datei ohne Erweiterung ist. Wenn die FLA-Datei beispielsweise sellStocks.fla heit, muss der Name der XML-Datei sellStocks_exclude.xml lauten.

3. 4.

Speichern Sie die Datei im gleichen Verzeichnis wie die FLA-Datei. Fgen Sie folgende Tags in die XML-Datei ein:
<excludeAssets> <asset name="className1" /> <asset name="className2" /> </excludeAssets>

Die in den <asset>-Tags fr die Namensattribute angegebenen Werte sind die Namen der Klassen, die Sie aus der SWF-Datei ausschlieen mchten. Fgen Sie so viele Werte wie erforderlich hinzu. Die folgende XML-Datei schliet z. B. die Klassen mx.core.UIObject und mx.screens.Slide aus der SWF-Datei aus:
<excludeAssets> <asset name="mx.core.UIObject" /> <asset name="mx.screens.Slide" /> </excludeAssets>

Weitere Informationen hierzu finden Sie in Klassendateien vorausladen auf Seite 289.

Klassendateien vorausladen
In diesem Abschnitt werden einige der Verfahren zum Vorausladen und Exportieren von Klassen in Flash beschrieben (einschlielich der Klassen, die von Komponenten in der Version 2 der Component Architecture verwendet werden). Das Vorausladen besteht aus dem Laden einiger der in einer SWF-Datei enthaltenen Daten, bevor der Benutzer beginnt, mit dieser zu interagieren. Wenn Sie externe Klassen verwenden, importiert Flash Klassen beim ersten Bild einer SWF-Datei. Diese Daten sind das erste Element, das in eine SWF-Datei geladen wird. Dies entspricht in etwa den Komponentenklassen, da die Architektur fr Komponenten ebenfalls in das erste Bild einer SWF-Datei geladen wird. Beim Erstellen von umfangreichen Anwendungen, bei denen groe Mengen an Daten importiert werden mssen, kann die Ladezeit recht lang werden. Sie mssen daher mit diesen Daten mit Bedacht umgehen. Dies wird in den folgenden Verfahren beschrieben.

Integrierte Klassen verwenden

289

Da die Klassen zuerst geladen werden, treten beim Erstellen einer Fortschrittsleiste oder dem Laden von Animationen eventuell Probleme auf. Die Klassen werden vor der Fortschrittsleiste geladen, Sie mchten jedoch, dass die Fortschrittsleiste den Ladefortschritt aller Daten, einschlielich der Klassen, anzeigt. Die Klassen sollen also nach dem Laden anderer Teile der SWF-Datei, jedoch vor der Verwendung von Komponenten geladen werden. Das folgende Verfahren zeigt, wie Sie das Bild ndern, in dem Klassen in eine SWF-Datei geladen werden.
So whlen Sie ein anderes Bild fr die Klassen, die in eine SWF-Datei geladen werden:
1. 2. 3.

Whlen Sie Datei > Einstellungen fr Verffentlichungen. Whlen Sie die Registerkarte Flash und klicken Sie auf die Schaltflche Einstellungen. Geben Sie in das Textfeld Klassen exportieren in Bild die Nummer des neuen Bildes ein, in das die Klassen geladen werden. Klicken Sie auf OK.

4.

Sie knnen die Klassen erst verwenden, wenn der Abspielkopf das Bild erreicht, in das sie geladen werden sollen. Beispielsweise bentigen Komponenten der Version 2 zur Ausfhrung ihrer Funktionen Klassen. Sie mssen die Komponenten also nach dem Exportbild fr ActionScript 2.0-Klassen laden. Wenn Sie im dritten Bild Klassen exportieren, knnen Sie diese Klassen erst verwenden, wenn der Abspielkopf das dritte Bild erreicht und die Daten ldt. Wollen Sie eine Datei vorausladen, die Klassen verwendet (z. B. Komponentenklassen der Version 2), mssen Sie die Komponenten in die SWF-Datei vorausladen. Hierzu mssen Sie Ihre Komponenten in ein anderes Bild in der SWF-Datei laden. In der Standardeinstellung werden die Komponenten der Benutzeroberflche in das Bild 1 der SWF-Datei exportiert. Achten Sie also darauf, das Kontrollkstchen In erstes Bild exportieren im Dialogfeld Verknpfung der Komponenten zu deaktivieren.
H I N W E IS 290

Wenn Sie eine Komponente mit ActionScript auf die Bhne ziehen, mssen Sie eine Instanz der Komponente, die Sie hinzufgen mchten, auf die Montageflche ziehen (der Bereich um die Bhne). So teilen Sie Flash mit, dass Sie die Komponente in Ihrer Anwendung verwenden, und dass es sich nicht um ein unbenutztes Bibliotheksobjekt handelt. Denken Sie daran, Flash fgt SWF-Dateien keine unbenutzten Bibliotheksobjekte hinzu.

Klassen

Werden Komponenten nicht in das erste Bild geladen, knnen Sie eine benutzerdefinierte Fortschrittsleiste fr das erste Bild der SWF-Datei erstellen. Verweisen Sie erst dann auf Komponenten in Ihrem ActionScript oder nehmen Sie Komponenten auf der Bhne auf, wenn die Klassen fr das im Textfeld Klassen exportieren in Bild angegebene Bild geladen wurden.
A C H T UN G

Sie knnen die Komponenten erst nach den ActionScript-Klassen, die sie verwenden, exportieren.

Integrierte Klassen verwenden

291

292

Klassen

KAPITEL 7

Vererbung
In Kapitel 6, Klassen haben Sie gelernt, wie Sie Klassendateien schreiben und Code mithilfe von Klassen in externen Dateien strukturieren knnen. Dort wurde auch gezeigt, wie Klassendateien in Paketen zusammengefasst werden knnen. Im vorliegenden Kapitel lernen Sie nun, wie Sie komplexere Klassen schreiben und damit die Funktionalitt einer vorhandenen Klasse erweitern. Ein Verstndnis dieser komplexeren Klassen ist wichtig, damit Sie eigenen oder vorhandenen Klassen neue Methoden und Eigenschaften hinzufgen knnen. Weitere Informationen zur Vererbung finden Sie unter Vererbung auf Seite 293. Weitere Informationen zu Methoden und Eigenschaften finden Sie in Kapitel 5, Funktionen und Methoden auf Seite 177. Weitere Informationen zur Vererbung finden Sie in den folgenden Themen:
Vererbung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .293 Unterklassen in Flash schreiben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .296 Polymorphismus in einer Anwendung einsetzen. . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

Vererbung
In Kapitel 6, Klassen wurde gezeigt, wie Sie eine Klassendatei und damit benutzerdefinierte Datentypen erstellen. Beim Erstellen benutzerdefinierter Klassendateien haben Sie gesehen, wie Code von der Zeitleiste in externe Dateien verschoben werden kann. In externen Dateien lsst sich der Code einfacher bearbeiten. Sie haben die Erstellung benutzerdefinierter Klassen in Grundzgen kennen gelernt. Nun wird eine OOP-Technik vorgestellt, mit der Sie Unterklassen erstellen oder Klassen erweitern knnen, um auf Grundlage einer vorhandenen Klasse neue Klassen zu erstellen.

293

Die objektorientierte Programmierung bietet unter anderem den Vorteil, dass Sie Unterklassen einer Klasse erstellen knnen. Die Unterklasse bernimmt (erbt) alle Eigenschaften und Methoden der bergeordneten Klasse. Wenn Sie beispielsweise eine Unterklasse der MovieClip-Klasse erstellen (die MovieClip-Klasse erweitern), entsteht eine benutzerdefinierte Klasse, die die MovieClip-Klasse erweitert. Die Unterklasse bernimmt alle Eigenschaften und Methoden der MovieClip-Klasse. Sie knnen auch mehrere Klassen erstellen, die eine benutzerdefinierte bergeordnete Klasse erweitern. So kann beispielsweise die Salat-Klasse die bergeordnete Gemse-Klasse erweitern. Normalerweise definieren Sie in einer Unterklasse zustzliche Methoden und Eigenschaften zum Einsatz in einer Anwendung, so dass die bergeordnete Klasse erweitert wird. Unterklassen knnen auch die von einer bergeordneten Klasse bernommenen Methoden auer Kraft setzen (also durch ihre eigenen Definitionen ersetzen). Wenn eine Unterklasse eine von der bergeordneten Klasse geerbte Methode auer Kraft setzt, knnen Sie innerhalb der Unterklasse nicht mehr auf die Definition der bergeordneten Klasse zugreifen. Die einzige Ausnahme zu der oben genannten Regelung besteht darin, dass wenn Sie sich innerhalb der Konstruktorfunktion der Unterklasse befinden, Sie den Konstruktor der bergeordneten Klasse mit der super-Anweisung aufrufen knnen. Weitere Informationen hierzu finden Sie in Methoden und Eigenschaften auer Kraft setzen auf Seite 300. Angenommen, Sie erstellen die Sugetier-Klasse, die bestimmte Eigenschaften und Verhaltensweisen definiert, die allen Sugetieren gemeinsam sind. Sie knnen dann die Katzen-Unterklasse erstellen, die die Sugetier-Klasse erweitert. Mithilfe von Unterklassen knnen Sie Code wieder verwenden. Anstatt den gesamten Code, der beiden Klassen gemein ist, neu zu erstellen, knnen Sie die vorhandene Klasse also einfach erweitern. Eine andere Unterklasse, z. B. die Siamesen-Klasse, knnte wiederum die Katzen-Klasse erweitern und so weiter. In einer komplexen Anwendung besteht ein groer Teil des Designprozesses darin, zu bestimmen, wie die Hierarchie der Klassen strukturiert werden soll.

294

Vererbung

Vererbung und Unterklassen sind wichtige Funktionsmerkmale in greren Anwendungen, da sie es Ihnen ermglichen, hnliche Klassen mit gemeinsamer Funktionalitt zu erstellen. Beispielsweise knnten Sie die Mitarbeiter-Klasse erstellen, die die grundlegenden Methoden und Eigenschaften eines typischen Mitarbeiters des Unternehmens definiert. Dann knnten Sie eine neue Klasse fr freie Mitarbeiter erstellen, die die Mitarbeiter-Klasse erweitert und alle ihre Methoden und Eigenschaften bernimmt. Fr diese Auftragnehmer-Klasse knnen Sie spezifische Methoden und Eigenschaften hinzufgen oder sie knnte die Methoden und Eigenschaften der bergeordneten Mitarbeiter-Klasse auer Kraft setzen. Sie knnten dann eine weitere neue Klasse fr Manager hinzufgen, die ebenfalls die Mitarbeiter-Klasse erweitert, jedoch auch zustzliche Methoden und Eigenschaften definiert, wie einstellen(), kndigen(), befrdern() und versetzen(). Auch Unterklassen knnen erweitert werden. So knnten Sie beispielsweise fr die Manager-Klasse eine Abteilungsleiter-Unterklasse erstellen, die wiederum neue Methoden hinzufgt oder vorhandene Methoden auer Kraft setzt. Wenn Sie eine vorhandene Klasse erweitern, bernimmt die neue Klasse grundstzlich alle aktuellen Methoden und Eigenschaften der bergeordneten Klasse. Ohne eine solche Verknpfung der Dateien mssten Sie die einzelnen Methoden und Eigenschaften in jeder separaten Klassendatei neu schreiben, selbst wenn es sich um dieselbe Funktionalitt handelt. Dies wre mit einem hohen Zeitaufwand verbunden, und zwar nicht nur bei der Erstellung des Codes, sondern auch beim Debuggen der Anwendung und bei der Projektverwaltung, wenn hnliche Logik sich in mehreren Dateien ndern wrde. In ActionScript etablieren Sie die Vererbung zwischen einer Klasse und ihrer bergeordneten Klasse oder erweitern eine Schnittstelle mit dem Schlsselwort extends. Weitere Informationen zum Schlsselwort extends finden Sie in Unterklassen in Flash schreiben auf Seite 296 und Unterklassen schreiben auf Seite 297. Zustzliche Informationen zum Schlsselwort extends finden Sie auch unter dem Eintrag extends-Anweisung im ActionScript 2.0-Referenzhandbuch.

Vererbung

295

Unterklassen in Flash schreiben


In der objektorientierten Programmierung knnen Unterklassen die Eigenschaften und Methoden einer anderen Klasse, der bergeordneten Klasse, erben. Sie knnen nicht nur Ihre benutzerdefinierten Klassen erweitern, sondern auch zahlreiche der Kernklassen und ActionScript-Klassen von Flash Player. Sie knnen die TextField-Klasse nicht erweitern. Sie knnen diese Art von Beziehung zwischen zwei Klassen mit der Klausel extends der Anweisung class herstellen. Zum Angeben einer bergeordneten Klasse verwenden Sie die folgende Syntax:
class SubClass extends SuperClass {}

Die Klasse, die Sie in SubClass angeben, bernimmt alle in SuperClass definierten Eigenschaften und Methoden. Angenommen, Sie erstellen die Sugetier-Klasse, die Eigenschaften und Methoden definiert, die allen Sugetieren gemeinsam sind. Um eine Variante der Sugetier-Klasse wie die Beuteltier-Klasse zu erstellen, mssten Sie die Sugetier-Klasse erweitern, also eine Unterklasse der Sugetier-Klasse erstellen, wie im Folgenden gezeigt:
class Marsupial extends Mammal {}

Die Unterklasse bernimmt alle Eigenschaften und Methoden der bergeordneten Klasse. Dazu gehren auch alle Eigenschaften oder Methoden, die mit dem Schlsselwort private als privat gekennzeichnet wurden. Weitere Informationen zum Erweitern von Klassen finden Sie in den folgenden Themen:

Unterklassen schreiben auf Seite 297 Methoden und Eigenschaften auer Kraft setzen auf Seite 300

Weitere Informationen zu privaten Mitgliedern finden Sie in ffentliche, private und statische Methoden und Eigenschaften (Mitglieder) auf Seite 230. Ein Beispiel zum Erstellen einer Unterklasse finden Sie in Beispiel: Widget-Klasse erweitern auf Seite 298.

296

Vererbung

Unterklassen schreiben
Mit dem folgenden Code wird die benutzerdefinierte JukeBox-Klasse definiert, die die Sound-Klasse erweitert. Sie definiert ein Array song_arr und die Methode playSong(), die ein Lied abspielt und dann die Methode loadSound() aufruft, die sie von der Sound-Klasse bernimmt.
class JukeBox extends Sound { public var song_arr:Array = new Array("beethoven.mp3", "bach.mp3", "mozart.mp3"); public function playSong(songID:Number):Void { super.loadSound(song_arr[songID], true); } }

Wenn Sie keinen Aufruf von super() in die Konstruktorfunktion einer Unterklasse aufnehmen, generiert der Compiler automatisch einen Aufruf des Konstruktors seiner direkt bergeordneten Klasse ohne Parameter als erste Anweisung der Funktion. Wenn die bergeordnete Klasse keinen Konstruktor aufweist, erstellt der Compiler eine leere Konstruktorfunktion und generiert dann in der untergeordneten Klasse einen Aufruf dieser Funktion. Wenn in der Definition der bergeordneten Klasse jedoch Parameter enthalten sind, mssen Sie einen Konstruktor in der Unterklasse erstellen und die bergeordnete Klasse mit den erforderlichen Parametern aufrufen. Eine Mehrfachvererbung ist in ActionScript 2.0 nicht erlaubt, d. h., eine Klasse kann nicht von mehreren Klassen erben. Es sind jedoch Vererbungen von mehreren Klassen mglich, wenn wie im folgenden Beispiel einzelne extends-Anweisungen verwendet werden:
// nicht zulssig class C extends A, B {} // **Fehler: Eine Klasse kann nur eine einzige Klasse erweitern. // zulssig class B extends A {} class C extends B {}

Auch ber Schnittstellen kann eine eingeschrnkte Form der Mehrfachvererbung implementiert werden. Weitere Informationen zu Schnittstellen finden Sie in Kapitel 8, Schnittstellen auf Seite 309. Ein Beispiel zum Erstellen einer Unterklasse finden Sie in Beispiel: Widget-Klasse erweitern auf Seite 298. Zustzliche Informationen zu super finden Sie auch unter dem Eintrag super-Anweisung im ActionScript 2.0-Referenzhandbuch.

Unterklassen in Flash schreiben

297

Beispiel: Widget-Klasse erweitern


Klassenmitglieder werden an Unterklassen der bergeordneten Klasse weitergegeben, die diese Mitglieder definiert. Im folgenden Beispiel wird gezeigt, wie Sie eine Widget-Klasse erstellen und dann durch Schreiben einer SubWidget-Unterklasse erweitern.
So erstellen Sie die Widget-Klasse und die SubWidget-Unterklasse:
1.

Erstellen Sie eine neue ActionScript-Datei, und speichern Sie sie unter dem Namen Widget.as. Fgen Sie dem neuen Dokument den folgenden Code hinzu:
class Widget { public static var widgetCount:Number = 0; public function Widget() { Widget.widgetCount++; } }

2.

3. 4.

Speichern Sie die genderte ActionScript-Datei. Erstellen Sie eine neue ActionScript-Datei, und speichern Sie sie unter dem Namen SubWidget.as im selben Verzeichnis wie die Widget-Klasse. Geben Sie in der Datei SubWidget.as den folgenden Code in das Skriptfenster ein:
class SubWidget extends Widget { public function SubWidget() { trace("Creating subwidget #" + Widget.widgetCount); } }

5.

6. 7.

Speichern Sie die genderte Datei SubWidget.as. Erstellen Sie eine neue FLA-Datei, und speichern Sie sie mit der Bezeichnung subWidgetTest.fla im gleichen Verzeichnis wie die bereits erstellte ActionScriptKlassendatei.

298

Vererbung

8.

Geben Sie in der Datei subWidgetTest.fla in Bild 1 der Hauptzeitleiste den folgenden Code ein:
var sw1:SubWidget = new SubWidget(); var sw2:SubWidget = new SubWidget(); trace("Widget.widgetCount = " + Widget.widgetCount); trace("SubWidget.widgetCount = " + SubWidget.widgetCount);

Der oben stehende Code erstellt zwei Instanzen der SubWidget-Klasse: sw1 und sw2. Jeder Aufruf des SubWidget-Konstruktors zeigt den aktuellen Wert der statischen Eigenschaft Widget.widgetCount an. Da die SubWidget-Klasse eine Unterklasse der Widget-Klasse ist, knnen Sie ber die SubWidget-Klasse auf die widgetCountEigenschaft zugreifen. Der Compiler schreibt den Verweis (im Bytecode, nicht in Ihre ActionScript-Datei) als Widget.widgetCount. Wenn Sie versuchen, auf die statische Eigenschaft widgetCount aus einer Instanz der Widget- oder SubWidget-Klasse wie sw1 oder sw2 zuzugreifen, gibt der Compiler einen Fehler aus.
9.

Speichern Sie das genderte Dokument. Sie Steuerung > Film testen, um das Flash-Dokument zu testen. Im Bedienfeld Ausgabe wird Folgendes angezeigt:
Creating subwidget #1 Creating subwidget #2 Widget.widgetCount = 2 SubWidget.widgetCount = 2

10. Whlen

Diese Ausgabe wird angezeigt, da der Konstruktor der Widget-Klasse zwar nicht explizit, aber automatisch vom Konstruktor der SubWidget-Klasse aufgerufen wird. Dies bewirkt, dass der Konstruktor der Widget-Klasse die statische Variable widgetCount der WidgetKlasse inkrementiert. Der ActionScript 2.0-Compiler kann statische Mitgliederverweise in Klassendefinitionen auflsen. Wenn Sie im vorhergehenden Beispiel keinen Klassennamen fr die Eigenschaft Widget.widgetCount angegeben haben, sondern stattdessen lediglich auf widgetCount verweisen, lst der ActionScript 2.0-Compiler den Verweis auf Widget.widgetCount auf und exportiert diese Eigenschaft richtig. Wenn Sie auf die Eigenschaft als SubWidget.widgetCount verweisen, schreibt der Compiler den Verweis als Widget.widgetCount (im Bytecode, nicht in der ActionScript-Datei), da SubWidget eine Unterklasse der Widget-Klasse ist.
A C H TU N G

Wenn Sie versuchen, mithilfe der Instanzen sw1 oder sw2 der Widget-Klasse auf die statische Variable widgetCount zuzugreifen, erzeugt Flash eine Fehlermeldung, in der Sie darauf hingewiesen werden, dass nur direkt ber Klassen auf statische Mitglieder zugegriffen werden kann.

Unterklassen in Flash schreiben

299

Um eine gute Lesbarkeit des Codes zu erzielen, sollten Sie auf die statischen Mitgliedsvariablen im Code immer explizit verweisen, wie im vorherigen Beispiel gezeigt. Mithilfe von expliziten Verweisen lsst sich einfach bestimmen, wo die Definitionen von statischen Mitgliedern sich befinden.

Methoden und Eigenschaften auer Kraft setzen


Wenn eine Unterklasse eine bergeordnete Klasse erweitert, bernimmt die Unterklasse alle Methoden und Eigenschaften der bergeordneten Klasse. Das Verwenden und Erweitern von Klassen bietet den Vorteil, dass Sie einer bestehenden Klasse Funktionen hinzufgen und bereits vorhandene Funktionen ndern knnen. Nehmen wir als Beispiel die Widget-Klasse, die Sie in Beispiel: Widget-Klasse erweitern auf Seite 298 erstellt haben. Sie knnen eine neue Methode in der bergeordneten (Widget) erstellen und die Methode in der Unterklasse (SubWidget) auer Kraft setzen, oder einfach die aus der Widget-Klasse bernommene Methode verwenden. Im folgenden Beispiel wird gezeigt, wie Sie vorhandene Methoden in Klassen auer Kraft setzen knnen.
So setzen Sie Methoden in einer Unterklasse auer Kraft:
1.

Erstellen Sie ein neues ActionScript-Dokument, und speichern Sie es unter dem Namen Widget.as. Geben Sie in der Datei Widget.as den folgenden ActionScript-Code in das Skriptfenster ein:
Hinweis: Wenn Sie die Widget-Klasse in einem frheren Beispiel erstellt haben, ndern Sie den vorhandenen Code, indem Sie die Methode doSomething() hinzufgen, wie im Folgenden gezeigt:

2.

class Widget { public static var widgetCount:Number = 0; public function Widget() { Widget.widgetCount++; } public function doSomething():Void { trace("Widget::doSomething()"); } } 3.

Speichern Sie das genderte ActionScript-Dokument. Die Widget-Klasse definiert nun einen Konstruktor und eine ffentliche Methode namens doSomething().

300

Vererbung

4.

Erstellen Sie eine neue ActionScript-Datei namens SubWidget.as, und speichern Sie sie im selben Verzeichnis wie Widget.as.
HINWEIS

Wenn Sie die SubWidget-Klasse in Beispiel: Widget-Klasse erweitern auf Seite 298 erstellt haben, knnen Sie stattdessen diese Datei verwenden.

5.

Geben Sie in der Datei SubWidget.as den folgenden ActionScript-Code in das Skriptfenster ein:
class SubWidget extends Widget { public function SubWidget() { trace("Creating subwidget # " + Widget.widgetCount); doSomething(); } }

6.

Speichern Sie die genderte Datei SubWidget.as. Beachten Sie, dass der Konstruktor der SubWidget-Klasse die Methode doSomething() aufruft, die Sie in der bergeordneten Klasse definiert haben.

7.

Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen subWidgetTest.fla im selben Verzeichnis wie die ActionScript-Dokumente. Geben Sie in der Datei subWidgetTest.fla in Bild 1 der Hauptzeitleiste den folgenden ActionScript-Code ein:
var sw1:SubWidget = new SubWidget(); var sw2:SubWidget = new SubWidget();

8.

9.

Speichern Sie das genderte Flash-Dokument. Sie Steuerung > Film testen, um das Flash-Dokument zu testen. Im Bedienfeld Ausgabe wird Folgendes angezeigt:

10. Whlen

Creating subwidget # 1 Widget::doSomething() Creating subwidget # 2 Widget::doSomething()

Diese Ausgabe zeigt, dass der Konstruktor der SubWidget-Klasse den Konstruktor der bergeordneten Widget-Klasse aufruft, der die statische Eigenschaft widgetCount inkrementiert. Der Konstruktor der SubWidget-Klasse protokolliert die statische Eigenschaft der bergeordneten Klasse und ruft die Methode doSomething() auf, die von der bergeordneten Klasse erbt.

Unterklassen in Flash schreiben

301

11.

ffnen Sie die SubWidget-Klasse, und fgen Sie eine neue Methode namens doSomething() hinzu. ndern Sie die Klasse so, dass sie dem folgenden Code entspricht (fgen Sie den fett gedruckten Code hinzu):
class SubWidget extends Widget { public function SubWidget() { trace("Creating subwidget # " + Widget.widgetCount); doSomething(); } public function doSomething():Void { trace("SubWidget::doSomething()"); } }

12. Speichern

Sie die genderte Klassendatei, und ffnen Sie dann wieder die Datei subwidgetTest.fla.

13.

Whlen Sie Steuerung > Film testen, um die SWF-Datei zu testen. Im Bedienfeld Ausgabe wird Folgendes angezeigt:
Creating subwidget # 1 SubWidget::doSomething() Creating subwidget # 2 SubWidget::doSomething()

Die vorherige Ausgabe zeigt, dass die doSomething()-Methode im Konstruktor der SubWidget-Klasse die doSomething()-Methode in der aktuellen Klasse anstelle der Methode in der bergeordneten Klasse aufruft. ffnen Sie wieder die SubWidget-Klasse und ndern Sie ihren Konstruktor so, dass er die doSomething()-Methode der bergeordneten Klasse aufruft (fgen Sie den fettgedruckten Code hinzu):
public function SubWidget() { trace("Creating subwidget # " + Widget.widgetCount); super.doSomething(); }

Sie knnen das Schlsselwort super hinzufgen, um die doSomething()-Methode der bergeordneten Klasse anstelle der doSomething()-Methode in der aktuellen Klasse aufzurufen. Zustzliche Informationen zu super finden Sie auch im Eintrag super im ActionScript 2.0-Referenzhandbuch.
14. Speichern

Sie die SubWidget-Klassendatei mit dem genderten Konstruktor, und whlen Sie Steuerung > Film testen, um das Flash-Dokument neu zu verffentlichen. Im Bedienfeld Ausgabe wird der Inhalt der doSomething()-Methode der Widget-Klasse gezeigt.

302

Vererbung

Polymorphismus in einer Anwendung einsetzen


Bei der objektorientierten Programmierung knnen Sie Unterschiede zwischen einzelnen Klassen durch eine besondere Technik, den so genannten Polymorphismus, ausdrcken. Hierbei knnen Klassen die Methoden der bergeordneten Klassen auer Kraft setzen und spezialisierte Implementierungen dieser Methoden definieren. Angenommen, Ihre erste Klasse ist die Sugetier-Klasse mit den Methoden play() und sleep(). Sie erstellen dann die Unterklassen Katze, Affe und Hund, um die SugetierKlasse zu erweitern. Die Unterklassen setzen die Methode sleep() der Sugetier-Klasse auer Kraft, um die Gewohnheiten der jeweiligen Tiere widerzuspiegeln. Affe implementiert die Methode play(), um von Ast zu Ast zu schwingen, Katze implementiert die Methode play(), um einem Wollknuel hinterher zu jagen, und Hund implementiert die Methode play(), um einen Ball zu apportieren. Da die Funktion sleep() fr alle Tiere hnlich ist, verwenden Sie hierfr die Implementierung der bergeordneten Klasse. Im Folgenden wird dieses Beispiel in Flash gezeigt.
So verwenden Sie Polymorphismus in einer Anwendung:
1.

Erstellen Sie ein neues ActionScript-Dokument, und speichern Sie es unter Mammal.as. Dieses Dokument bildet die Basisklasse fr verschiedene Tier-Klassen, die Sie in den folgenden Schritten erstellen.

2.

Geben Sie in der Datei Mammal.as den folgenden ActionScript-Code in das Skriptfenster ein:
class Mammal { private var _gender:String; private var _name:String = "Mammal"; // Konstruktor public function Mammal(gender:String) { this._gender = gender; } public function toString():String { return "[object " + speciesName + "]"; } public function play():String { return "Chase another of my kind."; } public function sleep():String { return "Close eyes."; }

Polymorphismus in einer Anwendung einsetzen

303

public function get gender():String { return this._gender; } public function get speciesName():String { return this._name; } public function set speciesName(value:String):Void { this._name = value; } }

Die vorherige Klasse definiert die beiden privaten Variablen __gender und __name, in denen Geschlecht und Art des Tieres gespeichert werden. Als Nchstes wird der MammalKonstruktor definiert. Der Konstruktor hat einen Parameter namens gender, der verwendet wird, um die bereits definierte private Variable __gender einzustellen. Auerdem werden drei zustzliche ffentliche Methoden angegeben: toString(), play() und sleep(). Diese Methoden geben String-Objekte zurck. Die letzten drei Methoden sind get-/set-Methoden fr die Eigenschaften __gender und __name des Sugetiers.
3.

Speichern Sie das ActionScript-Dokument. Dies ist die bergeordnete Klasse fr die Klassen, die Sie gleich erstellen werden (fr Cat, Dog und Monkey). Sie knnen die Methode toString() der Mammal-Klasse verwenden, um eine Stringdarstellung einer Mammal-Instanz anzuzeigen (oder jeder Instanz, die die Mammal-Klasse erweitert).

4.

Erstellen Sie eine neue ActionScript-Datei und speichern Sie sie unter dem Namen Cat.as im gleichen Verzeichnis wie die Klassendatei Mammal.as, die Sie in Schritt 1 erstellt haben. Geben Sie in der Datei Cat.as den folgenden ActionScript-Code in das Skriptfenster ein:
class Cat extends Mammal { // Konstruktor public function Cat(gender:String) { super(gender); speciesName = "Cat"; } public function play():String { return "Pounce a ball of yarn."; } }

5.

Beachten Sie, dass die Methode play() in der bergeordneten Mammal-Klasse auer Kraft gesetzt wird. Die Cat-Klasse definiert nur zwei Methoden, einen Konstruktor und eine Methode play(). Da die Cat-Klasse die Mammal-Klasse erweitert, erbt sie die Eigenschaften und Methoden der Mammal-Klasse. Weitere Informationen hierzu finden Sie in Methoden und Eigenschaften auer Kraft setzen auf Seite 300.

304

Vererbung

6. 7.

Speichern Sie das genderte ActionScript-Dokument. Erstellen Sie ein neues ActionScript-Dokument namens Dog.as, und speichern Sie es im selben Verzeichnis wie die beiden bereits erstellten Klassendateien. Geben Sie in der Datei Dog.as den folgenden ActionScript-Code in das Skriptfenster ein:
class Dog extends Mammal { // Konstruktor public function Dog(gender:String) { super(gender); speciesName = "Dog"; } public function play():String { return "Fetch a stick."; } }

8.

Sie sehen, dass die Struktur der Dog-Klasse weitgehend mit der Struktur der Cat-Klasse bereinstimmt; nur einige Werte wurden gendert. Auch die Dog-Klasse erweitert die Mammal-Klasse und bernimmt daher alle ihre Eigenschaften und Methoden. Der Dog-Konstruktor hat eine einzelne Eigenschaft, gender, die an die bergeordnete Klasse (Mammal) der Dog-Klasse bergeben wird. Die Variable speciesName wird durch den String Dog berschrieben. Die Methode play() wird ebenfalls von der bergeordneten Klasse auer Kraft gesetzt. 9. Speichern Sie das genderte ActionScript-Dokument.
10. Erstellen 11.

Sie ein weiteres ActionScript-Dokument im selben Verzeichnis wie die anderen Dateien, und speichern Sie es unter dem Namen Monkey.as. Geben Sie in der Datei Monkey.as den folgenden ActionScript-Code in das Skriptfenster ein:
class Monkey extends Mammal { // Konstruktor public function Monkey(gender:String) { super(gender); speciesName = "Monkey"; } public function play():String { return "Swing from a tree."; } }

Wie auch die Cat- und Dog-Klassen erweitert die Monkey-Klasse die Mammal-Klasse. Der Konstruktor der Monkey-Klasse ruft den Konstruktor fr die Mammal-Klasse auf und bergibt das Geschlecht an den Mammal-Konstruktor. Auerdem wird die Variable speciesName durch den String Monkey ersetzt. Die Monkey-Klasse setzt auch das Verhalten der Methode play() auer Kraft.
Polymorphismus in einer Anwendung einsetzen 305

12. Speichern 13.

Sie das genderte ActionScript-Dokument.

Sie haben nun drei Unterklassen der Mammal-Klasse erstellt. Erstellen Sie jetzt ein neues Flash-Dokument namens mammalTest.fla. Sie in der Datei mammalTest.fla den folgenden ActionScript-Code im ersten Bild der Hauptzeitleiste ein:
var mammals_arr:Array = new Array(); this.createTextField("info_txt", 10, 10, 10, 450, 80); info_txt.html = true; info_txt.multiline = true; info_txt.border = true; info_txt.wordWrap = true; createMammals() createReport() function createMammals():Void { mammals_arr.push(new Dog("Female")); mammals_arr.push(new Cat("Male")); mammals_arr.push(new Monkey("Female")); mammals_arr.push(new Mammal("Male")); } function createReport():Void { var i:Number; var len:Number = mammals_arr.length; // Mammal-Info in 4 Spalten mit HTML-Text unter Verwendung von // Tabstopps anzeigen. info_txt.htmlText = "<textformat tabstops='[110, 200, 300]'>"; info_txt.htmlText += "<b>Mammal\tGender\tSleep\tPlay</b>"; for (i = 0; i < len; i++) { info_txt.htmlText += "<p>" + mammals_arr[i].speciesName + "\t" + mammals_arr[i].gender + "\t" + mammals_arr[i].sleep() + "\t" + mammals_arr[i].play() + "</p>"; // Die trace-Anweisung ruft die Mammal.toString()-Methode auf. trace(mammals_arr[i]); } info_txt.htmlText += "</textformat>"; }

14. Geben

Der Code der Datei mammalTest.fla ist etwas komplexer als der Code der vorherigen Klassen. Zuerst werden die drei Tier-Klassen importiert.

306

Vererbung

15.

Speichern Sie das Flash-Dokument, und whlen Sie Steuerung > Film testen, um das Dokument zu testen. Die Informationen zu den Sugetieren werden in einem Textfeld auf der Bhne angezeigt, und der folgende Text wird im Bedienfeld Ausgabe eingeblendet.
[object [object [object [object Dog] Cat] Monkey] Mammal]

Polymorphismus in einer Anwendung einsetzen

307

308

Vererbung

KAPITEL 8

Schnittstellen
In der objektorientierten Programmierung (OOP) ist eine Schnittstelle ein Dokument, mit dem Sie die Methoden, die in einer Klasse enthalten sein mssen, deklarieren (aber nicht definieren) knnen. Schnittstellen knnen whrend der Entwicklung uerst ntzlich sein, besonders bei der Arbeit in Teams oder fr die Erstellung groer Anwendungen in Flash. Mithilfe von Schnittstellen knnen Entwickler die Basismethoden in ActionScript-Klassen ganz einfach identifizieren. Diese Methoden mssen bei der Verwendung der einzelnen Schnittstellen implementiert sein. In diesem Kapitel werden einige Beispielschnittstellen vorgestellt. Das Lernziel des Kapitels ist die Erstellung eigener Schnittstellendateien. Wenn Sie noch keine Erfahrung mit dem Erstellen von Klassen haben, sollten Sie Kapitel 6, Klassen lesen, bevor Sie die Tutorials und Beispiele in diesem Kapitel durcharbeiten. Weitere Informationen zum Arbeiten mit Schnittstellen finden Sie in den folgenden Themen:
Schnittstellen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 Schnittstellen als Datentypen erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 Vererbung und Schnittstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 Beispiel: Schnittstellen verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 Beispiel: Komplexe Schnittstelle erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

Schnittstellen
In der objektorientierten Programmierung lassen sich Schnittstellen mit Klassen vergleichen, deren Methoden nicht implementiert (definiert) sind, das heit, sie fhren anderweitig keine Funktion aus. Eine Schnittstelle setzt sich also aus leeren Methoden zusammen. Eine andere Klasse kann die von der Schnittstelle deklarierten Methoden implementieren. In ActionScript besteht der Unterschied zwischen Schnittstellen und Objekten nur hinsichtlich der Fehlerberprfung zur Kompilierzeit und der Durchsetzung der Sprachregeln.

309

Eine Schnittstelle ist keine Klasse. Dies trifft jedoch streng genommen nicht auf ActionScript zur Laufzeit zu, denn eine Schnittstelle ist abstrakt. ActionScript-Schnittstellen existieren jedoch zur Laufzeit, um die Typumwandlung zu ermglichen (das ndern eines bestehenden Datentyps in einen anderen Typ). Das ActionScript 2.0-Objektmodell untersttzt keine Mehrfachvererbung. Eine Klasse kann also nur von einer einzigen bergeordneten Klasse erben. Bei dieser bergeordneten Klasse kann es sich um eine Kernklasse, eine Flash PlayerKlasse oder eine benutzerdefinierte Klasse handeln. ber Schnittstellen knnen Sie eine eingeschrnkte Form der Mehrfachvererbung umsetzen, bei der eine Klasse von mehreren Klassen erbt. In C++ knnte die Katzen-Klasse beispielsweise die Sugetier-Klasse und die Spielen-Klasse erweitern, die die Methoden jageSchwanz() und esseKatzenfutter() deklariert. ActionScript 2.0 gestattet ebensowenig wie Java die direkte Erweiterung mehrerer Klassen, es ist jedoch mglich, eine einzelne Klasse zu erweitern und mehrere Schnittstellen zu implementieren. Sie knnten also die Spielen-Schnittstelle erstellen, die die Methoden jageSchwanz() und esseKatzenfutter() deklariert. Die Katzen-Klasse oder jede andere Klasse kann dann diese Schnittstelle implementieren und fr diese Methoden Definitionen bereitstellen. Eine Schnittstelle kann auch als eine Art Programmiervertrag angesehen werden, mit dem Beziehungen zwischen sonst nicht verwandten Klassen erzwungen werden. Angenommen, Sie arbeiten mit einem Programmiererteam, bei dem jeder einzelne Programmierer an einer anderen Klasse in derselben Anwendung arbeitet. Whrend des Anwendungsdesigns legen Sie eine Reihe von Methoden fest, mit deren Hilfe die verschiedenen Klassen kommunizieren. Sie erstellen eine Schnittstelle, die diese Methoden, ihre Parameter und ihre Rckgabetypen deklariert. Jede Klasse, die diese Schnittstelle implementiert, muss fr diese Methoden Definitionen bereitstellen; andernfalls kommt es zu einem Compiler-Fehler. Die Schnittstelle lsst sich mit einem Kommunikationsprotokoll vergleichen, das alle Klassen befolgen mssen. Sie knnten dies erreichen, indem Sie eine Klasse erstellen, die alle diese Methoden definiert. Die einzelnen Klassen wrden dann diese bergeordnete Klasse erweitern oder von ihr erben. Da die Anwendung jedoch aus nicht verwandten Klassen besteht, ist es nicht sinnvoll, alle diese Klassen in einer gemeinsamen Klassenhierarchie zusammenzufassen. Die bessere Lsung ist das Erstellen einer Schnittstelle, in der die Methoden deklariert werden, die die Klassen zur Kommunikation verwenden. Anschlieend kann jede Klasse diese Methoden implementieren (durch Bereitstellung eigener Definitionen). Fr eine erfolgreiche Programmierung sind in der Regel keine Schnittstellen erforderlich. Durch den korrekten Einsatz von Schnittstellen kann aber das Design Ihrer Anwendung eleganter, skalierbarer und leichter zu pflegen sein.

310

Schnittstellen

ActionScript-Schnittstellen existieren zur Laufzeit, um die Typumwandlung zu ermglichen; siehe Kapitel 3, Objekte umwandeln auf Seite 81. Eine Schnittstelle ist zwar weder ein Objekt noch eine Klasse, doch der Arbeitsablauf hnelt der Arbeit mit Klassen. Weitere Informationen zum Arbeitsablauf bei Klassen finden Sie in Benutzerdefinierte Klassendateien schreiben auf Seite 216. Der Abschnitt Beispiel: Schnittstellen verwenden auf Seite 319 enthlt ein Tutorial, in dem die Erstellung einer Anwendung mit Schnittstellen beschrieben wird. Weitere Informationen zur Verwendung von Schnittstellen finden Sie in den folgenden Abschnitten:

Das Schlsselwort interface auf Seite 311 Schnittstellen benennen auf Seite 312 Schnittstellen definieren und implementieren auf Seite 312

Das Schlsselwort interface


Mit dem Schlsselwort interface wird eine Schnittstelle definiert. Eine Schnittstelle hnelt einer Klasse, wobei jedoch die folgenden wichtigen Unterschiede zu beachten sind:

Schnittstellen umfassen lediglich Deklarationen von Methoden, nicht aber ihre Implementierung. Das heit, jede Klasse, die eine Schnittstelle implementiert, muss fr jede in der Schnittstelle deklarierte Methode eine Implementierung bereitstellen. In einer Schnittstellendefinition drfen nur ffentliche Mitglieder enthalten sein; statische und Klassenmitglieder sind nicht zulssig. Die Anweisungen get und set sind in Schnittstellendefinitionen nicht zulssig. Um das Schlsselwort interface zu verwenden, mssen Sie im Dialogfeld Einstellungen fr Verffentlichungen auf der Registerkarte Flash der FLA-Datei die Einstellungen ActionScript 2.0 und Flash Player 6 oder hher whlen.

Das Schlsselwort this wird nur in externen Skriptdateien untersttzt, nicht jedoch in Skripts, die im Bedienfeld Aktionen erstellt wurden.

Schnittstellen

311

Schnittstellen benennen
Schnittstellennamen beginnen genau wie Klassen mit einem Grobuchstaben. Bei Schnittstellennamen handelt es sich in der Regel um Adjektive, z. B. Druckbar. Der folgende Schnittstellenname, IEmployeeRecords, beginnt mit einem Grobuchstaben und enthlt verkettete Wrter aus einer Mischung aus Gro- und Kleinbuchstaben:
interface IEmployeeRecords {}
H I NW E I S

Einige Entwickler setzen dem Schnittstellennamen ein groes I voran, um sie leichter von Klassen zu unterscheiden. Es empfiehlt sich, diese Konvention zu verwenden, da sie eine einfache Unterscheidung von Schnittstellen und regulren Klassen ermglicht.

Weitere Informationen zu Benennungskonventionen finden Sie in Kapitel 17, Bewhrte Verfahren und Kodierungskonventionen fr ActionScript 2.0 auf Seite 743.

Schnittstellen definieren und implementieren


Schnittstellen werden auf dieselbe Art und Weise erstellt wie Klassen. Wie Klassen knnen auch Schnittstellen nur in externen ActionScript-Dateien definiert werden. Zum Arbeitsablauf beim Erstellen einer Schnittstelle gehren mindestens die folgenden Schritte: Sie definieren eine Schnittstelle in einer externen ActionScript-Datei. Sie speichern die Schnittstellendatei in einem bestimmten Klassenpfadverzeichnis (einem Speicherort, an dem Flash nach Klassen sucht) oder im gleichen Verzeichnis, in dem sich auch die FLA-Datei der Anwendung befindet. Sie erstellen eine Instanz der Klasse in einem anderen Skript, entweder in einem Flash (FLA)-Dokument oder in einer externen Skriptdatei, oder einer Unterschnittstelle auf der Grundlage der ursprnglichen Schnittstelle. Sie erstellen eine Klasse, die die Schnittstelle in einer externen Skriptdatei implementiert.

Schnittstellen werden mit dem Schlsselwort interface deklariert. Darauf folgen der Name der Schnittstelle und dann die rechte und linke geschweifte Klammer ({}), die den Body der Schnittstelle definieren, wie im folgenden Beispiel gezeigt:
interface IEmployeeRecords { // Methodendeklarationen der Schnittstelle }

Schnittstellen knnen nur Methodendeklarationen (Funktionsdeklarationen) enthalten, einschlielich Parameter, Parametertypen und Funktionsrckgabetypen.

312

Schnittstellen

Weitere Informationen zu den Konventionen zum Strukturieren von Klassen und Schnittstellen finden Sie in Kapitel 17, Bewhrte Verfahren und Kodierungskonventionen fr ActionScript 2.0 auf Seite 743. Der Abschnitt Beispiel: Schnittstellen verwenden auf Seite 319 enthlt ein Tutorial, in dem das Erstellen einer Anwendung mit einer Schnittstelle beschrieben wird. Der folgende Code deklariert beispielsweise die Schnittstelle IMyInterface, die zwei Methoden enthlt, method1() und method2(). Die erste Methode, method1(), hat keinen Parameter und gibt den Rckgabetyp Void an (sie gibt also keinen Wert zurck). Die zweite Methode, method2(), hat einen einzigen Parameter vom Typ String und legt den Rckgabetyp Boolean fest.
So erstellen Sie eine einfache Schnittstelle:
1.

Erstellen Sie eine neue ActionScript-Datei, und speichern Sie sie unter dem Namen IMyInterface.as. Geben Sie den folgenden ActionScript-Code in das Skriptfenster ein:
interface IMyInterface { public function method1():Void; public function method2(param:String):Boolean; }

2.

3.

Speichern Sie die genderte ActionScript-Datei. Um die Schnittstelle in einer Anwendung einzusetzen, mssen Sie zunchst eine Klasse erstellen, die die neue Schnittstelle implementiert.

4.

Erstellen Sie eine neue ActionScript-Datei, und speichern Sie sie unter dem Namen MyClass.as im selben Verzeichnis wie IMyInterface.as. Geben Sie in der Klassendatei MyClass den folgenden ActionScript-Code in das Skriptfenster ein:
class MyClass { }

5.

Mit dem Schlsselwort implements weisen Sie die benutzerdefinierte Klasse (MyClass) an, Ihre Schnittstelle (IMyInterface) zu verwenden. Dieses Schlsselwort gibt an, dass eine Klasse alle Methoden definieren muss, die in der implementierten Schnittstelle deklariert sind.

Schnittstellen

313

6.

Bearbeiten Sie den ActionScript-Code in der Datei MyClass.as, so dass er dem folgenden Codebeispiel entspricht (fgen Sie den fett gedruckten Code hinzu):
class MyClass implements IMyInterface { }

Das Schlsselwort implements wird nach dem Klassennamen eingefgt.


7.

Klicken Sie auf die Schaltflche Syntax berprfen. Flash zeigt im Bedienfeld Ausgabe einen Fehler an, in dem Sie darauf hingewiesen werden, dass MyClass die Methode X der IMyInterface-Schnittstelle implementieren muss. Dieser Fehler wird angezeigt, da jede Klasse, die eine Schnittstelle erweitert, alle Methoden definieren muss, die im Schnittstellendokument aufgelistet sind.

8.

Bearbeiten Sie das MyClass-Dokument noch einmal (fgen Sie den fett gedruckten Code hinzu), und schreiben Sie ActionScript-Code fr die Methoden method1() und method2(), wie im folgenden Codebeispiel gezeigt:
class MyClass implements IMyInterface { public function method1():Void { // ... }; public function method2(param:String):Boolean { // ... return true; } }

9.

Speichern Sie das Dokument MyClass.as, und klicken Sie auf Syntax berprfen. Im Bedienfeld Ausgabe werden jetzt keine Fehlermeldungen oder Warnungen mehr angezeigt, da Sie die beiden Methoden definiert haben.

Die Klassendatei, die Sie erstellen, ist nicht auf die ffentlichen Methoden beschrnkt, die Sie in der Schnittstellendatei definiert haben. Die Schnittstellendatei bestimmt lediglich die Methoden, die mindestens implementiert werden mssen, sowie die Eigenschaften und Rckgabetypen dieser Methoden. Klassen, die eine bestimmte Schnittstelle implementieren, enthalten praktisch immer zustzliche Methoden, Variablen und get-/set-Methoden. Schnittstellendateien drfen keine Variablendeklarationen oder Zuweisungen enthalten. Die in einer Schnittstelle deklarierten Funktionen drfen keine geschweiften Klammern enthalten. Die folgende Schnittstelle kann zum Beispiel nicht kompiliert werden:
interface IBadInterface { // Compiler-Fehler. Variablendeklarationen sind in // Schnittstellen nicht zulssig. public var illegalVar:String; // Compiler-Fehler. Funktionskrper sind in Schnittstellen nicht // zulssig.

314

Schnittstellen

public function illegalMethod():Void { } // Compiler-Fehler. Private Methoden sind in Schnittstellen nicht // zulssig. private function illegalPrivateMethod():Void; // Compiler-Fehler. Get-/set-Methoden sind in Schnittstellen nicht // zulssig. public function get illegalGetter():String; }

Der Abschnitt Beispiel: Schnittstellen verwenden auf Seite 319 enthlt ein Tutorial, in dem das Erstellen einer komplexen Schnittstelle beschrieben wird. Die Regeln fr die Namensgebung und das paketweise Speichern von Schnittstellen entspricht dem fr Klassen; siehe Klassendateien benennen auf Seite 250.

Schnittstellen als Datentypen erstellen


Wie Klassen definieren Schnittstellen einen neuen Datentyp. Jede Klasse, die eine Schnittstelle implementiert, hat den von der Schnittstelle definierten Typ. Dies ist besonders dann von Nutzen, wenn Sie bestimmen mchten, ob ein bestimmtes Objekt eine bestimmte Schnittstelle implementiert. Nehmen wir als Beispiel die Schnittstelle IMovable, die Sie im folgenden Beispiel erstellen.
So erstellen Sie eine Schnittstelle als Datentyp:
1.

Erstellen Sie ein neues ActionScript-Dokument, und speichern Sie es unter dem Namen IMovable.as auf der Festplatte. Geben Sie in der Datei IMovable.as den folgenden ActionScript-Code in das Skriptfenster ein:
interface IMovable { public function moveUp():Void; public function moveDown():Void; }

2.

3. 4.

Speichern Sie die genderte ActionScript-Datei. Erstellen Sie ein neues ActionScript-Dokument, und speichern Sie es unter dem Namen Box.as im selben Verzeichnis wie IMovable.as. In diesem Dokument erstellen Sie eine Box-Klasse, die die bereits erstellte IMovableSchnittstelle implementiert.

Schnittstellen als Datentypen erstellen

315

5.

Geben Sie in der Datei Box.as den folgenden ActionScript-Code in das Skriptfenster ein:
class Box implements IMovable { public var xPos:Number; public var yPos:Number; public function Box() { } public function moveUp():Void { trace("moving up"); // Methodendefinition } public function moveDown():Void { trace("moving down"); // Methodendefinition } }

6. 7.

Speichern Sie das genderte ActionScript-Dokument. Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen boxTest.fla im selben Verzeichnis wie die beiden vorherigen ActionScript-Dokumente. Whlen Sie Bild 1 der Zeitleiste aus, ffnen Sie den ActionScript-Editor, und geben Sie dann den folgenden ActionScript-Code in das Bedienfeld Aktionen (oder das Skriptfenster) ein:
var newBox:Box = new Box();

8.

Dieser ActionScript-Code erstellt eine Instanz der Box-Klasse, die Sie als Variable des Box-Typs deklarieren.
9.

Speichern Sie das genderte Flash-Dokument, und whlen Sie Steuerung > Film testen, um die SWF-Datei zu testen. Zur Laufzeit knnen Sie in FlashPlayer 7 und hheren Versionen einen Ausdruck in einen Schnittstellentyp oder einen anderen Schnittstellentyp umwandeln. Im Gegensatz zu Java-Schnittstellen existieren ActionScript-Schnittstellen auch whrend der Ausfhrung, eine Typumwandlung ist also mglich. Wenn der Ausdruck ein Objekt ist, das die Schnittstelle implementiert, oder eine bergeordnete Klasse hat, die die Schnittstelle implementiert, wird das Objekt zurckgegeben. Andernfalls wird null zurckgegeben. Dies ist ntzlich, wenn Sie sicherstellen mchten, dass eine bestimmte Schnittstelle von einem bestimmten Objekt implementiert wird. Weitere Informationen zur Typumwandlung finden Sie in Kapitel 3, Objekte umwandeln auf Seite 81.

316

Schnittstellen

10. Fgen Sie in der Datei boxTest.fla den folgenden Code am Ende des ActionScript-Codes

hinzu:
if (IMovable(newBox) != null) { newBox.moveUp(); } else { trace("box instance is not movable"); }

Dieser ActionScript-Code berprft, ob die Instanz newBox die IMovable-Schnittstelle implementiert, bevor die Methode moveUp() fr das Objekt aufgerufen wird.
11.

Speichern Sie das Flash-Dokument und whlen Sie Steuerung > Film testen, um die SWF-Datei zu testen. Da die Box-Instanz die IMovable-Schnittstelle implementiert, wird die Methode Box.moveUp() aufgerufen und der Text moving up im Bedienfeld Ausgabe angezeigt.

Weitere Informationen zur Umwandlung finden Sie in Kapitel 3, Objekte umwandeln auf Seite 81.

Vererbung und Schnittstellen


Sie knnen das Schlsselwort extends verwenden, um Unterklassen einer Schnittstelle zu erstellen: Dies kann besonders bei greren Projekten ntzlich sein, wenn Sie eine vorhandene Schnittstelle durch Unterklassen erweitern und zustzliche Methoden hinzufgen mchten. Diese Methoden mssen von beliebigen Klassen definiert werden, die diese Schnittstelle implementieren. Beachten Sie beim Erweitern von Schnittstellen Folgendes: Wenn mehrere Schnittstellendateien Funktionen deklarieren, die denselben Namen, aber unterschiedliche Parameter oder Rckgabetypen haben, wird in Flash eine Fehlermeldung eingeblendet. Im folgenden Beispiel wird gezeigt, wie Sie mit dem Schlsselwort extends eine Unterklasse fr eine Schnittstellendatei erstellen.
So erweitern Sie eine Schnittstelle:
1. 2.

Erstellen Sie eine neue ActionScript-Datei, und speichern Sie sie unter dem Namen Ia.as. Geben Sie in der Datei Ia.as den folgenden ActionScript-Code in das Skriptfenster ein:
interface Ia { public function f1():Void; public function f2():Void; }

3.

Speichern Sie die genderte ActionScript-Datei.

Vererbung und Schnittstellen

317

4.

Erstellen Sie eine neue ActionScript-Datei, und speichern Sie sie unter dem Namen Ib.as im selben Verzeichnis wie die Datei Ia.as, die Sie in Schritt 1 erstellt haben. Geben Sie in der Datei Ib.as den folgenden ActionScript-Code in das Skriptfenster ein:
interface Ib extends Ia { public function f8():Void; public function f9():Void; }

5.

6. 7.

Speichern Sie die genderte ActionScript-Datei. Erstellen Sie eine neue ActionScript-Datei namens ClassA.as, und speichern Sie sie im selben Verzeichnis wie die beiden bereits erstellten Dateien. Geben Sie in der Datei ClassA.as den folgenden ActionScript-Code in das Skriptfenster ein:
class ClassA implements Ib { // f1() und f2() sind in Schnittstelle Ia definiert. public function f1():Void { } public function f2():Void { } // f8() und f9() sind in Schnittstelle Ib definiert, die Ia erweitert. public function f8():Void { } public function f9():Void { } }

8.

9.

Speichern Sie die Klassendatei, und klicken Sie oberhalb des Skriptfensters auf die Schaltflche Syntax berprfen. Wenn alle vier Methoden definiert sind und den Definitionen der jeweiligen Schnittstellendateien entsprechen, werden in Flash keine Fehlermeldungen generiert.
H IN W E I S

Klassen knnen nur eine Klasse in ActionScript 2.0 erweitern, obwohl Sie Klassen verwenden knnen, um beliebig viele Schnittstellen zu implementieren.

Wenn die ClassA-Klasse im vorherigen Beispiel mehrere Schnittstellen implementieren soll, trennen Sie die Schnittstellen einfach durch Kommas voneinander ab. Wenn eine Klasse eine bergeordnete Klasse erweitern und mehrere Schnittstellen implementieren soll, verwenden Sie in etwa den folgenden Code:
class ClassA extends ClassB implements Ib, Ic, Id {...}.

318

Schnittstellen

Beispiel: Schnittstellen verwenden


In diesem Beispiel erstellen Sie eine einfache Schnittstelle, die von verschiedenen Klassen verwendet werden kann.
So erstellen Sie eine Schnittstelle:
1.

Erstellen Sie eine neue ActionScript-Datei, und speichern Sie sie unter dem Namen IDocumentation.as. Geben Sie in der Datei IDocumentation.as den folgenden ActionScript-Code in das Skriptfenster ein:
interface IDocumentation { public function downloadUpdates():Void; public function checkForUpdates():Boolean; public function searchHelp(keyword:String):Array; }

2.

3. 4.

Speichern Sie die genderte ActionScript-Schnittstellendatei. Erstellen Sie eine neue ActionScript-Datei unter dem Namen FlashPaper.as im selben Verzeichnis wie die Datei IDocumentation.as. Geben Sie in der Datei FlashPaper.as den folgenden ActionScript-Code in das Skriptfenster ein:
class FlashPaper implements IDocumentation { }

5.

6. 7.

Speichern Sie die genderte ActionScript-Datei. Klicken Sie fr die ActionScript-Klassendatei auf die Schaltflche Syntax berprfen. Daraufhin wird ein Fehler angezeigt, der ungefhr der folgenden Fehlermeldung entspricht:
**Error** path\FlashPaper.as: Line 1: The class must implement method 'checkForUpdates' from interface 'IDocumentation'. class FlashPaper implements IDocumentation { Total ActionScript Errors: 1 Reported Errors: 1

Dieser Fehler wird angezeigt, da die aktuelle FlashPaper-Klasse keine der ffentlichen Methoden definiert, die Sie in der IDocumentation-Schnittstelle definiert haben.

Beispiel: Schnittstellen verwenden

319

8.

ffnen Sie wieder die Klassendatei FlashPaper.as, und ndern Sie den vorhandenen ActionScript-Code, so dass er dem folgenden Code entspricht:
class FlashPaper implements IDocumentation { private static var __version:String = "1,2,3,4"; public function downloadUpdates():Void { }; public function checkForUpdates():Boolean { return true; }; public function searchHelp(keyword:String):Array { return [] }; }

9.

Speichern Sie die genderte ActionScript-Datei, und klicken Sie auf die Schaltflche Syntax berprfen. Jetzt werden keine Fehler mehr im Bedienfeld Ausgabe angezeigt.
HINWEIS

Sie knnen der FlashPaper-Klassendatei beliebig viele statische, ffentliche oder private Variablen und Methoden hinzufgen. Die Schnittstellendatei definiert lediglich eine Mindestmenge an Methoden, die in jeder Klasse enthalten sein mssen, die diese Schnittstelle implementiert.

10. ffnen

Sie wieder die IDocumentation-Schnittstellendatei, und fgen Sie die folgende, fett gedruckte Codezeile hinzu (unterhalb der Methode searchHelp()):
interface IDocumentation { public function downloadUpdates():Void; public function checkForUpdates():Boolean; public function searchHelp(keyword:String):Array; public function addComment(username:String, comment:String):Void; }

11.

Speichern Sie die genderte Schnittstellendatei, und ffnen Sie dann wieder das Dokument FlashPaper.as. Sie auf die Schaltflche Syntax berprfen. Daraufhin wird im Bedienfeld Ausgabe ein neuer Fehler angezeigt:
**Error** path\FlashPaper.as: Line 1: The class must implement method 'addComment' from interface 'IDocumentation'. class FlashPaper implements IDocumentation { Total ActionScript Errors: 1 Reported Errors: 1

12. Klicken

Dieser Fehler wird angezeigt, da die Klassendatei FlashPaper.as nicht mehr alle Klassen definiert, die in der Schnittstellendatei aufgelistet sind. Um diesen Fehler zu beheben, mssen Sie entweder der FlashPaper-Klasse die Methode addComment() hinzufgen oder die Methodendefinition aus der IDocumentation-Schnittstellendatei entfernen.

320

Schnittstellen

13.

Fgen Sie der FlashPaper-Klasse die folgende Methode hinzu:


public function addComment(username:String, comment:String):Void { /* Parameter an serverseitige Seite senden, die Kommentar in Datenbank einfgt. */ }

14. Speichern

Sie die genderte Datei FlashPaper.as, und klicken Sie auf Syntax berprfen. Jetzt sollten keine Fehler mehr angezeigt werden.

Im letzten Abschnitt haben Sie auf Grundlage der IDocumentation-Schnittstellendatei eine Klasse erstellt. In diesem Abschnitt erstellen Sie eine neue Klasse, die ebenfalls die IDocumentation-Schnittstelle implementiert, zustzlich aber einige weitere Methoden und Eigenschaften hinzufgt. In diesem Tutorial wird gezeigt, welche Vorteile das Verwenden von Schnittstellen bietet. Wenn Sie eine andere Klasse erstellen mchten, die die IDocumentation-Schnittstelle erweitert, knnen Sie die Methoden, die fr die neue Klasse erforderlich sind, mit diesem Verfahren ganz einfach bestimmen.

Beispiel: Komplexe Schnittstelle erstellen


Im folgenden Beispiel werden verschiedene Mglichkeiten zum Definieren und Implementieren von Schnittstellen gezeigt. In diesem Tutorial lernen Sie, wie Sie eine einfache Schnittstellendatei erstellen und eine Klasse schreiben, die mehrere Schnittstellen implementiert. Auerdem erfahren Sie, wie Schnittstellen andere Schnittstellen erweitern knnen, so dass komplexere Datenstrukturen entstehen.
So erstellen Sie eine komplexe Schnittstelle:
1.

Erstellen Sie ein neues ActionScript-Dokument, und speichern Sie es unter dem Namen InterfaceA.as. Erstellen Sie einen neuen Ordner namens complexInterface, und speichern Sie die Datei InterfaceA.as in diesem Ordner. Alle Dateien, die Sie in diesem Tutorial erstellen, werden in diesem Ordner gespeichert. Geben Sie in der Datei Interface.as den folgenden ActionScript-Code in das Skriptfenster ein:
// Dateiname: InterfaceA.as interface InterfaceA { public function k():Number; public function n(z:Number):Number; }

2.

3.

Beispiel: Komplexe Schnittstelle erstellen

321

4.

Speichern Sie das ActionScript-Dokument. Erstellen Sie dann ein neues ActionScriptDokument namens ClassB.as, und speichern Sie es im Ordner complexInterface. Die Datei ClassB.as implementiert die bereits erstellte InterfaceA-Schnittstelle. Geben Sie in der Datei ClassB.as den folgenden ActionScript-Code in das Skriptfenster ein:
// Dateiname: ClassB.as class ClassB implements InterfaceA { public function k():Number { return 25; } public function n(z:Number):Number { return (z + 5); } }

5.

6.

Speichern Sie die genderte Datei ClassB.as. Erstellen Sie dann ein neues FlashDokument, und speichern Sie es unter dem Namen classbTest.fla im Ordner complexInterface. Diese Klassendatei testet die bereits erstellte ClassB-Klasse. Geben Sie in der Datei classbTest.fla in Bild 1 der Zeitleiste den folgenden ActionScriptCode ein:
// Dateiname: classbTest.fla import ClassB; var myB:ClassB = new ClassB(); trace(myB.k()); // 25 trace(myB.n(7)); // 12

7.

8.

Speichern Sie das genderte Flash-Dokument, und whlen Sie Steuerung > Film testen, um das Flash-Dokument zu testen. Im Bedienfeld Ausgabe werden die beiden Zahlen 25 und 12 angezeigt. Diese Zahlen sind das Ergebnis der Methoden k() und n() in der ClassB-Klasse.

9.

Erstellen Sie eine neue ActionScript-Datei, und speichern Sie sie unter dem Namen ClassC.as im Verzeichnis complexInterface. Diese Klassendatei implementiert die InterfaceA-Schnittstelle, die Sie in Schritt 1 erstellt haben.

322

Schnittstellen

10. Geben

Sie in der Datei ClassC.as den folgenden ActionScript-Code in das Skriptfenster ein:
// Dateiname: ClassC.as class ClassC implements InterfaceA { public function k():Number { return 25; } // **Fehler** Die Klasse muss auch die Methode 'n' aus der // Schnittstelle 'InterfaceA' implementieren. }

Wenn Sie fr die ClassC-Klassendatei auf die Schaltflche Syntax berprfen klicken, wird im Bedienfeld Ausgabe eine Fehlermeldung eingeblendet, die Sie darauf hinweist, dass die aktuelle Klasse die in der InterfaceA-Schnittstelle definierte Methode n() implementieren muss. Wenn Sie Klassen erstellen, die eine Schnittstelle implementieren, mssen Sie Methoden fr jeden Eintrag in der Schnittstelle definieren.
11.

Erstellen Sie eine neue ActionScript-Datei, und speichern Sie sie unter dem Namen InterfaceB.as im Verzeichnis complexInterface. Sie in der Datei InterfaceB.as den folgenden ActionScript-Code in das Skriptfenster ein:

12. Geben

// Dateiname: InterfaceB.as interface InterfaceB { public function o():Void; } 13.

Speichern Sie die genderte Datei InterfaceB.as. Erstellen Sie dann ein neues ActionScriptDokument, und speichern Sie es unter dem Namen ClassD.as im Ordner complexInterface. Diese Klasse implementiert sowohl die InterfaceA- als auch die InterfaceB-Schnittstellen, die Sie bereits erstellt haben. Die ClassD-Klasse muss Methodenimplementierungen fr alle Methoden enthalten, die in diesen beiden Schnittstellendateien aufgelistet sind.

14. Geben

Sie in der Datei ClassD.as den folgenden ActionScript-Code in das Skriptfenster ein:

// Dateiname: ClassD.as class ClassD implements InterfaceA, InterfaceB { public function k():Number { return 15; } public function n(z:Number):Number { return (z * z); } public function o():Void { trace("o"); } }
Beispiel: Komplexe Schnittstelle erstellen 323

15.

Speichern Sie die genderte Datei ClassD.as. Erstellen Sie dann ein neues FlashDokument, und speichern Sie es unter dem Namen classdTest.fla. Dieses Flash-Dokument testet die bereits erstellte ClassD-Klasse. Geben Sie in der Datei classdTest.fla in Bild 1 der Zeitleiste den folgenden ActionScriptCode ein:
// Dateiname: classdTest.fla import ClassD; var myD:ClassD = new ClassD(); trace(myD.k()); // 15 trace(myD.n(7)); // 49 myD.o(); // o

16.

17.

Speichern Sie das genderte Dokument classdTest.fla und whlen Sie Steuerung > Film testen, um die Datei zu testen. Die Werte 15, 49 sowie der Buchstabe o sollten im Bedienfeld Ausgabe angezeigt werden. Diese Werte sind die Ergebnisse der Methoden ClassD.k(), ClassD.n() bzw. ClassD.o().

18.

Erstellen Sie ein neues ActionScript-Dokument, und speichern Sie es unter dem Namen InterfaceC.as. Diese Schnittstelle erweitert die bereits erstellte InterfaceA-Schnittstelle und fgt eine neue Methodendefinition hinzu.

19. Geben

Sie in der Datei InterfaceC.as den folgenden ActionScript-Code in das Skriptfenster ein:
// Dateiname: InterfaceC.as interface InterfaceC extends InterfaceA { public function p():Void; }

20.Speichern Sie die genderte ActionScript-Datei. Erstellen Sie dann eine neue ActionScript-

Datei, und speichern Sie sie unter dem Namen ClassE.as im Ordner complexInterface. Diese Klasse implementiert die beiden Schnittstellen InterfaceB und InterfaceC.
21. Geben

Sie in der Datei ClassE.as den folgenden ActionScript-Code in das Skriptfenster ein:

// Dateiname: ClassE.as class ClassE implements InterfaceB, InterfaceC { public function k():Number { return 15; } public function n(z:Number):Number { return (z + 5); } public function o():Void {

324

Schnittstellen

trace("o"); } public function p():Void { trace("p"); } } 22.Speichern

Sie das genderte ActionScript-Dokument. Erstellen Sie dann ein neues Flash-Dokument, und speichern Sie es unter dem Namen classeTest.fla im Ordner complexInterface.

23.Geben

Sie in der Datei classeTest.fla in Bild 1 der Zeitleiste den folgenden ActionScript-Code ein:

// Dateiname: classeTest.fla import ClassE; var myE:ClassE = new ClassE(); trace(myE.k()); // 15 trace(myE.n(7)); // 12 myE.o(); // o myE.p(); // p 24.Speichern

Sie das Flash-Dokument und whlen Sie Steuerung > Film testen, um die SWF-Datei zu testen.

Die Werte 15, 12, o und p werden im Bedienfeld Ausgabe angezeigt. Diese Werte werden von den Methoden ClassE.k(), ClassE.n(), ClassE.o() und ClassE.p() zurckgegeben. Da die ClassE-Klasse sowohl die InterfaceB-Schnittstelle als auch die InterfaceC-Schnittstelle implementiert, mssen alle Methoden aus diesen beiden Schnittstellendateien definiert werden. Die InterfaceB- und InterfaceC-Schnittstellen definieren zwar nur die Methoden o() und p(), doch InterfaceC erweitert InterfaceA. Dies bedeutet, dass alle definierten Methoden dieser Schnittstelle, k() und n(), ebenfalls implementiert werden mssen.

Beispiel: Komplexe Schnittstelle erstellen

325

326

Schnittstellen

KAPITEL 9

Ereignisse verarbeiten
Ereignisse sind Aktionen, die whrend der Wiedergabe einer SWF-Datei auftreten. Ein Ereignis, wie z. B. ein Mausklick oder ein Tastendruck, wird als Benutzerereignis bezeichnet, da es aus einer direkten Benutzerinteraktion resultiert. Ereignisse, die automatisch vom Flash Player generiert werden, wie z. B. die anfngliche Darstellung eines Movieclips auf der Bhne, werden als Systemereignisse bezeichnet, da sie nicht direkt vom Benutzer generiert werden. Fr die Reaktion Ihrer Anwendung auf Ereignisse ist eine so genannte Ereignisprozedur erforderlich. Dabei handelt es sich um einen mit einem bestimmten Objekt und Ereignis verknpften ActionScript-Code. Wenn der Benutzer beispielsweise auf eine Schaltflche auf der Bhne klickt, soll der Abspielkopf zum nchsten Bild springen, oder wenn der Ladevorgang einer XML-Datei ber das Netzwerk abgeschlossen ist, soll der Inhalt dieser Datei in einem Textfeld angezeigt werden. Sie knnen Ereignisse in ActionScript auf unterschiedliche Art behandeln:

ActionScript und Ereignisse auf Seite 328 Ereignis-Listener verwenden auf Seite 332 Schaltflchen- und Movieclip-Ereignisprozeduren verwenden auf Seite 337, insbesondere die Prozeduren on und onClipEvent. Ereignisse von Komponenteninstanzen bertragen auf Seite 342

Das Verwenden von Ereignisprozeduren mit loadMovie (MovieClip.loadMovie-Methode) kann zu unerwarteten Ergebnissen fhren. Wenn Sie eine Ereignisprozedur mit on() mit einer Schaltflche verknpfen oder mit einer Ereignisprozedurmethode wie onPress (MovieClip.onPress-Prozedur) eine dynamische Prozedur erstellen und dann loadMovie() aufrufen, steht die Ereignisprozedur nicht zur Verfgung, wenn der neue Inhalt geladen wurde. Wenn Sie jedoch eine Ereignisprozedur mit der Prozedur onClipEvent oder on mit einem Movieclip verknpfen und dann loadMovie() in diesem Movieclip aufrufen, steht die Ereignisprozedur weiter zur Verfgung, nachdem der neue Inhalt geladen wurde.

327

Weitere Informationen zum Verarbeiten von Ereignissen finden Sie in den folgenden Abschnitten:
ActionScript und Ereignisse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .328 Ereignis-Listener verwenden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .332 Ereignis-Listener mit Komponenten verwenden. . . . . . . . . . . . . . . . . . . . . . . . . . . . .335 Schaltflchen- und Movieclip-Ereignisprozeduren verwenden. . . . . . . . . . . . . . . . 337 Ereignisse von Komponenteninstanzen bertragen. . . . . . . . . . . . . . . . . . . . . . . . . .342 Movieclips mit Schaltflchenstatus erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .343 Gltigkeitsbereich von Ereignisprozeduren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344 Gltigkeitsbereich des Schlsselworts this. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .348 Delegate-Klasse verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .348

ActionScript und Ereignisse


In Flash wird ein ActionScript-Code beim Auftreten eines Ereignisses ausgefhrt: Ein Ereignis tritt beispielsweise auf, wenn ein Movieclip geladen wird, ein Schlsselbild auf der Zeitleiste aktiviert wird oder wenn der Benutzer auf eine Schaltflche klickt. Ereignisse knnen vom Benutzer oder vom System ausgelst werden. Benutzerereignisse werden ausgelst, wenn die Benutzer mit der Maus klicken oder Tasten drcken. Systemereignisse treten auf, wenn bestimmte Bedingungen erfllt oder Vorgnge abgeschlossen werden (eine SWF-Datei wird geladen, die Zeitleiste erreicht ein bestimmtes Bild, der Download einer Grafik wird abgeschlossen usw.). Wenn ein Ereignis auftritt, schreiben Sie eine Ereignisprozedur, um mit einer Aktion auf das Ereignis zu reagieren. Sie bentigen ein gutes Verstndnis von Ereignissen (wann und wo sie auftreten), um zu bestimmen, wie und wo mit einer Aktion auf die Ereignisse reagiert werden soll und welche ActionScript-Tools jeweils geeignet sind. Ereignisse lassen sich in mehrere Kategorien einteilen: Maus- und Tastaturereignisse, die auftreten, wenn Benutzer ber Maus und Tastatur mit der Flash-Anwendung interagieren, Movieclip-Ereignisse innerhalb von Movieclips sowie Bildereignisse, die innerhalb von Bildern in der Zeitleiste auftreten.

328

Ereignisse verarbeiten

Maus- und Tastaturereignisse


Benutzer, die mit Ihrer SWF-Datei oder Flash-Anwendung arbeiten, lsen Maus- und Tastaturereignisse aus. Wenn der Benutzer die Maus beispielsweise ber eine Schaltflche bewegt, treten die Ereignisse Button.onRollOver oder on(rollOver) auf. Beim Klicken auf eine Schaltflche wird das Ereignis Button.onRelease ausgelst und beim Drcken einer Taste der Tastatur das Ereignis on(keyPress). Sie knnen Code in einem Bild schreiben oder Skripts an Instanzen anfgen, um diese Ereignisse zu verarbeiten und die gewnschte Interaktivitt hinzuzufgen.

Movieclip-Ereignisse
Innerhalb eines Movieclips knnen verschiedene Movieclip-Ereignisse auftreten. Diese Ereignisse werden ausgelst, wenn der Benutzer eine Szene betritt oder verlsst oder ber Maus und Tastatur mit der Szene interagiert. Beispielsweise kann eine externe SWF- oder JPG-Datei in den Movieclip geladen werden, wenn der Benutzer die Szene betritt. Oder Sie knnen festlegen, dass der Benutzer die Elemente in der Szene mit der Maus neu anordnen kann.

Bildereignisse
In einer Hauptzeitleiste oder Movieclip-Zeitleiste tritt ein Systemereignis auf, wenn der Abspielkopf ein Schlsselbild erreicht. Dies wird als Bildereignis bezeichnet. Mithilfe von Bildereignissen knnen Aktionen auf Grundlage des Zeitverlaufs (Ablauf der Zeitleiste) ausgelst werden. Bildereignisse eignen sich auch fr die Interaktion mit Elementen, die derzeit auf der Bhne sichtbar sind. Wenn Sie einem Schlsselbild ein Skript hinzufgen, wird es ausgefhrt, sobald das Schlsselbild beim Abspielen erreicht wird. Ein Skript, das einem Bild zugewiesen ist, wird als Bildskript bezeichnet. Bildskripts haben meist den Zweck, die Wiedergabe zu stoppen, wenn ein bestimmtes Schlsselbild erreicht wird, und zwar ber die Funktion stop(). Sie whlen ein Schlsselbild aus und fgen dann im Bedienfeld Aktionen die Funktion stop() als Skriptelement hinzu.

Nachdem die SWF-Datei an einem bestimmten Schlsselbild gestoppt wurde, muss eine Aktion erfolgen. Beispielsweise knnen Sie mit einem Bildskript den Wert einer Bezeichnung dynamisch aktualisieren, die Interaktion der Elemente auf der Bhne steuern und so weiter.

ActionScript und Ereignisse

329

Ereignisprozedurmethoden verwenden
Ereignisprozedurmethoden sind Methoden einer Klasse, die aufgerufen werden, wenn ein Ereignis fr eine Instanz dieser Klasse eintritt. Beispielsweise definiert die MovieClip-Klasse die Prozedur onPress, die aufgerufen wird, wenn Sie auf ein Movieclip-Objekt klicken. Allerdings werden Ereignisprozeduren im Gegensatz zu anderen Methoden einer Klasse nicht direkt aufgerufen. Ereignisprozeduren werden vielmehr automatisch von Flash Player aufgerufen, wenn ein entsprechendes Ereignis eintritt. Die folgenden ActionScript-Klassen sind Beispiele fr Klassen, die Ereignisprozeduren definieren: Button, ContextMenu, ContextMenuItem, Key, LoadVars, LocalConnection, Mouse, MovieClip, MovieClipLoader, Selection, SharedObject, Sound, Stage, TextField, XML und XMLSocket. Weitere Informationen zu den verfgbaren Ereignisprozeduren finden Sie in den Eintrgen zu diesen Klassen im ActionScript 2.0 Referenzhandbuch. Das Wort Prozedur wird dem Titel jeder Ereignisprozedur hinzugefgt. Standardmig sind Ereignisprozedurmethoden nicht definiert: Wenn ein bestimmtes Ereignis eintritt, wird die zugehrige Ereignisprozedur aufgerufen, aber die Anwendung reagiert nicht anderweitig auf das Ereignis. Damit Ihre Anwendung auf das Ereignis reagieren kann, definieren Sie mit der Funktionsanweisung eine Funktion und weisen diese Funktion anschlieend der entsprechenden Ereignisprozedur zu. Die der Ereignisprozedur zugewiesene Funktion wird dann jedes Mal automatisch aufgerufen, wenn dieses Ereignis eintritt. Eine Ereignisprozedur besteht aus drei Teilen: dem Objekt, fr das das Ereignis gilt, dem Namen der Ereignisprozedurmethode fr das Objekt und der Funktion, die der Ereignisprozedur zugewiesen ist. Im folgenden Beispiel wird die Grundstruktur einer Ereignisprozedur dargestellt.
object.eventMethod = function () { // Eigenen Code hier einfgen, auf Ereignis reagieren }

Angenommen, auf der Bhne befindet sich die Schaltflche next_btn. Durch den folgenden Code wird der Schaltflchen-Ereignisprozedur onPress eine Funktion zugewiesen, durch die der Abspielkopf auf das nchste Bild in der aktuellen Zeitleiste springt.
next_btn.onPress = function () { nextFrame(); }

330

Ereignisse verarbeiten

Funktionsreferenzen zuweisen Im oben stehenden Code wird die Funktion nextFrame() direkt einer Ereignisprozedur fr onPress zugewiesen. Sie knnen einer Ereignisprozedurmethode wie im folgenden Beispiel dargestellt einen Funktionsverweis (d. h. einen Namen) zuweisen und die Funktion spter definieren: // Funktionsreferenz der onPress-Ereignisprozedur der // Schaltflche zuweisen. next_btn.onPress = goNextFrame; // goNextFrame()-Funktion definieren. function goNextFrame() { nextFrame(); }

Im folgenden Beispiel weisen Sie der Ereignisprozedur onPress die Funktionsreferenz zu, nicht den Rckgabewert der Funktion:
// Falsch! next_btn.onPress = goNextFrame(); // Richtig. next_btn.onPress = goNextFrame;

Einige Ereignisprozeduren erhalten bergebene Parameter, die Informationen ber das aufgetretene Ereignis enthalten. Wenn beispielsweise ein Textfeld Tastaturfokus erhlt, wird die Ereignisprozedur TextField.onSetFocus aufgerufen. Diese Ereignisprozedur empfngt einen Verweis auf das Textfeldobjekt, das zuvor Tastaturfokus besa.
bergebene Parameter erhalten

Durch den folgenden Code wird beispielsweise Text in das Textfeld eingefgt, das nicht lnger Tastaturfokus besitzt.
this.createTextField("my_txt", 99, 10, 10, 200, 20); my_txt.border = true; my_txt.type = "input"; this.createTextField("myOther_txt", 100, 10, 50, 200, 20); myOther_txt.border = true; myOther_txt.type = "input"; myOther_txt.onSetFocus = function(my_txt:TextField) { my_txt.text = "I just lost keyboard focus"; }; Ereignisprozeduren fr Laufzeitobjekte

Sie knnen Funktionen auch Ereignisprozeduren fr Objekte zuweisen, die Sie zur Laufzeit erstellen. Durch den folgenden Code wird beispielsweise eine neue Movieclip-Instanz (newclip_mc) erstellt. Anschlieend wird der Ereignisprozedur onPress des Clips eine Funktion zugewiesen.

this.attachMovie("symbolID", "newclip_mc", 10); newclip_mc.onPress = function () { trace("You pressed me"); }

Weitere Informationen finden Sie unter Movieclips zur Laufzeit erstellen auf Seite 360.
Ereignisprozedurmethoden verwenden 331

Durch die Erstellung einer Klasse, die eine ActionScript-Klasse erweitert, knnen Sie mit den von Ihnen verfassten Funktionen die Ereignisprozedurmethoden auer Kraft setzen. Sie knnen eine Ereignisprozedur in einer neuen Unterklasse definieren, die Sie dann fr verschiedene Objekte einsetzen knnen, indem Sie ein Symbol in der Bibliothek der erweiterten Klasse mit der neuen Unterklasse verknpfen. Der folgende Code setzt die Ereignisprozedur der MovieClip-Klasse onPress mit einer Funktion auer Kraft, die die Transparenz des Movieclips reduziert:
Ereignisprozedurmethoden bergehen // FadeAlpha-Klasse stellt die Transparenz ein, // wenn Sie den Movieclip klicken. class FadeAlpha extends MovieClip { function onPress() { this._alpha -= 10; } }

Detaillierte Anweisungen zur Erweiterung von ActionScript-Klassen und zum Verknpfen mit Symbolen in einer Bibliothek finden Sie in den Beispielen unter Symbolen in Flash eine Klasse zuweisen auf Seite 267. Einzelheiten zum Definieren und Schreiben einer Klassendatei finden Sie in Kapitel 6, Klassen.

Ereignis-Listener verwenden
Durch Ereignis-Listener knnen so genannte Listener-Objekte Ereignisse empfangen, die von anderen Objekten namens Broadcaster-Objekten gesendet wurden. Mit dem BroadcasterObjekt wird das Listener-Objekt zum Empfangen von Ereignissen vom Broadcaster registriert. Sie knnen beispielsweise ein Movieclip-Objekt zum Empfangen von onResizeBenachrichtigungen von der Bhne registrieren. Mglicherweise mchten Sie auch, dass eine Schaltflcheninstanz onChanged-Benachrichtigungen von einem Textfeld erhlt. Sie knnen mehrere Listener-Objekte zum Empfangen von Ereignissen von einem einzelnen Broadcaster registrieren. Darber hinaus lassen sich einzelne Listener-Objekte zum Empfangen von Ereignissen von mehreren Broadcastern registrieren. Im Gegensatz zu anderen Ereignisprozedurmethoden knnen Sie mit dem ListenerBroadcaster-Modell fr Ereignisse verschiedene Codeabschnitte konfliktfrei auf das gleiche Ereignis warten lassen. Bei Ereignismodellen, die das Listener-/Broadcaster-Modell nicht verwenden (z. B. XML.onLoad()) knnen Probleme auftreten, wenn verschiedene Codeabschnitte dasselbe Ereignis berwachen. Es kommt zu einem Konflikt mit der Steuerung dieses einzelnen Rckruffunktionsverweises XML.onLoad durch die unterschiedlichen Codeabschnitte. Mit dem Listener-/Broadcaster-Modell knnen Sie problemlos Listener demselben Ereignis hinzufgen, ohne sich um Code-Engpsse zu sorgen.

332

Ereignisse verarbeiten

Mit den folgenden ActionScript-Klassen werden Ereignisse bertragen: Key, Mouse, MovieClipLoader, Selection, Stage und TextField. Unter den einzelnen Klasseneintrgen im ActionScript 2.0-Referenzhandbuch knnen Sie nachlesen, welche Listener fr eine Klasse zur Verfgung stehen. Weitere Informationen zu den Ereignis-Listenern finden Sie in den folgenden Themen:

Ereignis-Listener-Modell auf Seite 333 Ereignis-Listener-Beispiel auf Seite 334

Auf der Webseite mit Flash-Beispielen unter www.adobe.com/go/learn_fl_samples_de finden Sie die Beispieldatei stagesize.fla, die zeigt, wie die Eigenschaft Stage.scaleMode sich bei einer Grennderung des Browserfensters auf die Werte Stage.width und Stage.height auswirkt. Laden Sie die komprimierte Beispieldatei herunter, dekomprimieren Sie sie, und wechseln Sie in den Ordner ActionScript2.0/StageSize, um auf das Beispiel zuzugreifen.

Ereignis-Listener-Modell
Das Ereignismodell fr Ereignis-Listener hnelt dem fr Ereignisprozeduren (siehe ActionScript und Ereignisse auf Seite 328), jedoch mit zwei wichtigen Unterschieden:

Sie weisen die Ereignisprozedur dem Listener-Objekt zu, nicht dem Objekt, das das Ereignis bertrgt. Eine spezielle Methode des Broadcaster-Objekts, addListener(), registriert das ListenerObjekt zum Empfangen der zugehrigen Ereignisse.

Durch den folgenden Code wird das Ereignis-Listener-Modell definiert:


var listenerObject:Object = new Object(); listenerObject.eventName = function(eventObj:Object) { // Ihren Code hier einfgen }; broadcasterObject.addListener(listenerObject);

Der Code beginnt mit einem Objekt, listenerObject, mit einer eventName-Eigenschaft. Beim diesem Listener-Objekt kann es sich um ein beliebiges Objekt handeln, z. B. um ein vorhandenes Objekt, einen Movieclip oder eine Schaltflcheninstanz auf der Bhne oder eine Instanz einer beliebigen ActionScript-Klasse. Ein benutzerdefinierter Movieclip kann beispielsweise die Listener-Methoden fr Stage-Listener implementieren. Sie knnen sogar ein Objekt verwenden, das auf verschiedene Listener-Typen wartet. Die Eigenschaft eventName ist ein Ereignis, das fr broadCastObject auftritt, das anschlieend ein Broadcasting des Ereignisses fr listenerObject durchfhrt. Sie knnen einem Broadcaster mehrere Listener zuweisen.

Ereignis-Listener verwenden

333

Sie weisen dem Ereignis-Listener eine Funktion zu, die auf bestimmte Weise auf das Ereignis reagiert. Abschlieend rufen Sie die addListener()-Methode fr das Objekt auf, das das Broadcasting fr das Ereignis durchfhrt. Dabei wird das Listener-Objekt an die addListener()-Methode bergeben. Damit die Registrierung eines Listener-Objekts zum Empfangen von Ereignissen aufgehoben wird, rufen Sie die Methode removeListener() des Broadcaster-Objekts auf und bergeben ihr den Namen des zu entfernenden Ereignisses und das Listener-Objekt.
broadcasterObject.removeListener(listenerObject);

Ereignis-Listener-Beispiel
Im folgenden Beispiel wird beschrieben, wie mit dem Ereignis-Listener onSetFocus in der Selection-Klasse ein einfacher Fokusmanager fr eine Gruppe von Eingabetextfeldern erstellt wird. Hierbei wird der Rahmen des Textfelds aktiviert (eingeblendet), das den Tastaturfokus erhlt. Der Rahmen des Textfelds, das den Fokus verloren hat, wird deaktiviert.
So erstellen Sie mit Ereignis-Listenern einen einfachen Fokusmanager:
1. 2.

Erstellen Sie auf der Bhne mit dem Textwerkzeug ein Textfeld. Markieren Sie das Textfeld, whlen Sie im Eigenschafteninspektor aus dem Popupmen Texttyp den Befehl Texteingabe, und aktivieren Sie die Option Rahmen um Text zeigen. Erstellen Sie unter dem ersten Eingabetextfeld ein weiteres Feld. Die Option Rahmen um Text zeigen darf dabei fr dieses Textfeld nicht aktiviert sein. Sie knnen weitere Eingabetextfelder erstellen.

3.

4.

Whlen Sie in der Zeitleiste Bild 1 aus, und ffnen Sie das Bedienfeld Aktionen (Fenster > Aktionen). Um ein Objekt zu erstellen, das auf eine Fokusbenachrichtigung von der Selection-Klasse wartet, geben Sie im Bedienfeld Aktionen den folgenden Code ein:
// Erstellt Listener-Objekt focusListener. var focusListener:Object = new Object(); // Definiert Funktion fr Listener-Objekt. focusListener.onSetFocus = function(oldFocus_txt:TextField, newFocus_txt:TextField) { oldFocus_txt.border = false; newFocus_txt.border = true; }

5.

334

Ereignisse verarbeiten

Dieser Code erstellt ein Objekt namens focusListener, das die Eigenschaft onSetFocus definiert und der Eigenschaft eine Funktion zuweist. Die Funktion erfordert zwei Parameter: einen Verweis auf das Textfeld, das keinen Fokus hat, und einen Verweis auf das Textfeld, das Fokus hat. Durch die Funktion wird die Eigenschaft border des Textfelds, das keinen Fokus hat, auf false und die Eigenschaft border des Textfelds, das Fokus hat, auf true eingestellt.
6.

Um das Objekt focusListener zum Empfangen von Ereignissen vom Selection-Objekt zu registrieren, fgen Sie im Bedienfeld Aktionen den folgenden Code hinzu:
// Registriert focusListener mit Broadcaster. Selection.addListener(focusListener);

7.

Testen Sie die Anwendung (Steuerung > Film testen), klicken Sie in das erste Textfeld, und drcken Sie die Tab-Taste, um den Fokus zwischen den Feldern umzuschalten.

Ereignis-Listener mit Komponenten verwenden


Bei der Verwendung von Komponenten nutzen Sie eine etwas andere Syntax fr EreignisListener. Komponenten generieren Ereignisse, die speziell berwacht werden mssen, und zwar entweder mit einem Listener-Objekt oder mit einer benutzerdefinierten Funktion. Im folgenden Beispiel wird gezeigt, wie Sie mithilfe von Ereignis-Listenern den Download eines dynamisch geladenen Bilds berwachen knnen.
So berwachen Sie Ereignisse der Loader-Komponente:
1.

Ziehen Sie eine Instanz der Loader-Komponente aus dem Bedienfeld Komponenten auf die Bhne. Whlen Sie die Loader-Komponente aus, und geben Sie im Eigenschafteninspektor my_ldr in das Textfeld Instanzname ein. Fgen Sie Bild 1 der Hauptzeitleiste den folgenden Code hinzu:
System.security.allowDomain("http://www.helpexamples.com"); var loaderListener:Object = new Object(); loaderListener.progress = function(evt_obj:Object):Void { trace(evt_obj.type); // Fortschritt trace("\t" + evt_obj.target.bytesLoaded + " of " + evt_obj.target.bytesTotal + " bytes loaded"); } loaderListener.complete = function(evt_obj:Object):Void { trace(evt_obj.type); // Abgeschlossen }

2.

3.

Ereignis-Listener mit Komponenten verwenden

335

my_ldr.addEventListener("progress", loaderListener); my_ldr.addEventListener("complete", loaderListener); my_ldr.load("http://www.helpexamples.com/flash/images/image1.jpg");

Dieser ActionScript-Code definiert das Listener-Objekt loaderListener, das zwei Ereignisse berwacht: progress und complete. Wenn eines dieser Ereignisse ausgelst wird, wird der zugehrige Code ausgefhrt, und ein Debugging-Text wird im Bedienfeld Ausgabe eingeblendet (wenn Sie die SWF-Datei in der Authoring-Umgebung testen). Im nchsten Schritt weisen Sie die Instanz my_ldr an, auf die beiden angegebenen Ereignisse (progress und complete) zu warten. Auerdem geben Sie das Listener-Objekt oder die Funktion an, die ausgefhrt werden soll, wenn das Ereignis ausgelst wird. Schlielich wird die Methode Loader.load() aufgerufen, die den Download des Bilds auslst.
4.

Whlen Sie Steuerung > Film testen, um die SWF-Datei zu testen. Das Bild wird in die Loader-Instanz auf der Bhne heruntergeladen. Anschlieend werden mehrere Meldungen im Bedienfeld Ausgabe angezeigt. Je nachdem, wie gro die heruntergeladene Bilddatei ist und ob sie auf dem lokalen Computer des Benutzers zwischengespeichert wurde, wird das Ereignis progress mglicherweise mehrmals ausgelst. Das Ereignis complete wird dagegen nur ausgelst, wenn das Bild vollstndig heruntergeladen wurde. Wenn Sie Komponenten verwenden und dabei Ereignisse auslsen, ist die Syntax etwas anders als bei den Ereignis-Listenern in den vorherigen Beispielen. Der Hauptunterschied besteht darin, dass Sie die Methode addEventListener() verwenden mssen anstatt addListener() aufzurufen. Auerdem mssen Sie nicht nur das Ereignis angeben, das berwacht werden soll, sondern auch das Objekt oder die Funktion fr den Ereignis-Listener.

Anstelle eines Listener-Objekts, wie im ersten Verfahren unter Ereignis-Listener mit Komponenten verwenden auf Seite 335 beschrieben, knnen Sie auch eine benutzerdefinierte Funktion verwenden. Der Code im vorherigen Beispiel knnte folgendermaen umgeschrieben werden:
System.security.allowDomain("http://www.helpexamples.com"); my_ldr.addEventListener("progress", progressListener); my_ldr.addEventListener("complete", completeListener); my_ldr.load("http://www.helpexamples.com/flash/images/image1.png"); function progressListener(evt_obj:Object):Void { trace(evt_obj.type); // Fortschritt trace("\t" + evt_obj.target.bytesLoaded + " of " + evt_obj.target.bytesTotal + " bytes loaded");

336

Ereignisse verarbeiten

} function completeListener(evt_obj:Object):Void { trace(evt_obj.type); // Abgeschlossen }


HINWEIS H IN W E I S

In den vorherigen Beispielen werden die Ereignis-Listener immer vor dem Aufruf der Methode Loader.load() hinzugefgt. Wenn Sie die Methode Loader.load() vor der Angabe der Ereignis-Listener aufrufen, wird der Ladevorgang mglicherweise abgeschlossen, bevor die Ereignis-Listener vollstndig definiert sind. Dies bedeutet, dass der Inhalt angezeigt, aber das Ereignis complete eventuell nicht ausgelst wird.

Schaltflchen- und MovieclipEreignisprozeduren verwenden


Mit den Ereignisprozeduren onClipEvent() und on() knnen Ereignisprozeduren einer Schaltflche oder einer Movieclip-Instanz auf der Bhne direkt zugeordnet werden. Die Ereignisprozedur onClipEvent() bertrgt Movieclip-Ereignisse, und die Ereignisprozedur on() dient zur Verwaltung von Schaltflchenereignissen. Wenn Sie eine Ereignisprozedur mit einer Schaltflchen- oder Movieclip-Instanz verknpfen wollen, klicken Sie auf die Schaltflchen- oder Movieclip-Instanz auf der Bhne, um sie in Fokus zu setzen. Dann geben Sie Code in das Bedienfeld Aktionen ein. Aus dem Titel des Bedienfelds Aktionen ist ersichtlich, ob der Code mit einer Schaltflche oder einem Movieclip verknpft wird. Aktionen Schaltflche oder Aktionen MovieClip. Richtlinien zur Verwendung von Code, der mit Schaltflchen- oder Movieclip-Instanzen verknpft ist, finden Sie unter Code Objekten zuweisen auf Seite 760.
Verwechseln Sie Ereignisprozeduren fr Schaltflchen und Movieclips nicht mit Komponentenereignissen wie SimpleButton.click, UIObject.hide und UIObject reveal. Diese mssen Komponenteninstanzen zugewiesen werden und werden in ActionScript 2.0-Komponenten verwenden behandelt.

Schaltflchen- und Movieclip-Ereignisprozeduren verwenden

337

und on()-Prozeduren knnen nur solchen Movieclip-Instanzen zugeordnet werden, die beim Authoring auf der Bhne platziert wurden. In Movieclip-Instanzen, die beispielsweise mithilfe der Methode attachMovie() zur Laufzeit whrend der Filmwiedergabe erstellt wurden, lassen sich onClipEvent()- und on()-Prozeduren hingegen nicht aufrufen. Mit Ereignisprozedurmethoden oder Ereignis-Listenern hngen Sie Ereignisprozeduren an Objekte an, die zur Laufzeit erstellt wurden. Informationen hierzu finden Sie unter ActionScript und Ereignisse auf Seite 328 und Ereignis-Listener verwenden auf Seite 332.
HINWEIS

onClipEvent()-

Das Anhngen von onClipEvent()- und on()-Prozeduren wird nicht empfohlen. Stattdessen sollten Sie Ihren Code in Bildskripten oder in eine Klassendatei einfgen, wie es in diesem Handbuch an verschiedenen Stellen gezeigt wird. Weitere Informationen hierzu finden Sie unter ActionScript und Ereignisse auf Seite 328 und Code Objekten zuweisen auf Seite 760.

Weitere Informationen zu Ereignisprozeduren fr Schaltflchen und Movieclips finden Sie unter den folgenden Themen: on und onClipEvent mit Ereignisprozedurmethoden verwenden auf Seite 338 Ereignisse fr on- oder onClipEvent-Methoden angeben auf Seite 340 Einem Objekt mehrere Prozeduren anhngen oder zuordnen auf Seite 341

on und onClipEvent mit Ereignisprozedurmethoden verwenden


In einigen Fllen knnen Sie verschiedene Verfahren fr die Verarbeitung von Ereignissen ohne Konflikte anwenden. Die Methoden on() und onClipEvent() fhren nicht zu Konflikten mit von Ihnen definierten Ereignisprozedurmethoden. Angenommen, fr eine Schaltflche in Ihrer SWF-Datei ist eine on(press)-Prozedur vorhanden, die zum Abspielen der SWF-Datei fhrt. Fr dieselbe Schaltflche kann eine onPress()-Methode vorhanden sein, fr die Sie eine Funktion definieren, durch die die Drehung eines Objekts auf der Bhne ausgelst wird. Wenn Sie auf die Schaltflche klicken, wird die SWF-Datei abgespielt, und das Objekt wird gedreht. Je nachdem, welche Ereignisse Sie zu welchem Zeitpunkt aufrufen mchten, knnen Sie on()- und onClipEvent()Methoden, Ereignisprozedurmethoden oder eine Kombination aus beiden Ereignisverarbeitungstypen verwenden. Der Gltigkeitsbereich von Variablen und Objekten in on()- und onClipEvent()Prozeduren weicht jedoch vom Gltigkeitsbereich von Ereignisprozeduren und Ereignis-Listenern ab. Siehe Gltigkeitsbereich von Ereignisprozeduren auf Seite 344.

338

Ereignisse verarbeiten

Sie knnen die Prozedur on() auch in Verbindung mit einem Movieclip verwenden, um Movieclips zu erstellen, die auf Schaltflchenereignisse reagieren. Weitere Informationen finden Sie unter Movieclips mit Schaltflchenstatus erstellen auf Seite 343. Weitere Informationen zum Angeben von Ereignissen fr on() und onClipEvent() finden Sie unter Ereignisse fr on- oder onClipEvent-Methoden angeben auf Seite 340.
So verwenden Sie die Ereignisprozeduren onhandler und onPress:
1.

Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen handlers.fla. Whlen Sie das Rechteckwerkzeug aus, und zeichnen Sie ein groes Quadrat auf der Bhne. Whlen Sie das Auswahlwerkzeug, und doppelklicken Sie auf das Quadrat auf der Bhne. Drcken Sie dann die Taste <F8>, um das Dialogfeld In Symbol konvertieren aufzurufen. Geben Sie einen Symbolnamen fr das Feld ein, setzen Sie den Typ auf Movie Clip, und klicken Sie auf OK. Geben Sie dem Movieclip auf der Bhne einen Instanznamen von box_mc. Fgen Sie das folgende ActionScript direkt zum Movieclip-Symbol auf der Bhne hinzu:
on (press) { trace("on (press) {...}"); }

2.

3.

4.

5. 6.

7.

Fgen Sie dem ersten Bild der Hauptzeitleiste den folgenden ActionScript-Code hinzu:
box_mc.onPress = function() { trace("box_mc.onPress = function() {...};"); };

8.

Whlen Sie Steuerung > Film testen, um das Flash-Dokument zu testen. Wenn Sie auf das Movieclip-Symbol auf der Bhne klicken, werden im Bedienfeld Ausgabe folgende Informationen angezeigt: on (press) {...} box_mc.onPress = function() {...};
H IN W E I S

Das Anhngen von onClipEvent()- und on()-Prozeduren wird nicht empfohlen. Stattdessen sollten Sie Ihren Code in Bildskripten oder in eine Klassendatei einfgen, wie es in diesem Handbuch an verschiedenen Stellen gezeigt wird. Weitere Informationen hierzu finden Sie unter ActionScript und Ereignisse auf Seite 328 und Code Objekten zuweisen auf Seite 760.

Schaltflchen- und Movieclip-Ereignisprozeduren verwenden

339

Ereignisse fr on- oder onClipEvent-Methoden angeben


Um eine der Prozeduren on() oder onClipEvent() zu verwenden, ordnen Sie diese direkt einer Instanz einer Schaltflche oder eines Movieclips auf der Bhne zu und geben das Ereignis an, das diese Instanz verarbeiten soll. Eine vollstndige Liste der Ereignisse, die von den Ereignisprozeduren on() und onClipEvent() untersttzt werden, finden Sie unter on-Prozedur und onClipEvent-Prozedur im ActionScript 2.0-Referenzhandbuch. Die folgende Ereignisprozedur on() wird beispielsweise ausgefhrt, wenn der Benutzer auf die Schaltflche klickt, der die Prozedur zugeordnet ist.
on (press) { trace("Thanks for pressing me."); }

Fr jede on()-Prozedur knnen auch zwei oder mehr Ereignisse angegeben werden, die durch Kommata voneinander getrennt sind. ActionScript in einer Prozedur wird ausgefhrt, wenn eines der Ereignisse eintritt, die in der Prozedur angegeben sind. Beispielsweise wird die folgende on()-Prozedur, die einer Schaltflche zugeordnet ist, dann ausgefhrt, wenn die Maus ber die Schaltflche und von ihr weg bewegt wird.
on (rollOver, rollOut) { trace("You rolled over, or rolled out"); }

Sie knnen Tastendruck-Ereignisse auch mithilfe von on()-Prozeduren hinzufgen. Beispielsweise verfolgt der folgende Code eine Zeichenfolge, wenn Sie die Zahl 3 auf der Tastatur drcken. Whlen Sie eine Schaltflche oder eine MovieClip-Instanz aus, und geben Sie den folgenden Code in das Bedienfeld Aktionen ein:
on (keyPress "3") { trace("You pressed 3") }

Wenn Sie stattdessen verfolgen mchten, wenn die Eingabetaste von einem Benutzer gedrckt wird, geben Sie den folgenden Code ein. Whlen Sie eine Schaltflche oder eine MovieClipInstanz aus, und geben Sie den folgenden Code in das Bedienfeld Aktionen ein:
on (keyPress "<Enter>") { trace("Enter Pressed"); }

340

Ereignisse verarbeiten

Whlen Sie Steuerung > Film testen, und drcken Sie die Eingabetaste, um das Verfolgen der Zeichenfolge im Bedienfeld Ausgabe anzuzeigen. Wenn nicht verfolgt wird, whlen Sie Steuerung > Tastenbefehle deaktivieren und versuchen es erneut. Weitere Informationen zum Hinzufgen einer Tastendruck-Interaktivitt zu Ihren Anwendungen finden Sie unter Key.
HINWEIS H I N W E IS

Das Anhngen von onClipEvent()- und on()-Prozeduren wird nicht empfohlen. Stattdessen sollten Sie Ihren Code in Bildskripten oder in eine Klassendatei einfgen, wie es in diesem Handbuch an verschiedenen Stellen gezeigt wird. Weitere Informationen hierzu finden Sie unter ActionScript und Ereignisse auf Seite 328 und Code Objekten zuweisen auf Seite 760.

Einem Objekt mehrere Prozeduren anhngen oder zuordnen


Wenn bei verschiedenen Ereignissen unterschiedliche Skripts ausgefhrt werden sollen, knnen Sie einem Objekt auch mehrere Prozeduren zuordnen. Folgende onClipEvent()Prozeduren beispielsweise knnen derselben Movieclip-Instanz zugeordnet werden. Die erste Prozedur wird beim ersten Laden des Movieclips ausgefhrt, d. h. beim ersten Anzeigen auf der Bhne. Die zweite Prozedur wird beim Entfernen des Movieclips von der Bhne ausgefhrt, d. h. beim Entladen.
on (press) { this.unloadMovie() } onClipEvent (load) { trace("I've loaded"); } onClipEvent (unload) { trace("I've unloaded"); } Das Anhngen von onClipEvent()- und on()-Prozeduren wird nicht empfohlen. Stattdessen sollten Sie Ihren Code in Bildskripten oder in eine Klassendatei einfgen, wie es in diesem Handbuch an verschiedenen Stellen gezeigt wird. Weitere Informationen hierzu finden Sie unter ActionScript und Ereignisse auf Seite 328 und Code Objekten zuweisen auf Seite 760.

Im folgenden Beispiel sehen Sie, wie mehrere Prozeduren an ein Objekt angehngt werden, das einen auf der Zeitleiste platzierten Code verwendet. Der Code hngt die Prozeduren onPress und onRelease an eine Movieclip-Instanz an.

Schaltflchen- und Movieclip-Ereignisprozeduren verwenden

341

So weisen Sie einem Objekt mehrere Prozeduren zu:


1. 2.

Erstellen Sie ein neues Flash-Dokument, und nennen Sie es assignMulti.fla. Whlen Sie das erste Bild in der Zeitleiste aus, und geben Sie im Bedienfeld Aktionen den folgenden Code ein:
this.createEmptyMovieClip("img_mc", 10); var mclListener:Object = new Object(); mclListener.onLoadInit = function(target_mc:MovieClip) { target_mc.onPress = function() { target_mc.startDrag(); }; target_mc.onRelease = function() { target_mc.stopDrag(); }; } mclListener.onLoadError = function(target_mc:MovieClip) { trace("error downloading image"); } var img_mcl:MovieClipLoader = new MovieClipLoader(); img_mcl.addListener(mclListener); img_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg", img_mc);

3.

Whlen Sie Steuerung > Film testen, um das Dokument zu testen. Die Grafik wird in die img_mc-Instanz geladen, und die Ereignisprozeduren onPress() und onRelease() ermglichen es Ihnen, die Grafik auf die Bhne zu verschieben.

Ereignisse von Komponenteninstanzen bertragen


Sie knnen fr alle Komponenteninstanzen festlegen, wie Ereignisse verarbeitet werden. Komponentenereignisse werden anders verarbeitet als Ereignisse, die von nativen ActionScript-Objekten bertragen werden. Weitere Informationen finden Sie in ActionScript 2.0-Komponenten verwenden.

342

Ereignisse verarbeiten

Movieclips mit Schaltflchenstatus erstellen


Beim Zuordnen einer on()-Prozedur zu einem Movieclip bzw. beim Zuweisen einer Funktion zu einer der MovieClip-Mausereignisprozeduren fr eine Movieclip-Instanz reagiert der Movieclip auf Mausereignisse in derselben Weise wie Schaltflchen. Wenn Sie der Zeitleiste des Movieclips die Bildbezeichnungen _up, _over und _down hinzufgen, wird automatisch der entsprechende Schaltflchenstatus (Up, Over, Down) erstellt. Wenn der Benutzer den Mauszeiger ber den Movieclip bewegt oder auf den Movieclip klickt, wird der Abspielkopf in das Bild mit der passenden Bildbezeichnung verschoben. Einen von einem Movieclip verwendeten Kollisionsbereich erstellen Sie mit der Eigenschaft hitArea (MovieClip.hitArea-Eigenschaft).
So erstellen Sie einen Schaltflchenstatus in Movieclips:
1.

Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen mcbutton.fla. Zeichnen Sie mit dem Rechteckwerkzeug ein kleines Rechteck (ca. 100 Pixel hoch und 20 Pixel breit) auf der Bhne. Whlen Sie das Auswahlwerkzeug aus, und drcken Sie die Taste <F8>, um das Dialogfeld In Symbol konvertieren aufzurufen. Geben Sie einen Symbolnamen fr mcbutton ein, setzen Sie den Symboltyp auf Movie Clip, und klicken Sie auf OK. Doppelklicken Sie auf die Movieclip-Schaltflche auf der Bhne, um den Symbolbearbeitungsmodus aufzurufen. Fgen Sie eine neue Ebene in die Zeitleiste des Movieclips ein, und nennen Sie sie labels. Geben Sie im Eigenschafteninspektor eine Bildbezeichnung _up an. Erstellen Sie eine neue Ebene oberhalb der Standardebene und der Ebene labels. Benennen Sie die neue Ebene in actions um, und fgen Sie das folgende ActionScript dem Bild 1 der Movieclip-Zeitleiste hinzu:
stop();

2.

3.

4.

5.

6. 7. 8. 9.

10. Whlen

Sie Bild 10, alle drei Ebenen aus, und whlen Sie Einfgen > Zeitleiste > Schlsselbild.

11.

Fgen Sie eine stop()-Aktion in Bild 10 auf der Ebene actions hinzu, und fgen Sie eine Bildbezeichnung fr _over in Bild 10 der Ebene labels ein.

Movieclips mit Schaltflchenstatus erstellen

343

12. Whlen

Sie das Rechteck in Bild 10 aus, und verwenden Sie den Eigenschafteninspektor, um eine andere Fllfarbe auszuwhlen. Erstellen Sie neue Schlsselbilder in Bild 20 jeder der drei Ebenen, und fgen Sie eine Bildbezeichnung fr _down im Eigenschafteninspektor hinzu. Sie die Farbe des Rechtecks in Bild 20, so dass jede der drei Schaltflche eine andere Farbe aufweist. Kehren Sie zur Hauptzeitleiste zurck. Damit der Movieclip auf Mausereignisse reagiert, fhren Sie einen der folgenden Schritte aus:

13.

14. ndern

15. 16.

Weisen Sie der Movieclip-Instanz eine on()-Ereignisprozedur zu, wie unter Schaltflchen- und Movieclip-Ereignisprozeduren verwenden auf Seite 337 beschrieben. Weisen Sie einer der Ereignisprozeduren des Movieclip-Mausereignisses (onPress, onRelease usw.) eine Funktion zu, wie unter ActionScript und Ereignisse auf Seite 328 beschrieben.

17.

Whlen Sie Steuerung > Film testen, um das Flash-Dokument zu testen. Halten Sie den Mauszeiger ber die Movieclip-Instanz auf der Bhne und der Movieclip wechselt automatisch in den _over-Zustand des Movieclips. Klicken Sie auf die Movieclip-Instanz und der Abspielkopf wechselt automatisch in den _down-Zustand des Movieclips.

Gltigkeitsbereich von Ereignisprozeduren


Der Gltigkeitsbereich (oder Kontext) von Variablen und Befehlen, die Sie in einer Ereignisprozedur deklarieren oder ausfhren, hngt vom Typ der verwendeten Ereignisprozedur ab: Ereignisprozeduren oder Ereignis-Listener bzw. die Prozeduren on() und onClipEvent(). Wenn Sie in einer neuen ActionScript-Klasse eine Ereignisprozedur definieren, hngt der Gltigkeitsbereich auch davon ab, wie Sie die Ereignisprozedur definieren. Dieser Abschnitt enthlt sowohl ActionScript 1.0- als auch ActionScript 2.0Beispiele: Funktionen, die Ereignisprozedurmethoden und EreignisListenern zugewiesen sind (wie alle von Ihnen geschriebenen ActionScript-Funktionen), definieren einen lokalen Variablengltigkeitsbereich. Dies gilt nicht fr on()- und onClipEvent()-Prozeduren.
ActionScript 1.0-Beispiele

344

Ereignisse verarbeiten

Betrachten Sie beispielsweise die folgenden beiden Ereignisprozeduren. Bei der ersten handelt es sich um eine onPress-Ereignisprozedur, die mit dem Movieclip clip_mc verknpft ist. Die zweite ist eine on()-Prozedur, die mit derselben Movieclip-Instanz verknpft ist.
// Mit Zeitleiste von Parent-Clip clip_mc verknpft: clip_mc.onPress = function () { var shoeColor; // lokale Funktionsvariable shoeColor = "blue"; } // on()-Prozedur an clip_mc angehngt: on (press) { var shoeColor; // kein lokaler Variablengltigkeitsbereich shoeColor = "blue"; }

Obwohl beide Ereignisprozeduren denselben Code enthalten, fallen die Ergebnisse unterschiedlich aus. Im ersten Fall ist die Variable color eine lokale Variable fr die fr onPress definierte Funktion. Im zweiten Fall bezieht sich der Variablengltigkeitsbereich auf die Zeitleiste des Movieclips clip_mc, da die Prozedur on() keinen lokalen Variablengltigkeitsbereich definiert. Bei on()-Ereignisprozeduren, die nicht Movieclips, sondern Schaltflchen zugeordnet sind, werden Variablen (sowie Funktions- und Methodenaufrufe) innerhalb des Gltigkeitsbereichs der Zeitleiste aufgerufen, die die Schaltflcheninstanz enthlt. Die folgende on()-Ereignisprozedur fhrt z. B. zu unterschiedlichen Ergebnissen, je nachdem, ob sie einem Button- oder einem Movieclip-Objekt zugeordnet ist. Im ersten Fall wird mit der play()-Funktion der Abspielkopf der Zeitleiste mit der Schaltflche gestartet; im zweiten Fall wird mit der play()-Funktion die Zeitleiste des Movieclips gestartet, dem die Prozedur zugewiesen ist.
// Einer Schaltflche zugewiesen. on (press) { play(); // Gibt bergeordnete Zeitleiste wieder. } // Einem Movieclip zugewiesen. on (press) { play(); // Gibt Zeitleiste des Movieclips wieder. }

Gltigkeitsbereich von Ereignisprozeduren

345

Wenn die Funktion play() einem Button-Objekt zugewiesen ist, wird sie fr die Zeitleiste aufgerufen, in der sich die Schaltflche befindet, d. h. fr die bergeordnete Zeitleiste der Schaltflche. Wenn allerdings dieselbe Prozedur einem Movieclip-Objekt zugeordnet ist, wird der play()-Funktionsaufruf fr den Movieclip angewendet, in dem die Prozedur enthalten ist. Wenn Sie einem Movieclip den folgenden Code zuordnen, wird die bergeordnete Zeitleiste wiedergegeben:
// Einem Movieclip zugewiesen. on (press) { _parent.play(); // Gibt bergeordnete Zeitleiste wieder. }

Innerhalb einer Ereignisprozedur- oder Ereignis-Listener-Definition wrde die gleiche play()-Funktion auf die Zeitleiste angewendet, die die Funktionsdefinition enthlt. Angenommen, Sie deklarieren die folgende my_mc.onPress-Ereignisprozedurmethode auf der Zeitleiste, die die Movieclip-Instanz my_mc enthlt:
// Auf der Zeitleiste festgelegte Funktion my_mc.onPress = function () { play(); // Gibt Zeitleiste wieder, in der sie definiert ist. };

Wenn Sie den durch die onPress-Ereignisprozedur definierten Movieclip wiedergeben mchten, mssen Sie mit dem Schlsselwort this auf den Movieclip verweisen:
// Auf der Hauptzeitleiste festgelegte Funktion my_mc.onPress = function () { this.play(); // Gibt die Zeitleiste des Clips my_mc wieder. };

Wird derselbe Code jedoch in der Hauptzeitleiste einer Schaltflcheninstanz platziert, wird stattdessen die Hauptzeitleiste wiedergegeben:
my_btn.onPress = function () { this.play(); // Gibt die Hauptzeitleiste wieder };

Weitere Informationen ber den Gltigkeitsbereich des Schlsselworts this in Ereignisprozeduren finden Sie unter Gltigkeitsbereich des Schlsselworts this auf Seite 348.
ActionScript 2.0-Beispiel Die folgende TextLoader-Klasse wird verwendet, um eine Textdatei zu laden und um nach dem Laden der Datei Text anzuzeigen. // TextLoader.as class TextLoader { private var params_lv:LoadVars; public function TextLoader() { params_lv = new LoadVars(); params_lv.onLoad = onLoadVarsDone; params_lv.load("http://www.helpexamples.com/flash/params.txt");

346

Ereignisse verarbeiten

} private function onLoadVarsDone(success:Boolean):Void { _level0.createTextField("my_txt", 999, 0, 0, 100, 20); _level0.my_txt.autoSize = "left"; _level0.my_txt.text = params_lv.monthNames; // undefined } }

Der Code kann nicht richtig funktionieren, weil ein Problem mit dem Gltigkeitsbereich der Ereignisprozeduren vorliegt. Es ist nicht eindeutig, ob this auf die onLoad-Ereignisprozedur oder auf die Klasse verweist. Sie erwarten vermutlich, dass in diesem Beispiel die Methode onLoadVarsDone() im Gltigkeitsbereich des TextLoader-Objekts aufgerufen wird. Sie wird jedoch im Gltigkeitsbereich des LoadVars-Objekts aufgerufen, da die Methode aus dem TextLoader-Objekt extrahiert und auf das LoadVars-Objekt gelegt wurde. Nachdem die Textdatei erfolgreich geladen wurden, ruft das LoadVars-Objekt die Ereignisprozedur this.onLoad auf. Die Funktion onLoadVarsDone() wird aufgerufen, wenn this auf LoadVars und nicht auf TextLoader gesetzt ist. Das Objekt params_lv befindet sich beim Aufrufen innerhalb des Gltigkeitsbereichs von this, obwohl die Funktion onLoadVarsDone() das Objekt params_lv als Verweis bentigt. Daher erwartet die Funktion onLoadVarsDone() eine params_lv.params_lv-Instanz, die nicht existiert. Verwenden Sie folgende Strategie, um die Methode onLoadVarsDone() im Gltigkeitsbereich des TextLoader-Objekts richtig aufzurufen: Verwenden Sie einen Funktionsliteral, um eine anonyme Funktion zu erstellen, die die gewnschte Funktion aufruft. Das Objekt owner ist im Gltigkeitsbereich der anonymen Funktion weiterhin sichtbar, kann also verwendet werden, um das aufrufende TextLoader-Objekt zu finden.
// TextLoader.as class TextLoader { private var params_lv:LoadVars; public function TextLoader() { params_lv = new LoadVars(); var owner:TextLoader = this; params_lv.onLoad = function (success:Boolean):Void { owner.onLoadVarsDone(success); } params_lv.load("http://www.helpexamples.com/flash/params.txt"); } private function onLoadVarsDone(success:Boolean):Void { _level0.createTextField("my_txt", 999, 0, 0, 100, 20); _level0.my_txt.autoSize = "left"; _level0.my_txt.text = params_lv.monthNames; // Januar,Februar,Mrz,... } }

Gltigkeitsbereich von Ereignisprozeduren

347

Gltigkeitsbereich des Schlsselworts this


Das Schlsselwort this verweist auf das Objekt im aktuellen Gltigkeitsbereich. Je nachdem, welcher Typ von Ereignisprozeduren verwendet wird, kann this auf verschiedene Objekte verweisen. verweist this auf das Objekt, durch das die Ereignisprozedur- oder Ereignis-Listener-Methode festgelegt wird. Im folgenden Code verweist this z. B. auf my_mc:
In einer Ereignisprozedur- oder Ereignis-Listener-Funktion // Der Hauptzeitleiste zugewiesene onPress()-Ereignisprozedur: my_mc.onPress = function () { trace(this); // _level0.my_mc }

verweist this wie im folgenden Beispiel auf den Movieclip, dem die on()-Prozedur zugewiesen ist:
In einer einem Movieclip zugewiesenen on()-Prozedur // Einem Movieclip mit Namen my_mc auf der Hauptzeitleiste zugewiesen on (press) { trace(this); // _level0.my_mc } In einer on()-Prozedur, die einer Schaltflche zugewiesen ist, verweist this wie im folgenden Beispiel auf die Zeitleiste, die die Schaltflche enthlt.: // Einer Schaltflche auf der Hauptzeitleiste zugewiesen on (press) { trace(this); // _level0 }

Delegate-Klasse verwenden
Mit der Delegate-Klasse knnen Sie eine Funktion in einem bestimmten Gltigkeitsbereich ausfhren. Mithilfe dieser Klasse knnen Sie ein Ereignis an zwei verschiedene Funktionen ausgeben (siehe ActionScript 2.0-Komponenten verwenden) und Funktionen innerhalb des Gltigkeitsbereichs der jeweiligen Klasse aufrufen. Wenn Sie eine Funktion als Parameter an EventDispatcher.addEventListener() bergeben, wird die Funktion im Gltigkeitsbereich der Broadcaster-Komponenteninstanz aufgerufen, also nicht im Kontext des Objekts, in dem sie deklariert ist (siehe ActionScript 2.0Komponenten verwenden). Sie knnen Delegate.create() aufrufen, um die Funktion innerhalb des Gltigkeitsbereichs des deklarierenden Objekts aufzurufen.

348

Ereignisse verarbeiten

In den folgenden Beispiel werden drei Methoden fr das Warten auf Ereignisse fr eine Button-Komponenteninstanz gezeigt. Egal, auf welche Art Sie Ereignis-Listener zu einer Button-Komponenteninstanz hinzufgen, das Ereignis wird in einem anderen Gltigkeitsbereich ausgelst.
So verwenden Sie die Delegate-Klassen zum Warten auf Ereignisse:
1.

Erstellen Sie ein neues Flash-Dokument, und speichern Sie es unter dem Namen delegate.fla. Ziehen Sie eine Button-Komponente aus dem Ordner User Interface des Bedienfeld Komponenten in die Bibliothek. Sie knnen die Button-Instanz auf der Bhne zu einem spteren Zeitpunkt mithilfe von ActionScript hinzufgen und positionieren.

2.

3.

Fgen Sie Bild 1 der Hauptzeitleiste den folgenden ActionScript-Code hinzu:


import mx.controls.Button; import mx.utils.Delegate; function clickHandler(eventObj:Object):Void { trace("[" + eventObj.type + "] event on " + eventObj.target + " instance."); trace("\t this -> " + this); } var buttonListener:Object = new Object(); buttonListener.click = function(eventObj:Object):Void { trace("[" + eventObj.type + "] event on " + eventObj.target + " instance."); trace("\t this -> " + this); }; this.createClassObject(Button, "one_button", 10, {label:"One"}); one_button.move(10, 10); one_button.addEventListener("click", clickHandler); this.createClassObject(Button, "two_button", 20, {label:"Two"}); two_button.move(120, 10); two_button.addEventListener("click", buttonListener); this.createClassObject(Button, "three_button", 30, {label:"Three"}); three_button.move(230, 10); three_button.addEventListener("click", Delegate.create(this, clickHandler));

Delegate-Klasse verwenden

349

Der oben stehende Code ist in sechs Abschnitte unterteilt (die Abschnitt sind durch eine Leerzeile voneinander getrennt). Der ersten Abschnitt importiert die Button-Klasse (fr die Button-Komponente) sowie die Delegate-Klasse. Der zweite Codeabschnitt definiert eine Funktion, die aufgerufen wird, wenn der Benutzer auf eine der Schaltflchen klickt. Der dritte Codeabschnitt erstellt ein Objekt, das Sie als einen Ereignis-Listener verwenden, und das Objekt wartet auf ein einziges Ereignis, click. Die brigen drei Codeabschnitt erstellen jeweils eine neue Button-Komponenteninstanz auf der Bhne, positionieren die Instanz neu und fgen einen Ereignis-Listener fr das click-Ereignis hinzu. Die erste Schaltflche fgt einen Ereignis-Listener fr das clickEreignis hinzu und bergibt einen Verweis direkt an eine click-Prozedur. Die zweite Schaltflche fgt einen Ereignis-Listener fr das click-Ereignis hinzu und bergibt einen Verweis an ein Listener-Objekt, das eine Prozedur fr das click-Ereignis enthlt. Abschlieend fr die dritte Funktion einen Ereignis-Listener fr das click-Ereignis hinzu, verwendet die Delegate-Klasse zum Auslsen des click-Ereignisses im Gltigkeitsbereich von this (this entspricht _level0), und bergibt einen Verweis an die click-Prozedur.
4. 5.

Whlen Sie Steuerung > Film testen, um das Flash-Dokument zu testen. Klicken Sie auf jede Schaltflcheninstanz auf der Bhne, um festzustellen, in welchem Gltigkeitsbereich das Ereignis ausgefhrt wird.
a.

Klicken Sie auf die erste Schaltflche auf der Bhne, um den folgenden Text im Bedienfeld Ausgabe anzuzeigen:
[click] event on _level0.one_button instance. this -> _level0.one_button

Wenn Sie auf die Instanz one_button klicken, verweist der Gltigkeitsbereich von this auf die Schaltflcheninstanz.
b.

Klicken Sie auf die zweite Schaltflche auf der Bhne, um den folgenden Text im Bedienfeld Ausgabe anzuzeigen:
[click] event on _level0.two_button instance. this -> [object Object]

Wenn Sie auf die Instanz two_button klicken, verweist der Gltigkeitsbereich von this auf das buttonListener-Objekt.
c.

Klicken Sie auf die dritte Schaltflche auf der Bhne, um den folgenden Text im Bedienfeld Ausgabe anzuzeigen:
[click] event on _level0.three_button instance. this -> _level0

Wenn Sie auf die Instanz three_button klicken, verweist der Gltigkeitsbereich von this auf den Gltigkeitsbereich, den Sie im Delegate.create()-Methodenaufruf angegeben haben, oder in diesem Fall auf _level0.
350 Ereignisse verarbeiten

KAPITEL 10

Mit Movieclips arbeiten


Bei Movieclips handelt es sich um eigenstndige SWF-Dateien, die unabhngig voneinander und von der Zeitleiste, in der sie enthalten sind, abgespielt werden. Wenn beispielsweise in der Hauptzeitleiste nur ein Bild enthalten ist, das seinerseits jedoch einen aus zehn Einzelbildern bestehenden Movieclip enthlt, so werden bei der Wiedergabe der SWFHauptdatei smtliche Bilder des Movieclips abgespielt. Ein Movieclip kann seinerseits andere Movieclips oder verschachtelte Clips enthalten. Movieclips, die auf diese Weise ineinander verschachtelt werden, haben eine hierarchische Struktur, wobei der bergeordnete Clip einen oder mehrere untergeordnete Clips enthalten kann. Sie knnen MovieClip-Instanzen mit einem Namen versehen und so als einmalige Objekte kennzeichnen, die mit ActionScript gesteuert werden knnen. Wenn Sie eine MovieclipInstanz mit einem Instanznamen versehen, kennzeichnet dieser Instanzname den Clip als Objekt des MovieClip-Klassentyps. Mithilfe der Eigenschaften und Methoden dieser MovieClip-Klasse wird das Aussehen und Verhalten von Movieclips zur Laufzeit gesteuert. Movieclips sind eigene Objekte, die auf Ereignisse reagieren und mit denen Nachrichten an andere Movieclip-Objekte gesendet werden knnen. Sie knnen auerdem ihren Status berwachen und untergeordnete Clips verwalten. Die komponentenbasierte Architektur in Flash CS3 Professional basiert also auf Movieclips. Die im Bedienfeld Komponenten verfgbaren Komponenten (Fenster > Komponenten) sind komplexe Movieclips, deren Aussehen und Verhalten genau programmiert wurden. Informationen zur Verwendung der Drawing-API (Zeichnungsmethoden der MovieClip-Klasse) sowie von Filtern, Effekten, Animationsskripts usw. finden Sie in Kapitel 12, Animationen, Filter und Zeichnungen

10

351

Weitere Informationen zu Movieclips finden Sie unter den folgenden Themen:


Einfhrung in die Steuerung von Movieclips mit ActionScript . . . . . . . . . . . . . . . . .352 Mehrere Methoden fr einen Movieclip aufrufen . . . . . . . . . . . . . . . . . . . . . . . . . . . .354 SWF-Dateien laden und entladen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .355 Position und Darstellung von Movieclips ndern . . . . . . . . . . . . . . . . . . . . . . . . . . . .358 Movieclips mit der Maus verschieben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 Movieclips zur Laufzeit erstellen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 Dynamisch erstellten Movieclips Parameter hinzufgen. . . . . . . . . . . . . . . . . . . . . .365 Moviecliptiefen verwalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 Movieclips mit ActionScript zwischenspeichern und durchblttern . . . . . . . . . . . . 371 Movieclips als Masken verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .379 Movieclip-Ereignisse verarbeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 Movieclip-Symbolen eine Klasse zuweisen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 Klasseneigenschaften initialisieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .383

Einfhrung in die Steuerung von Movieclips mit ActionScript


Sie knnen die globalen ActionScript-Funktionen oder die Methoden der MovieClip-Klasse verwenden, um Aufgaben mit Movieclips auszufhren. Einige Methoden der MovieClipKlasse bewirken dieselben Aufgaben wie die gleichnamigen Funktionen, whrend fr andere MovieClip-Methoden, beispielsweise hitTest() und swapDepths(), keine entsprechenden Funktionsnamen verfgbar sind. Das folgende Beispiel verdeutlicht den Unterschied zwischen einer Methode und einer Funktion hinsichtlich der Verwendung in einem Skript. Beide Anweisungen duplizieren die Instanz my_mc, weisen dem neuen Clip den Namen new_mc zu und platzieren ihn auf Stufe 5.
my_mc.duplicateMovieClip("new_mc", 5); duplicateMovieClip(my_mc, "new_mc", 5);

Wenn eine Funktion und eine Methode hnliche Verhalten bereitstellen, knnen Sie fr die Steuerung eines Movieclips sowohl die Funktion als auch die Methode verwenden. Fr welche dieser beiden Mglichkeiten Sie sich entscheiden, hngt ganz von Ihren persnlichen Vorlieben und Ihrer Erfahrung in der Skripterstellung mit ActionScript ab. Unabhngig davon, ob Sie eine Funktion oder eine Methode verwenden, muss die Zielzeitleiste beim Aufruf der Funktion oder Methode in Flash Player geladen sein.

352

Mit Movieclips arbeiten

Zum Aufrufen einer Methode geben Sie wie im folgenden Beispiel dargestellt den Zielpfad des Instanznamens, gefolgt von einem Punkt (.), dem Methodennamen und den erforderlichen Parametern ein:
myMovieClip.play(); parentClip.childClip.gotoAndPlay(3);

In der ersten Anweisung wird der Abspielkopf mithilfe der Methode play() zur Instanz myMovieClip bewegt. In der zweiten Anweisung sendet die Methode gotoAndPlay() den Abspielkopf zu Bild 3 der Instanz childClip (einer untergeordneten Instanz von parentClip) und bewegt den Kopf anschlieend weiter. Globale Funktionen, die zum Steuern einer Zeitleiste dienen, erwarten einen targetParameter mit der Angabe des Zielpfades zu der Instanz, die gesteuert werden soll. Im folgenden Skript beispielsweise wird in der Aktion startDrag() die Instanz, unter der der Code platziert wird, angesprochen und als ziehbares Objekt definiert:
my_mc.onPress = function() { startDrag(this); }; my_mc.onRelease = function() { stopDrag(); };

Folgende Funktionen adressieren Movieclips: loadMovie(), unloadMovie(), loadVariables(), setProperty(), startDrag(), duplicateMovieClip() sowie removeMovieClip(). Um diese Funktionen zu verwenden, mssen Sie den Zielpfad fr den Parameter target der Funktion eingeben, um das Ziel der Funktion festzulegen. Die folgenden MovieClip-Methoden steuern Movieclips oder geladene Stufen und verfgen nicht ber quivalente Funktionen: MovieClip.attachMovie(), MovieClip.createEmptyMovieClip(), MovieClip.createTextField(), MovieClip.getBounds(), MovieClip.getBytesLoaded(), MovieClip.getBytesTotal(), MovieClip.getDepth(), MovieClip.getInstanceAtDepth(), MovieClip.getNextHighestDepth(), MovieClip.globalToLocal(), MovieClip.localToGlobal(), MovieClip.hitTest(), MovieClip.setMask(), MovieClip.swapDepths(). Weitere Informationen zu diesen Funktionen und Methoden finden Sie unter den entsprechenden Eintrgen im ActionScript 2.0 Referenzhandbuch. Eine Beispielquelldatei namens animation.fla, die die Verwendung von Animationsskripts in Flash veranschaulicht, finden Sie auf der Webseite mit Flash-Beispielen unter www.adobe.com/go/learn_fl_samples_de. Laden Sie die komprimierte Beispieldatei herunter, dekomprimieren Sie sie, und wechseln Sie in den Ordner ActionScript2.0/Animation, um auf das Beispiel zuzugreifen.

Einfhrung in die Steuerung von Movieclips mit ActionScript

353

Beispieldateien fr Fotogalerieanwendungen finden Sie auf der Webseite mit Flash-Beispielen unter www.adobe.com/go/learn_fl_samples_de. Laden Sie die komprimierte Beispieldatei herunter, dekomprimieren Sie sie, und wechseln Sie in den Ordner ActionScript2.0/Galleries, um auf die Beispiele zuzugreifen:

gallery_tree.fla gallery_tween.fla

die demonstrieren, wie Sie Movieclips beim Laden von Bilddateien in eine SWF-Datei, die Animationsskripts enthlt, mit ActionScript dynamisch steuern knnen.

Mehrere Methoden fr einen Movieclip aufrufen


Mit der Anweisung with knnen Sie einen Movieclip adressieren und anschlieend gleich mehrere Methoden darauf anwenden. Die Anweisung with funktioniert nicht nur in Verbindung mit Movieclips, sondern kann zur Steuerung aller ActionScript-Objekte (z. B. Array, Color oder Sound) verwendet werden. Die Anweisung with erfordert einen Movieclip als Parameter. Das angegebene Objekt wird am Ende des aktuellen Zielpfads hinzugefgt. Alle in einer with-Anweisung verschachtelten Anweisungen werden innerhalb des neuen Zielpfades ausgefhrt, weisen also denselben Gltigkeitsbereich auf. Im folgenden Beispielskript wird der Anweisung with das Objekt donut.hole bergeben, um die Eigenschaften von hole zu ndern:
with (donut.hole) { _alpha = 20; _xscale = 150; _yscale = 150; }

Die Anweisung with bewirkt, dass die in ihr enthaltenen Anweisungen so verarbeitet werden, als wrden sie von der Zeitleiste der Instanz hole aus aufgerufen. Der oben beschriebene Code bewirkt also dasselbe wie die folgende, ausfhrlichere Variante:
donut.hole._alpha = 20; donut.hole._xscale = 150; donut.hole._yscale = 150;

Der oben beschriebene Code entspricht auch der folgenden Variante:


with (donut) { hole._alpha = 20; hole._xscale = 150; hole._yscale = 150; }

354

Mit Movieclips arbeiten

SWF-Dateien laden und entladen


Mit den folgenden Optionen knnen Sie weitere SWF-Dateien abspielen, ohne Flash Player zu schlieen, oder eine andere SWF-Datei aufrufen, ohne eine andere HTML-Seite zu laden:

Die globale Funktion loadMovie() oder die Methode loadMovie() der MovieClip-Klasse. Die Methode loadClip() der MovieClipLoader-Klasse. Weitere Informationen zur MovieClipLoader-Klasse finden Sie unter MovieClipLoader im ActionScript 2.0Referenzhandbuch.

Auerdem knnen Sie mit loadMovie() Variable an ein CGI-Skript senden, das eine SWF-Datei als CGI-Ausgabe erzeugt. So knnen Sie z. B. dynamische SWF-Dateien oder Bilddateien auf Grundlage von bestimmten Variablen in einem Movieclip laden. Beim Laden von SWF-Dateien knnen Sie angeben, auf welche Stufe oder in welchen Movieclip sie geladen werden. Wenn Sie eine SWF-Datei in ein Ziel laden, erbt die geladene Datei die Eigenschaften des als Ziel angegebenen Movieclips. Sie knnen diese Eigenschaften nach dem Laden des Flash-Films jedoch nach Belieben ndern. Die Methode unloadMovie() entfernt eine SWF-Datei, die zuvor mit loadMovie() geladen wurde. Indem Sie SWF-Dateien mit der Methode unloadMovie() ausdrcklich entfernen, stellen Sie einen reibungslosen bergang zwischen SWF-Dateien sicher und knnen u. U. den vom Flash Player beanspruchten Speicher reduzieren. In manchen Fllen ist es effizienter, die Eigenschaft _visible des Movieclips auf false zu setzen, anstatt den Clip zu entfernen. Wenn Sie den Clip spter mglicherweise noch einmal verwenden mchten, setzen Sie die Eigenschaft _visible auf false und dann bei Bedarf wieder auf true. Die Methode loadMovie() kann fr folgende Aufgaben eingesetzt werden:

Abspielen von mehreren Werbeeinblendungen in Form von SWF-Dateien hintereinander. Zu diesem Zweck wird am Ende jeder SWF-Datei eine loadMovie()-Funktion eingefgt, die die SWF-Dateien in der angegebenen Reihenfolge ldt und entfernt. Erstellen einer verzweigten Benutzeroberflche fr die Auswahl verschiedener SWF-Dateien, mit denen der Inhalt einer Seite angezeigt wird. Erstellen einer Navigationsoberflche mit Steuerelementen auf Stufe 0, ber die Inhalte in andere Stufen geladen werden. Durch das Laden von Inhalten in Stufen erzielen Sie weichere bergnge als durch das Laden neuer HTML-Seiten in einen Browser.

Weitere Informationen zum Laden von SWF-Dateien finden Sie unter Externe SWF- und Bilddateien laden auf Seite 611. Weitere Informationen finden Sie unter den folgenden Themen:

Hauptzeitleisten fr geladene SWF-Dateien festlegen auf Seite 356 Bilddateien in Movieclips laden auf Seite 357
SWF-Dateien laden und entladen 355

Hauptzeitleisten fr geladene SWF-Dateien festlegen


Die ActionScript-Eigenschaft _root legt einen Bezug auf die Hauptzeitleiste einer SWFDatei fest oder enthlt einen solchen Bezug. Wenn eine SWF-Datei mehrere Stufen besitzt, befindet sich die Hauptzeitleiste auf der Stufe, in der das momentan ausgefhrte Skript enthalten ist. Wenn ein Skript in Stufe 1 beispielsweise _root auswertet, wird _level1 zurckgegeben. Die durch _root angegebene Zeitleiste ndert sich in Abhngigkeit davon, ob eine SWF-Datei unabhngig (auf ihrer eigenen Stufe) abgespielt wird oder mit einem loadMovie()-Aufruf in eine Movieclip-Instanz geladen wurde. Im nachstehend aufgefhrten Beispiel trgt eine Datei den Namen container.swf. Diese Datei verfgt auf der Hauptzeitleiste ber eine Movieclip-Instanz namens target_mc. Die Datei container.swf deklariert eine Variable mit dem Namen userName auf der eigenen Hauptzeitleiste; dasselbe Skript ldt anschlieend eine andere Datei namens contents.swf in den Movieclip target_mc.
// In container.swf: _root.userName = "Tim"; target_mc.loadMovie("contents.swf"); my_btn.onRelease = function():Void { trace(_root.userName); };

Im folgenden Beispiel deklariert die geladene SWF-Datei contents.swf auf der Hauptzeitleiste auerdem eine Variable namens userName:
// In contents.swf: _root.userName = "Mary";

Wenn die Datei contents.swf in den Movieclip in container.swf geladen wurde, wird der Wert fr userName, der der Hauptzeitleiste der wiedergegebenen SWF-Datei (container.swf ) zugewiesen ist, auf "Mary" anstelle von "Tim" eingestellt. Dadurch funktioniert der Code in den Dateien container.swf und contents.swf mglicherweise nicht mehr korrekt. Wenn _root immer die Zeitleiste der geladenen SWF-Datei anstatt der Hauptzeitleiste auswerten soll, verwenden Sie die Eigenschaft _lockroot. Sie knnen diese Eigenschaft in der SWF-Datei festlegen, die geladen wird, oder in der Prozedur, die den Movieclip ldt. Wenn _lockroot in einer Movieclip-Instanz auf true eingestellt ist, fungiert dieser Movieclip als _root fr eine beliebige SWF-Datei, die in den Clip geladen wurde. Wenn _lockroot in einer SWF-Datei auf true eingestellt wird, fungiert die betreffende SWF-Datei unabhngig davon, welche andere SWF-Datei sie ldt, als root fr sich selbst. Sie knnen _lockroot in jedem beliebigen Movieclip und in einer beliebigen Anzahl von Movieclips auf true einstellen. Standardmig ist diese Eigenschaft auf false eingestellt.

356

Mit Movieclips arbeiten

Der Autor der Datei container.swf kann beispielsweise den folgenden Code in das erste Bild der Hauptzeitleiste einfgen:
// Dem Bild 1 in container.swf hinzugefgt: target_mc._lockroot = true;

Durch diesen Schritt wird sichergestellt, dass Verweise auf _root in der Datei contents.swf (oder einer anderen in die Datei target_mc geladenen SWF-Datei) sich auf die eigene Zeitleiste beziehen, nicht auf die Hauptzeitleiste von container.swf. Wenn Sie jetzt auf die Schaltflche klicken, wird Tim angezeigt. Als Alternative knnte der Autor der Datei contents.swf der Hauptzeitleiste den folgenden Code hinzufgen:
// Dem Bild 1 in contents.swf hinzugefgt: this._lockroot = true;

Dadurch kann sichergestellt werden, dass sich jeder Verweis auf _root auf die eigene Hauptzeitleiste und nicht auf die der wiedergegebenen SWF-Datei bezieht, unabhngig davon, in welche Datei contents.swf geladen ist. Weitere Informationen finden Sie unter _lockroot (MovieClip._lockrootEigenschaft).

Bilddateien in Movieclips laden


Sie knnen die Funktion loadMovie() oder die gleichnamige MovieClip-Methode verwenden, um Bilddateien in eine Movieclip-Instanz zu laden. Auerdem knnen Sie die Funktion loadMovieNum() verwenden, um eine Bilddatei in eine Stufe zu laden. Beim Laden eines Bilds in einen Movieclip wird die linke obere Bildecke am Registrierungspunkt des Movieclips ausgerichtet. Da dieser Registrierungspunkt in vielen Fllen in der Mitte des Movieclips liegt, erscheint das geladene Bild unter Umstnden nicht ordnungsgem zentriert. Wenn Sie ein Bild in eine Hauptzeitleiste laden, wird die linke obere Bildecke an der linken oberen Ecke der Bhne ausgerichtet. Das geladene Bild erbt die Rotations- und Skalierungseigenschaften des Movieclips, dessen ursprnglicher Inhalt jedoch entfernt wird. Weitere Informationen finden Sie in den Eintrgen loadMovie-Funktion, loadMovie (MovieClip.loadMovie-Methode) und loadMovieNum-Funktion im ActionScript 2.0Referenzhandbuch sowie unter Externe SWF- und Bilddateien laden auf Seite 611.

SWF-Dateien laden und entladen

357

Position und Darstellung von Movieclips ndern


Wenn Sie die Eigenschaften eines Movieclips whrend der Filmwiedergabe ndern mchten, knnen Sie eine Anweisung schreiben, die den gewnschten Eigenschaftswert zuweist, oder die Funktion setProperty() verwenden. Der folgende Code beispielsweise stellt die Drehung der Instanz mc auf den Wert 45 ein:
my_mc._rotation = 45;

Dieselbe Wirkung lsst sich wie im folgenden Code auch mit der Funktion setProperty() erzielen:
setProperty("my_mc", _rotation, 45);

Die Werte mancher Eigenschaften knnen nur gelesen, jedoch nicht eingestellt werden. Diese Eigenschaften werden als schreibgeschtzte Eigenschaften bezeichnet und sind im ActionScript 2.0-Referenzhandbuch als solche gekennzeichnet. Im Einzelnen handelt es sich hierbei um die Eigenschaften _currentframe, _droptarget, _framesloaded, _parent, _target, _totalframes, _url, _xmouse und _ymouse. Die Werte von allen nicht schreibgeschtzten Eigenschaften lassen sich mit entsprechenden Anweisungen festlegen und ndern. Mit der folgenden Anweisung wird die Eigenschaft _alpha der Movieclip-Instanz wheel_mc eingestellt, die wiederum eine untergeordnete Instanz von car_mc ist:
car_mc.wheel_mc._alpha = 50;

Sie knnen auch Anweisungen schreiben, die den Wert einer Movieclipeigenschaft abfragen. Die folgende Anweisung ermittelt beispielsweise den Wert der Eigenschaft _xmouse in der Zeitleiste der aktuellen Stufe und stellt die Eigenschaft _x der Instanz my_mc auf denselben Wert ein:
this.onEnterFrame = function() { my_mc._x = _root._xmouse; };

Dieselbe Wirkung lsst sich wie im folgenden Code auch mit der Funktion getProperty() erzielen:
this.onEnterFrame = function() { my_mc._x = getProperty(_root, _xmouse); };

358

Mit Movieclips arbeiten

Die Eigenschaften _x, _y, _rotation, _xscale, _yscale, _height, _width, _alpha und _visible des Movieclips werden von Transformationen seines bergeordneten Elements beeinflusst und wirken sich ihrerseits auf den Movieclip und seine untergeordneten Elemente aus. Bei den Eigenschaften _focusrect, _highquality, _quality und _soundbuftime handelt es sich um globale Eigenschaften, die ausschlielich der Hauptzeitleiste auf Stufe 0 zugeordnet sind. Alle brigen Eigenschaften beziehen sich auf den einzelnen Movieclip oder die geladene Stufe. Eine Liste der Movieclip-Eigenschaften finden Sie in der Eigenschaftenbersicht fr die Klasse MovieClip im ActionScript 2.0-Referenzhandbuch. Eine Beispielquelldatei namens animation.fla, die die Verwendung von Animationsskripts in Flash veranschaulicht, finden Sie auf der Webseite mit Flash-Beispielen unter www.adobe.com/go/learn_fl_samples_de. Laden Sie die komprimierte Beispieldatei herunter, dekomprimieren Sie sie, und wechseln Sie in den Ordner ActionScript2.0/Animation, um auf das Beispiel zuzugreifen. Beispieldateien fr Fotogalerieanwendungen finden Sie auf der Webseite mit Flash-Beispielen unter www.adobe.com/go/learn_fl_samples_de. Laden Sie die komprimierte Beispieldatei herunter, dekomprimieren Sie sie, und wechseln Sie in den Ordner ActionScript2.0/Galleries, um auf die Beispiele zuzugreifen:

gallery_tree.fla gallery_tween.fla

Movieclips mit der Maus verschieben


Mithilfe der globalen Funktion startDrag() oder der Methode MovieClip.startDrag() knnen Sie einen Movieclip als ziehbares Objekt definieren. Ziehbare Movieclips werden beispielsweise fr Spiele, Drag & Drop-Funktionen, benutzerdefinierbare Oberflchen, Bildlaufleisten und Schieberegler verwendet. Ein Movieclip bleibt so lange ziehbar, bis die Freigabe durch stopDrag() aufgehoben oder ein anderer Movieclip mit startDrag() als ziehbares Objekt definiert wird. Es knnen nicht mehrere Movieclips gleichzeitig in einer SWF-Datei gezogen werden.

Movieclips mit der Maus verschieben

359

Wenn Sie ein komplexeres Drag & Drop-Verhalten erstellen mchten, knnen Sie die Eigenschaft _droptarget des als ziehbares Objekt definierten Movieclips auswerten. So knnen Sie beispielsweise anhand der Eigenschaft _droptarget feststellen, ob der Movieclip auf einen bestimmten Movieclip (z. B. auf einen Papierkorb) gezogen wurde, und dann gegebenenfalls eine andere Aktion auslsen, wie im folgenden Beispiel gezeigt:
//Ein zu entfernendes Objekt ziehen garbage_mc.onPress = function() { this.startDrag(false); }; // Objekt unsichtbar machen, wenn es ber den Papierkorb gezogen wird garbage_mc.onRelease = function() { this.stopDrag(); // Schrgstrich-Syntax mit eval in Punkt-Syntax umwandeln if (eval(this._droptarget) == trashcan_mc) { garbage_mc._visible = false; } };

Weitere Informationen finden Sie unter startDrag-Funktion oder startDrag (MovieClip.startDrag-Methode) im ActionScript 2.0-Referenzhandbuch. Mit ActionScript knnen Sie Movieclips dynamisch steuern, whrend Bilddateien in eine SWF-Dateien geladen werden. Dazu gehrt auch die Definition eines Movieclips als ziehbares Objekt. Eine Beispielquelldatei gallery_tween.fla, die dies zeigt, finden Sie auf der Webseite mit Flash-Beispielen unter www.adobe.com/go/learn_fl_samples_de. Laden Sie die komprimierte Beispieldatei herunter, dekomprimieren Sie sie, und wechseln Sie in den Ordner ActionScript2.0/Galleries, um auf das Beispiel zuzugreifen.

Movieclips zur Laufzeit erstellen


Movieclip-Instanzen knnen nicht nur in der Flash-Authoring-Umgebung sondern mit den folgenden Verfahren auch zur Laufzeit erstellt werden:

Leere Movieclips erstellen auf Seite 361 Movieclips duplizieren oder entfernen auf Seite 362 Movieclip-Symbol der Bhne zuweisen auf Seite 363

Jede zur Laufzeit erstellte Movieclip-Instanz muss ber einen Instanznamen verfgen und mit einem Wert fr die Tiefe (Stapel- oder Z-Reihenfolge) versehen sein. Die Tiefe gibt an, wie sich der neue Clip mit anderen Clips auf derselben Zeitleiste berlappt. So knnen Sie auch Movieclips berschreiben, die sich in derselben Tiefe befinden. (Siehe Moviecliptiefen verwalten auf Seite 367.)

360

Mit Movieclips arbeiten

Mit ActionScript knnen Sie Movieclips dynamisch steuern, whrend Bilddateien in eine SWF-Dateien geladen werden. Eine Beispielquelldatei gallery_tween.fla, die dies zeigt, finden Sie auf der Webseite mit Flash-Beispielen unter www.adobe.com/go/learn_fl_samples_de. Laden Sie die komprimierte Beispieldatei herunter, dekomprimieren Sie sie, und wechseln Sie in den Ordner ActionScript2.0/Galleries, um auf das Beispiel zuzugreifen. Eine Beispieldatei namens animation.fla, mit der Sie mehrere Movieclips zur Laufzeit erstellen und entfernen, finden Sie auf der Webseite mit Flash-Beispielen unter www.adobe.com/go/learn_fl_samples_de. Laden Sie die komprimierte Beispieldatei herunter, dekomprimieren Sie sie, und wechseln Sie in den Ordner ActionScript2.0/Animation, um auf das Beispiel zuzugreifen. Weitere Informationen finden Sie unter den folgenden Themen:

Leere Movieclips erstellen auf Seite 361 Movieclips duplizieren oder entfernen auf Seite 362 Movieclip-Symbol der Bhne zuweisen auf Seite 363

Leere Movieclips erstellen


Mithilfe der Methode createEmptyMovieClip() der MovieClip-Klasse knnen Sie eine neue, leere Movieclip-Instanz auf der Bhne erstellen. Diese Methode erstellt einen Movieclip als untergeordnetes Objekt des Clips, von dem aus der Aufruf erfolgt. Der Registrierungspunkt fr einen neuen leeren Movieclip ist die linke obere Ecke. Mit dem folgenden Code wird beispielsweise ein neuer, untergeordneter Film namens new_mc in der Tiefe 10 im bergeordneten Movieclip namens parent_mc erstellt:
parent_mc.createEmptyMovieClip("new_mc", 10);

Mit dem folgenden Code wird ein neuer Movieclip namens canvas_mc auf der Hauptzeitleiste der SWF-Datei erstellt, in der das Skript wiedergegeben wird, und ber loadMovie() wird eine externe JPEG-Datei in den Movieclip geladen:
this.createEmptyMovieClip("canvas_mc", 10); canvas_mc.loadMovie("http://www.helpexamples.com/flash/images/image1.jpg");

Movieclips zur Laufzeit erstellen

361

Wie im folgenden Beispiel gezeigt wird, knnen Sie das Bild image2.jpg in einen Movieclip laden und mit der Methode MovieClip.onPress() festlegen, dass sich das Bild wie eine Schaltflche verhlt. Wenn Sie mit loadMovie() eine Bilddatei laden, wird der Movieclip durch das Bild ersetzt, Sie haben jedoch keinen Zugriff auf die Movieclip-Methoden. Um auf diese Methoden Zugriff zu erhalten, mssen Sie einen leeren bergeordneten Movieclip und einen untergeordneten Container-Movieclip erstellen. Laden Sie das Bild in den Container, und platzieren Sie eine Ereignisprozedur in den bergeordneten Movieclip.
// Erstellt bergeordneten Movieclip fr den Container this.createEmptyMovieClip("my_mc", 0); // erstellt untergeordneten Movieclip in "my_mc" // dies ist der Movieclip, der durch das Bild ersetzt wird my_mc.createEmptyMovieClip("container_mc",99); // laden Sie das Bild mit MovieClipLoader var my_mcl:MovieClipLoader = new MovieClipLoader(); my_mcl.loadClip("http://www.helpexamples.com/flash/images/image2.jpg", my_mc.container_mc); // platzieren Sie eine Ereignisprozedur in den // bergeordneten Movieclip my_mc my_mc.onPress = function():Void { trace("It works"); };

Weitere Informationen hierzu finden Sie unter createEmptyMovieClip (MovieClip.createEmptyMovieClip-Methode) im ActionScript 2.0 Referenzhandbuch. Eine Beispieldatei namens animation.fla, mit der Sie mehrere Movieclips zur Laufzeit erstellen und entfernen, finden Sie auf der Webseite mit Flash-Beispielen unter www.adobe.com/go/learn_fl_samples_de. Laden Sie die komprimierte Beispieldatei herunter, dekomprimieren Sie sie, und wechseln Sie in den Ordner ActionScript2.0/Animation, um auf das Beispiel zuzugreifen.

Movieclips duplizieren oder entfernen


Die globalen Funktionen duplicateMovieClip() und removeMovieClip() sowie die gleichnamigen MovieClip-Methoden dienen zum Duplizieren bzw. Entfernen von MovieclipInstanzen. Mit der Methode duplicateMovieClip() wird eine neue Instanz einer vorhandenen Movieclip-Instanz erstellt, dieser Instanz ein neuer Instanzname zugewiesen und ein Wert fr die Tiefe oder die Z-Reihenfolge festgelegt. Ein duplizierter Movieclip beginnt immer bei Bild 1, auch wenn zum Zeitpunkt des Duplizierens ein anderes Bild des ursprnglichen Movieclips wiedergegeben wurde, und wird stets vor allen bereits in der Zeitleiste enthaltenen Movieclips dargestellt.

362

Mit Movieclips arbeiten

Mithilfe von removeMovieClip() knnen Sie einen Movieclip wieder entfernen, den Sie mit duplicateMovieClip() erstellt haben. Auerdem werden duplizierte Movieclips automatisch entfernt, wenn Sie den bergeordneten Movieclip lschen. Weitere Informationen finden Sie unter duplicateMovieClip-Funktion und removeMovieClip-Funktion im ActionScript 2.0-Referenzhandbuch. Eine Beispieldatei namens animation.fla, mit der Sie mehrere Movieclips zur Laufzeit erstellen und entfernen, finden Sie auf der Webseite mit Flash-Beispielen unter www.adobe.com/go/learn_fl_samples_de. Laden Sie die komprimierte Beispieldatei herunter, dekomprimieren Sie sie, und wechseln Sie in den Ordner ActionScript2.0/Animation, um auf das Beispiel zuzugreifen.

Movieclip-Symbol der Bhne zuweisen


Als weitere Mglichkeit knnen Sie zum Erstellen von Movieclip-Instanzen zur Laufzeit die Methode attachMovie() verwenden. Die Methode attachMovie() weist der Bhne eine Instanz eines Movieclip-Symbols in der Bibliothek der SWF-Datei zu. Der neue Movieclip wird dem zugewiesenen Movieclip untergeordnet. Wenn Sie ActionScript zum Zuweisen eines Movieclip-Symbols aus der Bibliothek verwenden mchten, mssen Sie das Symbol fr ActionScript exportieren und ihm einen eindeutigen Verknpfungsbezeichner zuordnen. Verwenden Sie hierfr das Dialogfeld Verknpfungseigenschaften. Standardmig werden alle Movieclips, die zur Verwendung mit ActionScript exportiert werden, vor dem ersten Bild der SWF-Datei geladen, die sie enthlt. Dadurch kann sich die Wiedergabe des ersten Bilds verzgern. Wenn Sie einem Element einen Verknpfungsbezeichner zuweisen, knnen Sie zugleich angeben, ob dieser Inhalt vor dem ersten Bild hinzugefgt werden soll. Wenn dies nicht der Fall sein soll, mssen Sie eine Instanz des Inhalts in ein anderes Bild der SWF-Datei aufnehmen. Andernfalls wird das Element nicht in die SWF-Datei exportiert.
So weisen Sie einem Movieclip einen Verknpfungsbezeichner zu:
1. 2. 3.

Whlen Sie Fenster > Bibliothek, um das Bedienfeld Bibliothek zu ffnen. Whlen Sie im Bedienfeld Bibliothek einen Movieclip aus. Whlen Sie Bedienfeld Bibliothek im Optionsmen die Option Verknpfung. Das Dialogfeld Verknpfungseigenschaften wird angezeigt. Whlen Sie unter Verknpfung die Einstellung Export fr ActionScript.

4.

Movieclips zur Laufzeit erstellen

363

5.

Geben Sie in das Feld Bezeichner eine ID fr den Movieclip ein. Standardmig sind der Bezeichner und der Symbolname identisch. Wahlweise knnen Sie dem Movieclip-Symbol eine ActionScript-Klasse zuweisen. Dadurch erbt der Movieclip die Methoden und Eigenschaften der angegebenen Klasse. (Siehe Movieclip-Symbolen eine Klasse zuweisen auf Seite 381.)

6.

Wenn der Mov