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.
10
Einfhrung
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
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.
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
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).
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.
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
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.
(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
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
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
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
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.
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
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.
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
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
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.
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
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.
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
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
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.
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.
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
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.
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.
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.
34
Einfhrung in ActionScript
KAPITEL 3
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
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.
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
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
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
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
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 {}
46
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
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();
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
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
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
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
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.
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.
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
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
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.
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
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.
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
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
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
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.
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
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
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
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
Speichern Sie die genderte HTML-Datei, und testen Sie das Flash-Dokument noch einmal. Flash hat die folgenden Name-Wert-Paare erstellt.
72
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.
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.
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.
74
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
75
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
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.
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).
78
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.
79
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
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.
KAPITEL 4
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
Weitere Informationen zu Anweisungen finden Sie unter Anweisungen auf Seite 114.
84
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:
85
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
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.
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.
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.
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.
90
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.
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.
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.
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
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.
93
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.
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;
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.
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.
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
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.
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.
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"); }
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
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
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.
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.
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
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
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.
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
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
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
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.
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.
14. Whlen
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
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.
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.
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
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.
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
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.
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
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
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; }
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.
Der finally-Block wird selbst dann ausgefhrt, wenn der try-Block mit der Anweisung return beendet wird.
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.
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
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.
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; }
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")) {}
126
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
128
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]); }
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
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
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]); }
132
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++; }
Im folgenden Beispiel wird beschrieben, wie Sie eine while-Schleife in einer FLA-Datei erstellen und verwenden.
134
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.
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
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
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
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.
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.
142
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.
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.
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.
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
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 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
Assoziative Arrays knnen in ActionScript 2.0 mit zwei Verfahren erstellt werden:
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:
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.
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
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.
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
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
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
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.
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.
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
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
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
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
Ausgefhrte Operation
Inkrement (Prfix) Dekrement (Prfix) Unr + Unr - (Negation) Gibt Typinformationen zurck Gibt einen undefinierten Wert zurck
162
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
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
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
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
4.
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
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.
5.
Whlen Sie Steuerung > Film testen, um den ActionScript-Code erneut zu testen.
168
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
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"); } };
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
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.
Operatoren
173
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
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
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
175
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
KAPITEL 5
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);
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
Informationen zum Schreiben von Klassendateien finden Sie in Kapitel 6, Klassen auf Seite 205.
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
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.
181
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");
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.
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.
183
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.
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
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.
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
Auch der folgende Code funktioniert nicht, unabhngig davon, in welchem Bild er platziert wird:
myWidth(); var myWidth:Function = function () { trace(my_mc._width); };
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.
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 };
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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));
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
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.
195
Sie knnen in einer Funktion auch regulre Variablen verwenden. Wenn Sie regulre Variablen modifizieren, sollten Sie diese nderungen jedoch in Skriptkommentaren sorgfltig dokumentieren.
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.
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.
196
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
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?".
197
3.
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.
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
3.
Whlen Sie Steuerung > Film testen, um das Flash-Dokument zu testen. Flash zeigt die folgenden Werte an: 11, NaN, 11.
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.
199
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.
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
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.
6.
Fgen Sie nach der vorherigen ActionScript-Zeile den folgenden Code ein:
function eatCarrots():Void { trace("tastes good"); } eatCarrots();
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
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
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
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.
209
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.
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.
Weitere Informationen zur strikten Datentypisierung finden Sie in Datentypen zuweisen und strikte Datentypisierung auf Seite 46.
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.
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.
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.
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.
217
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.
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
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
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:
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;
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.
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
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.
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)
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:
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 (-).
226
Klassen
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
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
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.
229
5.
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
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.
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.
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.
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.
237
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.
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.
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
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; } }
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
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.
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.
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
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
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.
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 }
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:
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
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; } }
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; }
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.
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.
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.
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.
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
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
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.
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; }
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
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.
Um mit dem Schreiben der Klassendatei fortzufahren, lesen Sie den Abschnitt Methoden und Eigenschaften hinzufgen auf Seite 255.
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.
255
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
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()"); } }
257
5.
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.
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.
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.
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.
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.
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.
263
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.
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.
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.
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.
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.
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
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
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
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.
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.
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.
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
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.
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.
271
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
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.
273
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.
Weitere Informationen zur Verwendung des Schlsselworts this in Klassen finden Sie in this-Schlsselwort in Klassen verwenden auf Seite 247.
274
Klassen
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.
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:
276
Klassen
Eine Liste dieser Sprachelemente finden Sie in den folgenden Abschnitten des ActionScript 2.0-Referenzhandbuchs:
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
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
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
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
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).
281
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).
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
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
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).
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
Beschreibung
Diese Klasse bietet die Funktionalitt fr das erweiterte Anti-Aliasing in Flash Player 8. Siehe TextRenderer (flash.text.TextRenderer).
Beschreibung
Mit dieser Klasse knnen Sie steuern, wie mehrsprachiger Text in einer SWF-Datei angezeigt wird. Siehe Locale (mx.lang.Locale).
284
Klassen
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).
Grundlagen der objektorientiertem Programmierung auf Seite 212 Benutzerdefinierte Klassendateien schreiben auf Seite 216
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
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
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.
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.
287
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:
288
Klassen
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.
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.
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
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.
297
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.
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.
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
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.
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
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."; }
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
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]
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
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 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 { }
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.
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.
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.
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.
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
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.
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.
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.
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.
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
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
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.
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
328
Ereignisse verarbeiten
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.
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.
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:
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.
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.
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.
335
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
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.
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
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.
339
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.
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.
341
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.
342
Ereignisse verarbeiten
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.
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.
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. }
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,... } }
347
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.
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
10
351
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
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.
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.
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;
354
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
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
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).
357
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
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
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.
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 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
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");
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.
362
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.
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.
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