Flash 5 - Teil 3
Transcrição
Flash 5 - Teil 3
Auszug aus Dieses Buch liegt vollständig als PDF vor, aufgeteilt in vier Kapitel. Das ist der dritte Teil. Flash 5 ISBN 3-89842-100-7 gedruckt nicht mehr lieferbar Ein Service von von Sascha Wolter Galileo Design Ende Juni lieferbar Sascha Wolter, Saban Ünlü Buchcover mit Weblink Flash MX Grundlagen und Praxiswissen DAS Standardwerk gibt es jetzt in einer verbesserten und erweiterten Auflage zu Flash MX. Sascha Wolter und Saban Ünlü wenden sich mit diesem übersichtlich und ansprechend vierfarbig gestalteten Buch an Ein- und Aufsteiger, die sich nicht nur mit den Grundfunktionen beschäftigen möchten. Neben einer umfangreichen Einführung in Flash und zahlreichen Praxisbeispielen bietet der Band auch einen Überblick über weiterführende und komplexere Themen wie Pop-upMenüs, Preloader, Sounds, Effekte, Java, JavaScript, Generator, HTML sowie 3D. Dies und eine Übersicht rund 150 weiterer Produkte zum Thema Flash machen das Buch auch zu einem unentbehrlichen Nachschlagewerk für fortgeschrittene Entwickler. Eine leicht verständliche Einführung in ActionScript rundet das Buch ab. Galileo Design ca. 400 S., 4c, mit CD, 44,90 Euro ISBN 3-89842-220-8 Ende August lieferbar Sascha Wolter ActionScript Buchcover mit Weblink Codedesign und Objektorientierung Sie möchten mehr als die Grundlagen von ActionScript verstehen? Und möchten in die Tiefen von ActionScript eintauchen und mit Flash bis an die Grenzen des Möglichen gehen? Sascha Wolter zeigt Ihnen praxsinah und anwendungsorientiert, wie Sie mit Hilfe professioneller Programmierung beeindruckende Projekte durchführen und Ihren Workflow verbessern. Sie erfahren, wie Sie in Flash bereits vorhandene Objekte nutzen und eigene erstellen. Neben der Objektorientierung widmet sich der Autor in nachvollziehbaren Schritten den Themen Konzeption, Teamarbeit und Fehlersuche. Ein unverzichtbares Handbuch beim Einsatz von ActionScript! Galileo Design ca. 400 S., 4c, mit CD, 44,90 Euro ISBN 3-89842-221-6 Sascha Wolter Sascha Wolter Flash 5 Mit ActionScript und Generator . . Orientierung Um Ihnen beim Lesen die Orientierung zu erleichtern und ein besonderes Lesevergnügen zu ermöglichen, haben wir für unsere Reihe Galileo Design ein spezielles Layout entwikkelt. Durch visuelle Hilfen wurde der Text in Funktionseinheiten gegliedert: Durch das farbige Registersystem ist es Ihnen ein Leichtes, auf die einzelnen Kapitel und Teile des Buchs zuzugreifen. In Blau gehaltene Texte beinhalten Zusatzinformationen, Denkanstöße oder besondere Hinweise. Texte mit roten Überschriften kennzeichnen Beispiele bzw. Schritt-für-Schritt-Anleitungen. Bitte beachten Sie auch die Webseiten des Verlags unter www.galileodesign.de, auf denen Sie als registrierter Käufer dieses Buchs u.a. ein Glossar, eine kommentierte Linkliste und eine Tabelle mit Tastaturkürzeln finden. Spezielle Symbole in der Marginalspalte machen auf besonders wichtige Textstellen aufmerksam: Achtung-Icon Diese Abschnitte sprechen eine Warnung aus. Tipp-Icon Hier verraten unsere Autoren Tipps und Tricks zur Erleichterung Ihrer Arbeit. Hinweis-Icon Weiterführende Hinweise werden Ihnen so nahe gebracht. Step-Icon Step-by-Step können Sie unsere Beispiele nachvollziehen. 5 . . Inhalt 8 Vorwort 60 Anwendungen 62 Erstellen und Modifizieren 10 Grundlagen 106 Zeitleiste, Ebenen und Szenen 12 Die erste Animation 116 Gruppen, Symbole und Instanzen 16 Inspiration 130 Animation 24 Was ist Flash? 140 Aktionen und Interaktivität 28 Versionen 160 Sound 34 Eine kurze Einführung 174 Importieren und Exportieren 184 Veröffentlichen 208 Player und Projektor 6 Inhalt . 212 ActionScript 214 Grundlagen 294 Für Fortgeschrittene 296 3D-Animation 222 Versionen 312 HTML 226 Flashdetection 324 ActiveX 234 Preloader 338 JavaScript 242 Filmsequenzen 346 Java 256 Oberflächenelemente 352 Flash und Video 262 Funktionen und Objekte 356 Macromedia Director 270 Formulare und Datenbanken 368 Bildschirmschoner 278 Flashprinting SDK 372 Das Flash Open File Format 282 Spiele 382 SWFs dynamisch generieren 290 Fehlersuche 398 Anhang 400 Hilfe 406 Tastenkombinationen 408 Ostereier 410 Die CD-ROM zum Buch 412 Index Inhalt . 7 Vorwort 8 Für wen wurde dieses Buch geschrieben? Warum habe ich dieses Buch geschrieben? Dieses Buch richtet sowohl an den ambitionierten Einsteiger als auch an den fortgeschrittenen Entwickler Entwickler: Hauptsache, es ist Interesse für Macromedia Flash vorhanden. Für Menschen, die gerne mit einem Handbuchersatz arbeiten und grundlegende Funktionen ausführlich erklärt haben möchten, ist dieses Buch nicht geeignet. Auch finden Sie hier keine Anleitungen, mit deren Hilfe ohne Mitzudenken Effekte nachgebaut werden können. Der Schwerpunkt dieses Buches ist, 왘 Ihnen alle Möglichkeiten von Flash zu zeigen, 왘 Ihnen zu erklären, warum manche Dinge so sind, wie sie sind, 왘 und Ihnen zu jedem erdenklichen Thema Hilfestellung zu geben. Ich habe versucht, dieses Buch so zu erstellen, dass es sich sowohl als Lehrbuch als auch als Nachschlagewerk eignet. Sie können dieses Buch sowohl von vorne nach hinten durcharbeiten als auch nur einzelne Themen nachschlagen. Ob Sie dabei lieber unter Windows- oder auf Macintosh-Computern arbeiten, ist unerheblich. Zwar sind die meisten Abbildungen unter Windows erstellt worden, doch wir gehen auf die wenigen Unterschiede zwischen der Windows- und Macintosh-Version immer ein. Meine Absicht war, ein Buch zu schreiben, das nicht nur die Grundlagen vermittelt, sondern sich ausdrücklich auch an den professionellen Entwickler richtet. Ich habe in diesem Buch all das zusammengetragen, was ich bei der Arbeit mit Flash brauche, aber nicht immer im Kopf parat habe: Selber nutze ich das Buch fast täglich als Nachschlagewerk. Weitere Informationen zu diesem Buch, Beispiele, Diskussionsforen und Neuigkeiten finden Sie auf meiner Website www. flashforum.de. Um dieses Buch zu verbessern, bin ich auf Ihre Anregungen angewiesen: Kritik können Sie an [email protected] senden. Über positive Bemerkungen freue ich mich natürlich auch. Bitte beachten Sie besonders auch die Webseite des Verlages unter www.galileo-press.de. Hier können Sie sich mit Ihrer persönlichen Servicenummer, die Sie auf der hinteren Umschlagseite finden, einloggen. Auf der Seite zum Buch liegen für Sie Zusatzkapitel und weitere Informationen bereit. Vorwort . Danksagung Für die gute Zusammenarbeit bei der Erstellung dieses Buches bedanke ich mich bei meiner Lektorin Ruth Wasserscheid und bei Martin Riefenstahl von Macromedia, ohne den dieses Buch niemals entstanden wäre. Für Kritik und Anregungen sowie zahlreiche Grafiken bedanke ich mich ganz besonders bei Sandra Osterholz. Ausdrücklich möchte ich mich auch bei allen Lesern des vorigen Flash-Buches für die überwältigende Resonanz bedanken, die ganz wesentlich zur Entstehung dieses Buches beigetragen hat. Sascha Wolte Wolter Düsseldorf, im November 2000 Vorwort . 9 ActionScript 214 Grundlagen 234 Preloader 214 Ursprung 234 Was ist Streaming? 215 Bestandteile 234 Strategien für Preloader 217 ActionScript-Editor 235 Abwarten 239 Anzeige des Fortschritts 222 Versionen 240 Preloader ohne ActionScript 222 Ältere SWF-Formate erstellen 242 Filmsequenzen 226 Flashdetection 227 Erkennung mit Skript 228 Erkennung ohne Skript 242 Steuern von Filmen und Filmsequenzen 246 Eigenschaften, Methoden und Variablen 251 Objektaktionen 253 Smart Clips 212 ActionScript . 256 Oberflächenelemente 256 Checkboxen 278 Flashprinting SDK 279 Drucken mit ActionScript 256 Fenster und Drag and Drop 257 Menüs 282 Spiele 283 Spieleentwicklung mit Flash 262 Funktionen und Objekte 284 Steuerung von Objekten 262 Funktionen 286 Kollisionskontrolle 265 Objekte 288 Objekte dynamisch erzeugen 289 Punktezählung 270 Formulare und Datenbanken 271 Felder und Formulare 290 Fehlersuche 272 CGI-Kommunikation 291 Ausgabefenster 275 XML 291 Debugger und Watcher ActionScript Grundlagen . 213 Grundlagen Was ist eigentlich ActionScript? Um ActionScript zu erlernen, sind einige grundsätzliche Konzepte nötig. In diesem Kapitel wird versucht, Ihnen die Idee der Sprache ActionScript näher zu bringen. 왘 Da es sich bei dem ActionScript in Flash 5 um eine neue Technologie handelt, finden Sie aktualisierte Informationen und Tutorials auf meiner Website www. flashforum.de! 214 Das Ziel dieses Kapitels ist nicht, Ihnen alle Befehle, Funktionen und Eigenschaften von ActionScript zu erläutern: Dies ist in dem von Macromedia gelieferten, knapp 500 Seiten starken »ActionScript Referenzhandbuch« recht ausführlich geschehen (in Flash finden Sie dieselben Informationen unter Hilfe • ActionScript Referenz und Hilfe • ActionScript Lexikon). Dieses Kapitel kann auch keine komplette (eigentlich notwendige) Einführung in die Grundlagen der Programmierung geben, hierzu gibt es schon eine ganze Reihe Bücher. Sie haben meistens einen Titel wie »Grundlagen der Informatik«, »Grundlagen der Programmierung« oder »Grundlagen der Softwaretechnik«. Nachdem Sie nun wissen, worum es in diesem Kapitel nicht geht, fragen Sie sich sicherlich, was es behandelt. Ganz einfach: In diesem Kapitel lernen Sie alles, was Sie brauchen, um mit ActionScript zu arbeiten. Falls Sie ein Programmierer sind, profitieren Sie nicht nur von den Praxisbeispielen, sondern in erster Linie von den hier erläuterten Konzepten. So fällt es Ihnen leichter, Ihre Programmierkenntnisse auf ActionScript zu übertragen. Falls Sie keine Programmiererfahrung haben, versucht dieses Kapitel Ihnen die Angst vor der Programmierung zu nehmen. Mit einem Minimum an Verständnis für die Konzepte können Sie anhand der Beispiele erste Erfahrungen mit ActionScript sammeln und eigene Skripts schreiben. An manchen Stellen – wie z. B. beim Preloader und bei Spielen – zeigt Ihnen dieses Kapitel darüber hinaus, dass viele Effekte auch ohne Programmierung oder zumindest mit sehr wenig auskommen. Ursprung Erst in der vierten Version von Flash wurden die bis dahin recht überschaubaren so genannten Aktionen zur Sprache ActionScript erweitert. Bis dahin mussten sich die Entwickler mit einfachen Aktionen zufrieden geben. Aktionen Auch wenn sich die Programmiersprache von Flash in der aktuellen Version grundlegend geändert hat, ist die Idee der Aktionen bis nach Flash 5 gerettet worden. Bei den Aktionen handelt es sich um »Verhalten«, die Sie in einzelnen Bildern oder auf Schaltflächen platzieren können. Der Vorteil der Aktionen ist, dass Sie nur wenige Kenntnisse benötigen, um sie anzuwenden. Alle notwendigen Angaben, die so ActionScript . genannten Parameter oder Argumente für eine Aktion, werden einfach in einer Art Formular eingetragen. In Flash 5 können Sie immer noch so wie in den Vorgängerversionen mit Aktionen arbeiten. Dafür verwenden Sie im ActionScript-Editor am besten den normalen Modus. In diesem Modus finden Sie die meisten der alten Aktionen unter dem Punkt Basisaktionen. ActionScript Mit Flash 4 hat Macromedia die Sammlung verschiedener Aktionen als ActionScript bezeichnet. Hierbei handelt es sich um eine einfache Sprache, deren Aufbau weder der Programmiersprache Lingo aus dem Macromedia Director noch einer anderen bekannten Sprache entspricht. Am ehesten kann man das alte ActionScript als eine Mischung aus Perl, JavaScript und Aktionen beschreiben, die sich nicht in einem Editor eingeben, sondern nur zusammenklicken lässt. Wesentliche Elemente einer Programmiersprache wurden in Flash 4 das erste Mal umgesetzt: Variablen, um Werte zu speichern, und Kontrollstrukturen, um den Ablauf eines Skripts zu steuern. In Flash 5 hat Macromedia die eingebaute Programmiersprache erneut »umgemodelt«. Bei ActionScript handelt es sich um eine »vollwertige« Programmiersprache inklusive aller hierfür erforderlichen Elemente. Der Begriff Aktion ist in Flash 5 deutlich erweitert und bezeichnet jetzt eine ganze Menge an Befehlen und Anweisungen. Die Struktur von ActionScript entspricht jetzt JavaScript. Obwohl das so auch nicht stimmt, denn eigentlich entspricht die Struktur dem ECMA-262-Standard. Dieser ist aber im Wesentlichen aus JavaScript entstanden und von einer unabhängigen Organisation verfasst worden. Die Ähnlichkeit geht so weit, dass sich teilweise sogar ganze JavaScripts eins zu eins nach Flash 5 übertragen lassen. Macromedia hat aber versucht, ActionScript auch in der fünften Flash-Version für NichtProgrammierer anwendbar zu halten. Es gibt einen normalen Modus, der die wichtigsten Aktionen (die so genannten Basisaktionen) bereitstellt. Hier verhält sich Flash ähnlich wie die Vorgänger. Diese Basisaktionen lassen sich mit den neuen Funktionen beliebig mischen, so dass der Einsteiger Schritt für Schritt das Programmieren erlernen kann. Bestandteile Wie jede Sprache besitzt auch eine Programmiersprache einige Regeln und Konzepte, an die es sich zu halten gilt. Im Gegensatz zu realen Sprachen bieten Programmiersprachen weniger Freiraum in den Formulierungen: Sie müssen sich an die Regeln halten! Da die Regeln aber deutlich überschaubarer sind als im realen Leben, ist das normalerweise kein allzu großes Problem. Sie sollten sich immer nur bewusst machen, dass der Computer nicht weiß, was Sie erreichen möchten, und darum ECMA-262 ActionScript orientiert sich an dem ECMA-262Standard (dem ECMAScript), einer von der ECMA (European Computer Manufacturers Association) verfassten Spezifikation (www. ecma.ch), die von Skriptsprachen wie JavaScript und JScript (Microsofts JavaScript-Variante) abgeleitet ist. Die Beschreibung des ECMA-262-Standards finden Sie auch auf der CD-ROM zum Buch. Grundlagen . 215 alles ganz genau erklärt bekommen muss. Das ist ähnlich wie die Geschichte mit der ersten Tiefkühlpizza: Nur weil auf der Verpackung der Satz »Vor dem Backen Plastikfolie entfernen« fehlte, haben einige Pizzaliebhaber genau das auch nicht gemacht. Genauso ist das beim Computer: Der ist sehr dumm und denkt nicht mit. Da die Regeln von ActionScript denen von JavaScript ähneln, hilft Ihnen ein gutes JavaScript-Buch kombiniert mit Macromedias ActionScript-Referenz und (hoffentlich) diesem Buch mehr als ein schlechtes Buch über ActionScript. So begreifen Sie die Konzepte von Anfang richtig, Sie verstehen die Zusammenhänge und erlernen nicht nur eine, sondern gleich mehrere Sprachen. Und wenn dann mal eine Aufgabe auf Sie zukommt, für die es kein fertiges Tutorial (Anleitung) gibt, dann ist auch das kein Problem mehr für Sie! Die erste Kategorie kann nur in Schlüsselbilder platziert werden. Für die Ausführung der so genannten Bildaktionen gibt es nur ein Ereignis: Der Abspielkopf erreicht das gewählte Bild. Das Ereignis wird hier für die Aktionen nicht explizit angegeben. Die zweite Kategorie wurde bis Flash 5 als Instanzaktionen bezeichnet und heißt jetzt Objektaktionen Objektaktionen. Normalerweise werden Objektaktionen auf eine Schaltfläche platziert. Im Gegensatz zu Bildaktionen stehen hier eine ganze Reihe von Ereignissen zur Auswahl, die von Ihnen angegeben werden müssen. Diese Ereignisse beziehen sich alle auf Benutzerinteraktionen, also auf Aktivitäten, die der Anwender durchführt. Dazu zählen das Drücken einer Taste oder das Anklicken der Schaltfläche. bei ereignis führe aktionen aus sieht in ActionScript dann wie folgt aus: Ereignisse Bei ActionScript handelt es sich um eine ereignisgesteuerte Sprache. Das bedeutet, dass ein Ereignis eintreten muss, damit etwas passiert und eine Aktion ausgeführt wird: »Wenn zwölf Minuten vorbei sind (Ereignis), dann nehme die Pizza aus dem Ofen (Aktion)«. Kochrezepte müssen häufig als Beispiele für die Programmierung herhalten. Ich hoffe, Sie kochen gerne! In Flash gibt es jetzt eine ganze Menge solcher Ereignisse, die sich grob in zwei Kategorien unterteilen lassen: 왘 Zeit- oder bildabhängige Ereignisse (Bildaktionen) 왘 Ereignisse im Zusammenhang mit Benutzerinteraktionen (Objektaktionen) } on ( ereignis ereignis) { aktionen aktionen; 216 Abgesehen von den gerade beschriebenen, schon in früheren Flash-Versionen vorhandenen, Ereignissen für Schaltflächen gibt es in Flash 5 noch weitere Möglichkeiten. Sie können Objektaktionen nicht nur auf Schaltflächen, sondern auch auf Filmsequenzen anwenden, wofür noch weitere Ereignisse bereitstehen. Mit diesen Ereignissen kann auf das Drücken oder Loslassen einer Taste, das Laden von Daten, einen Bildwechsel oder das Bewegen der Maus reagiert werden. Die Struktur der Skripts entspricht denen bei Schaltflächen: onClipEvent ( ereignis ereignis) { aktionen aktionen; } ActionScript . Aktionen, Anweisungen und Befehle Mit Aktionen, Anweisungen oder Befehlen wird meist dasselbe gemeint: Hierbei handelt es sich um die Einzelschritte, die der Computer in Ihrem Programm ausführen soll. Dabei kommt es darauf an, die richtigen Befehle in der richtigen Reihenfolge anzuwenden. Ein Programm ist also nichts anderes als ein Kochrezept, bei dem ebenfalls nur präzise und in der richtigen Reihenfolge formulierte Schritte zu einem gelungenen Gericht führen. Die meisten Aktionen benötigen darüber hinaus noch Parameter (auch Argumente genannt). Diese Parameter spezifizieren die Wirkung einer Aktion genauer. Wenn Sie z. B. eine Aktion verwenden, um in ein spezielles Bild des Films zu springen, dann benötigen Sie die Aktion (in diesem Fall Go To ) und ein Ziel (also das Bild, in das gesprungen werden soll). Bei einem Kochrezept ist das wieder ähnlich. Auch hier brauchen Sie bei einer Aktion, wie z. B. dem Hinzufügen, die genaue Angabe dessen, was hinzugefügt werden soll (z. B. drei Eier). In Flash 5 gibt es aber eine ganz wesentliche Änderung zu den vorherigen Versionen von ActionScript (die alte »Schreibweise« kann aber noch weiter verwendet werden)! Wie bei JavaScript werden die Aktionen jetzt als Methoden auf Objekte angewendet. Das Hinzufügen aus dem Kochrezept muss ja zielgerichtet geschehen. Nach der alten Schreibweise hätte man wahrscheinlich fuegehinzu(schuessel, 3 Eier) geschrieben. In der neuen (und konsistenteren) Schreibweise heißt es schuessel. fuegehinzu(3 Eier) . Grundsätzlich ist eine Aktion in den meisten Fällen nach dem Schema objekt methode parameter objekt.methode methode(parameter parameter) aufgebaut. Wenn Sie mehrere aufeinander folgende Aktionen verwenden möchten, dann sollten diese zeilenweise angegeben und jeweils mit einem Semikolon abgeschlossen werden. Die Reihenfolge der Aktionen ist nämlich wichtig, da sich die Aktionen gegenseitig beeinflussen können. Weitere Elemente von ActionScript ActionScript besteht aber nicht nur aus Ereignissen und Aktionen. Es gibt noch weitere wichtige Elemente, die auf den folgenden Seiten in Beispielen erläutert werden. ActionScript-Editor Bei der Arbeit mit ActionScript werden Sie nicht um den Editor für ActionScripts herumkommen, den Sie unter Fenster • Aktionen finden. In den vorherigen Flash-Versionen war dieser Editor recht unkomfortabel, so dass einige Hilfsmittel zur Erstellung von ActionScripts in Flash 4 Produkt Hersteller URL Preis Bemerkung Fast! Grooveware Multimedia www.swifftools.com/stools/ Beta Externer Editor FlaSE Martin Fleck www.flashtool.de/docs/flase/flase.htm DM 29,00 Externer Editor »Boblgum Patch« »Boblgum« www.flashworker.de oder www.mysterion.de kostenlos Vergrößert das ActionScript-Fenster Grundlagen . 217 ➊ ➎ ➋ ➌ ➍ ➏ ➐ 왖 Abbildung 1 Bedienfeld Aktionen im normalen Modus Alternativen entwickelt wurden, um die Erstellung von ActionScripts zu erleichtern. Der stark verbesserte ActionScript-Editor in Flash 5 verhält sich wie andere Bedienfelder auch. Das Fenster ist skalierbar, lässt sich mit anderen Bedienfeldern wie z. B. dem Film-Explorer kombinieren und besitzt oben rechts ein Menü für weitere Optionen. In diesen Optionen stehen zwei Modi zur Verfügung: 왘 Normaler Modus 왘 Expertenmodus Mit dem Editor erzeugen Sie abhängig von der aktuellen Auswahl (Bild oder Objekt) entweder Bildaktionen oder Objektaktionen Objektaktionen. Falls Sie ein Schlüsselbild ausgewählt haben, dann erzeugen Sie ein ActionScript, das beim Erreichen dieses Bildes ausgeführt wird. Handelt es sich um ein Objekt (also die Instanz eines Schaltflächensymbols oder eines Filmsequenzsymbols), dann erstellen Sie Aktionen, die mit diesem Objekt verbunden sind. Zur Ausführung der Aktionen wird ein Ereignis benötigt, das in dem Skript über einen so genannten 218 왖 Abbildung 2 Bedienfeld Aktionen im Expertenmodus Handler (engl. Bearbeiter), z. B. on (release) , festgelegt wird. Normaler Modus Um den ActionScript-Editor benutzen zu können, müssen Sie entweder ein Schlüsselbild in der Zeitleiste, eine Schaltfläche oder eine Filmsequenz auf der Bühne auswählen. Das Bedienfeld Aktionen zeigt abhängig von der Auswahl entweder nichts, den Text »Bildaktionen« oder »Objektaktionen« im Titel ➋ an. Wenn nichts angezeigt wird, können auch keine Aktionen eingegeben werden, da kein zulässiges Objekt oder Schlüsselbild gewählt ist. Der normale Modus des Bedienfeldes Aktionen wurde bereits im Kapitel »Aktionen und Interaktivität« auf Seite 141 behandelt. Er bietet Ihnen alle Werkzeuge, die Sie brauchen, um Ihre ActionScripts zu erstellen. Entweder Sie wählen eine der zahlreichen Aktionen über die Plus-Schaltfläche ➊ oder in der Werkzeugliste ➍ auf der linken Seite. Die Werkzeugliste lässt sich ein- und ausblenden ➎. ActionScript . Die Aktionen sind in Kategorien geordnet: Die Kategorie Basisaktionen steht allerdings nur im normalen Modus zur Verfügung. 왘 Basisaktionen: Hier finden Sie die wichtigsten Aktionen, die weitestgehend die Möglichkeiten der vorhergehenden Flash-Versionen abdecken. Diese Aktionen finden sich auch in der Kategorie Aktionen. 왘 Aktionen: Hier sind alle Aktionen zusammengefasst, die Flash versteht. Nur die Aktionen, die sich auf spezielle Objekte beziehen, finden Sie in der Kategorie Objekte. 왘 Operatoren: Hier finden Sie die benötigten Operatoren, wie z. B. das Pluszeichen, um Berechnungen durchzuführen oder Zeichenketten miteinander zu verbinden. 왘 Funktionen: Falls Sie Funktionen benötigen, dann finden Sie diese in der gleich lautenden Kategorie. 왘 Eigenschaften: In dieser Kategorie wählen Sie die Eigenschaften, die einen kompletten Flash-Film oder eine Filmsequenz auszeichnen. 왘 Objekte: In Flash 5 gibt es fünfzehn Objekte, die jeweils spezifische Aktionen bieten. Darunter sind Aktionen, die sich auf XML, auf Datum und Uhrzeit, auf Filmsequenzen und auf den Mauszeiger beziehen. Falls Sie einmal gewählte Aktionen wieder entfernen möchten, wählen Sie die MinusSchaltfläche. Die Reihenfolge der Aktionen verändern Sie über die Auf- und Ab-Schaltfläche ➌. Eine Besonderheit des normalen Modus ist, dass die notwendigen Parameter für Aktionen im Parameterbereich ➏ angegeben werden. Dies erleichtert die Eingabe und verhindert fehlerhafte Aktionen. Falls Sie für eine Aktion eine Filmsequenz benötigen, dann können Sie diese über die Schaltfläche Zielpfad ➐ auswählen. Expertenmodus Der Expertenmodus unterscheidet sich vom normalen Modus durch folgende Punkte: 왘 Es existiert keine Kategorie mit Basisaktionen. 왘 Die Minus-Taste zum Entfernen von Aktionen sowie die Auf- und Ab-Tasten zum Ändern der Reihenfolge von Aktionen sind deaktiviert. 왘 Der Parameterbereich fehlt. Die Parameter werden direkt in der Aktionsliste eingetragen. 왘 ActionScripts lassen sich direkt eintippen und müssen nicht »zusammengeklickt« werden. Gerade die direkte Eingabe von Skripts hat vielen Entwicklern bis Flash 5 gefehlt und ist jetzt endlich möglich. Auch bei direkter Eingabe können Aktionen durch Auswahl in der Werkzeugliste eingefügt werden. Da es aber gerade im Expertenmodus häufig zu fehlerhaften Eingaben kommt, ist in den meisten Fällen die Verwendung des normalen Modus vorzuziehen. Über einen kleinen Trick ist auch hier das direkte Eintippen von Aktionen möglich: Verwenden Sie im normalen Modus die Aktion evaluate, die es Ihnen erlaubt, eine Zeile beliebig einzutippen. Im Expertenmodus steht diese Aktion nicht zur Verfügung, da sich hier ja sowieso direkt in der Aktionsliste tippen lässt. Um die Eingabe sowohl im Experten- als auch im normalen Modus zu beschleunigen beschleunigen, gibt es die so genannten Escape-Sequenzen, mit denen sich Aktionen sehr effizient eingeben lassen. Bei einer Escape-Sequenz handelt es sich um eine Tastenfolge, die mit (Esc) beginnt und der dann weitere Tasten folgen. Meistens müssen Sie die ersten beiden Buchstaben der gewünschten Aktion tippen. Z. B. für die Grundlagen . 219 Aktion trace drücken Sie hintereinander (Esc), (t) und (r)(siehe Seite 406). Ein weiteres Argument für die möglichst häufige Verwendung des normalen Modus ist die automatische Formatierung von ActionScripts. Im Expertenmodus müssen Sie Einrükkungen und Zeilenumbrüche selbst vornehmen. Aber auch dafür gibt es einen Trick: Sie können jederzeit zwischen dem Expertenmodus und dem normalen Modus über das Optionsmenü oder die Tastenkombinationen (Strg)/(ï)+(N) (N für normaler Modus) und (Strg)/(ï)+(E) (E für Expertenmodus) wechseln. Wenn Sie ein Skript im Expertenmodus eingegeben haben, wechseln Sie durch (Strg)/ (ï)+(N) in den normalen Modus, wo das Skript dann formatiert wird. Mit (Strg)/(ï)+ (E) kommen Sie wieder zurück in den Expertenmodus. Diese Tastenkombinationen funktionieren aber nur, wenn das Bedienfeld Aktionen aktiviert ist. Der Modus wird für jedes Skript unabhängig voneinander gespeichert: Beim Wechseln zwischen verschiedenen Skripts kann auch der Modus wechseln. Welchen Modus Sie beim Erzeugen eines neuen Skripts vorziehen, geben Sie unter Bearbeiten • Einstellungen im Register Allgemein an. Kommentare In der Dokumentation von Flash ist die Escape Escape-Sequenz für Kommentare (Aktion comment) mit (Escape), (/) und (/) beschrieben. Leider funktioniert das nicht bei einer deutschen Tastatur. Hier müssen Sie (Escape), (#) und (#) eingeben. 220 Optionen Das Bedienfeld Aktionen stellt eine ganze Reihe von Optionen zur Verfügung. Neben dem Wechsel zwischen dem Normal- und dem Expertenmodus ➊ dürfen Sie auch direkt in eine beliebige Zeile des Skripts springen ➋, in einem Skript suchen, Teile ersetzen und jederzeit die Syntax (also die korrekte Schreibweise) Ihres Skripts überprüfen. In Flash 5 lassen sich ActionScripts über die Zwischenablage kopieren und in anderen Anwendungen bearbeiten. Auch das Importieren ➌ und Exportieren ist möglich. Falls Sie ein Skript aber während der ganzen Entwicklung extern halten möchten, z. B. weil es in mehreren Flash-Filmen benötigt wird, verwenden Sie die Aktion #include anstelle des Imports. Natürlich lässt sich ein ActionScript auch drucken, wobei Flash die farbliche Hervorhebung übernimmt, sofern Sie denn aktiviert ist. Wenn die an sich ganz nützliche farbliche Hervorhebung einzelner Schlüsselwörter nicht auf Ihre Zustimmung stößt, dann deaktivieren Sie in den Optionen Syntax farbig anzeigen. Andernfalls stellt Flash Schlüsselwörter blau, Eigenschaften grün, Kommentare violett und Zeichenketten in Anführungszeichen grau dar. Die Schriftgröße wählen Sie ebenfalls in den Optionen. Leider kann die Schriftart aber nicht variiert werden. Innerhalb des Expertenmodus lassen sich auch mehrzeilige Kommentare angeben, die mit /* beginnen und mit */ enden müssen. Beim Wechseln in den normalen Modus werden sie in mehrere einzeilige Kommentare geändert. ActionScript . ➊ ➋ ➌ 왖 Abbildung 3 Die Optionen des Bedienfeldes Aktionen Die Option Fehlerhafte Syntax anzeigen hebt Aktionen, die nicht mehr empfohlen sind (aber noch funktionieren), grün hervor. Farbliches Hervorheben Da Flash normalerweise Ihre Eingaben im ActionScript-Editor farblich hervorhebt, können Sie direkt erkennen, ob Sie sich vertippt haben oder nicht: 왘 Schlüsselwörter werden blau angezeigt. 왘 Eigenschaften sind grün. 왘 Kommentare werden violett hervorgehoben. 왘 Zeichenketten in Anführungszeichen werden grau dargestellt. 왘 Syntaxfehler markiert Flash rot. Grundlagen . 221 Versionen … von Version 2 nach 5 oder umgekehrt! Was hat sich in Flash 5 geändert, und was muss ich beachten, wenn ich mit Flash 5 für eine ältere Flash-Version entwickeln möchte? Wie erkenne ich, welche Flash-Version der Betrachter installiert hat? Mittlerweile gibt es – wie man unschwer anhand der Versionsnummer vermuten kann – schon die fünfte Ausgabe von Flash. Glücklicherweise hat Macromedia Flash in jeder Version kontinuierlich weiterentwickelt und verbessert. Leider benötigt man aber für die jeweils neu eingeführten Funktionen zum Abspielen auch die passende Erweiterung des Webbrowsers, die Flash Player oder FlashPlug-in genannt wird. Um das Problem mit dem Plug-in zu lösen, gibt es mindestens zwei Möglichkeiten: 왘 Sie können den kleinsten gemeinsamen Nenner wählen und einen Flash-Film für eine ältere Flash-Version entwickeln, also z. B. mit Flash 5 einen Flash 4-Film erstellen. 왘 Mit einer Flashdetection (Flash-Erkennung) überprüfen Sie, welche Flash-Version beim Betrachter installiert ist, und zeigen ihm einen entsprechenden Inhalt an. Ältere SWF-Formate erstellen Es gibt mehrere Gründe Gründe, die Sie zwingen könnten, trotz der Flash 5-Entwicklungsumgebung einen Flash-Film im Flash 4-Format oder älter zu erstellen. Wenn z. B. der Flash 5-Player bei 222 der Zielgruppe noch nicht weit genug verbreitet ist oder wenn Sie für ein eher konservatives Unternehmen arbeiten, dann kann der Kunde eventuell darauf bestehen. Auch falls Sie die neuen Funktionen von Flash 5 gar nicht nutzen, ist es vernünftiger, in einem möglichst »alten« Flash-Format zu veröffentlichen, da Sie so eine größere Menge an Betrachtern erreichen. Kompatibilität Was passiert aber, wenn ein Flash 4-Film von einem Flash 5-Plug-in abgespielt wird oder wenn ein Flash 4-Plug-in auf einen Flash 5Film stößt? Wie kompatibel sind die verschiedenen Versionen untereinander? Grundsätzlich lässt sich diese Frage einfach beantworten – aber wie immer mit einigen Ausnahmen! Jeder Flash Player spielt normalerweise alle Flash-Filme der eigenen oder einer älteren Version ab. Umgekehrt funktioniert das leider nicht. Ein älteres Plug-in ist nicht in der Lage, einen neueren Flash-Film korrekt anzuzeigen. Eine Ausnahme ist, dass auch der Flash 3-Player Flash 4-Filme abspielt, solange diese keine speziellen Flash 4-Funktionen nutzen. Falls Sie einen Flash 2-Film veröffentlichen, wird dieser von allen Flash-Plug-ins seit Ver- ActionScript . 왘 sion 2 abgespielt. Das ist eine Reichweite von mehr als 90 Prozent. Warum aber arbeiten Sie dann mit Flash 5 und sind nicht bei Flash 2 geblieben? Ganz einfach: Die Entwicklungsumgebung von Flash 5 ist besser als die der Vorläuferversionen und bietet Ihnen bei der Arbeit an einem Flash 2-, 3- oder 4-Projekt einfach mehr Möglichkeiten. 왘 Abspielprobleme Die Version 5 des Flash Players erzeugt gerade im Zusammenspiel mit manchen älteren FlashFilmen nicht immer das gewünschte Ergebnis (www.macromedia.com/support/flash/ts/ documents/player5_issues.htm). Folgende Probleme mit dem Flash Player 5 sind bekannt – eine korrigierte Version (Release 36 oder höher) des Flash Players soll mit Erscheinen dieses Buches erhältlich sein: 왘 Bildrate (Abspielgeschwindigkeit): Flash 4Filme konnten maximal mit 18 Bildern pro Sekunde abspielen (auch wenn sich höhere Werte angeben ließen). Der Flash Player 5 versucht diese Filme mit der eingestellten Bildrate abzuspielen, wodurch sie schneller als erwartet laufen. Wenn Sie die Bildrate auf einen Wert zwischen 15 und 18 korrigieren, sollte dies nicht mehr auftreten. 왘 왘 Systemressourcen (Prozessorauslastung): Da Flash-Filme mit dem Flash Player 5 schneller ablaufen können, benötigen Sie mehr Systemressourcen. Um den Prozessor zu entlasten, wählen Sie eine niedrigere Bildrate zwischen 15 und 18 Bildern pro Sekunde. Goto-Aktion funktioniert nicht mit Ausdrücken: Falls bei einer Goto-Aktion das erste Zeichen einer Bildbezeichnung eine Zahl ist, dann interpretiert Flash dies als Bildnummer. Um das zu verhindern, sollten Sie Bildbezeichnungen immer mit einem Buchstaben beginnen lassen. Dieses Problem soll in einer zukünftigen Version des Flash Players behoben werden. Objekte und Variablen mit dem gleichen Namen: Falls Sie Objekte (Filmsequenzen etc.) und Variablen mit denselben Namen in einem Flash-Film verwendet haben, kann dies zu unerwarteten Ergebnissen führen. Stellen Sie sicher, dass jeder Name für Variablen und Objekte eindeutig ist. Bezeichner mit Sonderzeichen Sonderzeichen: Vermeiden Sie Sonderzeichen in Objekt- und Variablennamen, da dies zu unerwarteten Ergebnissen führen kann. Kompatibilität Film/Plug-in Flash 2-Player Flash 3-Player Flash 4-Player Flash 2-Film Ja Ja Ja Ja Ja Flash 3-Film Nein Ja Ja Ja Ja Flash 4-Film Nein Ja (keine Flash 4Funktionen Ja Ja Ja Flash 4-Film mit Druckfunktion Nein Ja (keine Flash 4- Ja (Druckfunktion Ja Funktionen funktioniert nicht) Ja Flash 5-Film Nein Nein Ja Nein Flash 4-Player ab Dezember 1999 Nein Flash 5-Player Versionen . 223 왘 왘 왘 왘 Textauswahlzeiger (engl. I-beam) ist nicht sichtbar: In älteren Flash Playern wurde der Textauswahlzeiger in der Textfarbe angezeigt. Im Flash 5-Player ist er schwarz. Dieses Problem soll in einer zukünftigen Version des Flash Players behoben werden. Artefakte bei Texten Texten: Es gibt verschiedene Darstellungsprobleme bei Text. Einige lassen sich lösen, wenn der Text von einer Box umrahmt wird. Dieses Problem soll in einer zukünftigen Version des Flash Players behoben werden. Scroll Scroll-Text springt immer an den Anfang zurück: Falls Sie Felder über die Eigenschaft scroll steuern, springen diese immer wieder zurück an den Anfang, sobald neue Daten geladen werden. Dieses Problem soll in einer zukünftigen Version des Flash Players behoben werden. Internet Explorer 5.5 stürzt ab: Der Internet Explorer 5.5 kann abstürzen, falls ein FlashFilm in einer Tabellenzelle eingebettet ist und vom Flash Player 5 abgespielt wird. Dieses Problem soll in einer zukünftigen Version des Flash Players behoben werden. Erstellen Um einen Flash-Film in einem älteren Format zu erstellen, sollten Sie zuerst die Version im Register Flash unter Datei • Einstellungen für das Veröffentlichen festlegen. Flash zeigt Ihnen schon bei der Entwicklung an, was Sie benutzen dürfen und was nicht. Innerhalb des Bedienfeldes Aktionen sind alle unzulässigen Aktionen gelb hervorgehoben. Falls Sie einen Flash 4-Film erstellen, werden Sie bei den Aktionen eine positive Überraschung erleben: Die mathematischen Funktionen des Math-Objektes (z. B. Sinus und Cosinus) stehen auch für Flash 4-Filme zur Verfügung! 224 Abgesehen von den Aktionen gibt es nur wenige weitere Einschränkungen bei der Entwicklung für einen älteren Flash Player. So gut wie alle Werkzeuge und Funktionen von Flash 5 können genutzt werden. So erleichtern Sie sich die Arbeit z. B. mit den neuen Bézierkurven (Stift- und Unterauswahl-Werkzeug) oder mit dem Debugger (Fehlersuche in ActionScripts). Leider werden von den älteren Flash-Versionen u. a. keine Smart Clips verstanden. Bei der Erstellung eines Flash-Films (SWF) für einen älteren Flash Player sollten Sie beachten, dass die Quelldatei (FLA) immer im Flash 5Format vorliegt und von älteren Flash-Versionen nicht geöffnet werden kann. Falls Sie also eine alte Flash-Datei in Flash 5 öffnen und bearbeiten, können Sie diese in einem SWF-Format für einen älteren Flash Player veröffentlichen. Aber sobald Sie die Quelldatei speichern, liegt diese in einem Flash 5-Format vor und kann nicht mehr in älteren Entwicklungsumgebungen geöffnet werden. Konvertieren Beim Öffnen einer älteren Flash-Datei konvertiert Flash 5 diese. Folgende Änderungen werden dabei in ActionScripts durchgeführt: 왘 Jedes Vorkommen des Gleichheitsoperators = in Flash 4 wird in den Gleichheitsoperator == von Flash 5 umgewandelt. 왘 Die Operatoren +, ==, !=, <>, <, >, >= und <= haben in Flash 5 eine neue Bedeutung erhalten. Flash 4-Dateien werden entsprechend konvertiert. In Flash 4 handelte es sich dabei immer um nummerische Operatoren, in Flash 5 können diese Operatoren auch für andere Datentypen verwendet werden. Um Problemen vorzubeugen, wird aus diesem Grund für alle Operanden (so- ActionScript . 왖 Abbildung Bedienfeldes Aktionen bei der Entwicklung eines älteren Flash-Formates 왘 왘 왘 왘 weit das sinnvoll ist) die Funktion Number eingefügt. In Flash 4 erzeugte \n einen Wagenrücklauf. In Flash 5 wird \n (ASCII 13) entsprechend dem ECMA-262-Standard als Zeilenvorschub interpretiert (ASCII 10). Aus diesem Grund wird das Vorkommen von \n in einer Flash 4-Datei in \r geändert. In Flash 4 wurden Zeichenfolgen mit & verknüpft. In Flash 5 wird dieser Operator für bitweise Operationen verwendet. Zeichenfolgen werden entweder mit + oder add aneinander gehängt. Aus diesem Grund konvertiert Flash 5 jedes & in einem Flash 4Film in add. Viele Funktionen benötigten in Flash 4 keine Klammern. Auf Grund der überarbeiteten und konsistenteren Syntax in Flash 5 werden diese Klammern automatisch hinzugefügt. Falls die Funktion getProperty mit einem ungültigen Ziel, also einer nicht vorhandenen Filmsequenz, verwendet wird, dann gibt Flash 5 undefined zurück (bei manchen 왖 Abbildung Ausgabe der Konvertierungen Aktionen wird undefined automatisch in 0 konvertiert). In Flash 4 war das Ergebnis in diesem Fall 0. Um daraus resultierende Probleme zu verhindern, wird an den entsprechenden Stellen bei der Konvertierung die Funktion number eingefügt. Neben den aufgezählten Konvertierungen sollten Sie unbedingt darauf achten, dass Sie keine gleichen Namen für Variablen und Objekte wählen, dass Sie Sonderzeichen und Leerzeichen in Namen vermeiden und dass keine Flash 5-Schlüsselwörter für Variablennamen verwendet werden. Die durchgeführten Konvertierungen zeigt Flash im Ausgabefenster (Fenster • Ausgabe) an. Auch mögliche Probleme, wie doppelt vergebene Namen, werden dort in den meisten Fällen protokolliert. Versionen . 225 Flashdetection Ist er da, oder ist er nicht da? Da Flash einen Flash Player zum Abspielen benötigt, muss dieser beim Betrachter vorhanden sein. Meistens ist das der Fall. Falls aber mal doch kein Flash Player da ist, dann sollte darauf angemessen reagiert werden. Wenn Sie Ihren Flash-Film fertig gestellt haben, werden Sie diesen normalerweise als SWF-Datei im Internet veröffentlichen. Zum Betrachten benötigt der Anwender einen Flash Player. Aber was passiert, wenn er keinen Flash Player für seinen Webbrowser installiert hat? In diesem Kapitel werden viele Techniken gebraucht, die in späteren Kapitel behandelt werden. Lesen Sie bei Fragen bitte in diesen Kapiteln nach, oder betrachten Sie zum besseren Verständnis die Beispieldateien! In den meisten Fällen, bei mehr als 90 Prozent aller Anwender, wird Ihr Flash-Film auf einen Flash Player stoßen und spielt dann ab. Da- mit Ihr Film aber korrekt inklusive aller Funktionen und Sounds wiedergegeben wird, benötigen Sie den passenden Flash Player Player. Wenn es sich also um einen Flash 5-Film handelt, dann brauchen Sie auch einen Flash 5-Player. Eine Flashdetection (Flash-Erkennung) übernimmt die Versionsüberprüfung und reagiert entsprechend darauf. Um zu ermitteln, ob und welche Version des Flash Players vorhanden ist, gibt es verschiedene Strategien: Die Brute Force Force-Methode (brutale Gewalt) geht davon aus, dass der Betrachter einen passenden Flash Player besitzt und überprüft das Plug-in nicht. Erkennung des Flash Players 226 Macintosh Windows NT, 9x und 2000 Windows 3.x WebTV Navigator 2 nicht möglich nicht möglich nicht möglich – Navigator 3 Plug-in Plug-in Plug-in – Navigator 4 Plug-in Plug-in Plug-in – Internet Explorer 3 nicht möglich ActiveX-Steuerung nicht möglich – Internet Explorer 4.x nicht möglich ActiveX-Steuerung – – Internet Explorer 5.x Plug-in ActiveX-Steuerung – – AOL 3 und 4 nicht möglich ActiveX-Steuerung – – Sonstige – – – nicht möglich ActionScript . Der Benutzer wählt auf einer Einstiegsseite selbst aus, ob er einen Flash-Inhalt oder einen alternativen Inhalt betrachten möchte. Dieses Verfahren ist recht unkompliziert, erwartet vom Anwender aber, dass er im Zweifelsfall weiß, was Flash ist. Dies kann man aber nicht immer voraussetzen. Bei der Erkennung mit Skript wird mit Hilfe eines JavaScripts oder VBScripts ermittelt, ob und welches Plug-in installiert ist. Die Erkennung ohne Skript entwickelt sich immer mehr zu der beliebtesten Flashdetection, da sie sich recht einfach realisieren lässt und zuverlässig funktioniert. Die Brute Force-Methode gehört zu den kompromisslosen Varianten, die Sie nur einsetzen sollten, wenn Sie auf Besucher ohne Flash Player verzichten können. Auf einer Website wie z. B. www.flashforum.de kann man sich diese Ignoranz leisten, da diese Site sich ausschließlich an Flash-Entwickler richtet. Die Auswahlmethode hat den Vorteil, dass sie einfach, billig und schnell zu produzieren ist und dem Benutzer die freie Wahl lässt: Selbst wenn er einen Flash Player installiert hat, kann er sich trotzdem den HTML-Inhalt anschauen. Beide Methoden haben aber einen entscheidenden Nachteil Nachteil, denn sie erkennen nicht, ob der richtige Flash Player vorhanden ist. Falls ein älterer Flash Player installiert ist, dann kann das zu unerwarteten Ergebnissen führen. Der Flash 2-Player z. B. zeigt bei neueren Flash-Filmen einfach nichts an, der Flash 3 Player ignoriert MP3-Sounds und den größten Teil der Aktionen. Keiner der Player ist in der Lage, einen Flash 5-Film abzuspielen. Das ist besonders deshalb ärgerlich, da manche Webbrowser trotzdem und ohne Meldung versuchen, den Film wiederzugeben. Erkennung mit Skript Zwar ist die Erkennung des Flash Players mit Hilfe eines JavaScripts oder eines VBScripts sehr beliebt, doch weist sie leider einige Schwächen auf: Die Erkennung funktioniert nicht in jedem Browser (siehe Tabelle). Die Erkennung benötigt je nach Browser und Betriebssystem andere Skripts. Die Erstellung der benötigten Skripts erfordert gute JavaScript-/VBScript-Kenntnisse. Die Einstellungen des Benutzers müssen die Ausführung von JavaScript und VBScript erlauben, was viele Benutzer aus Sicherheitsgründen deaktiviert haben. Der Technologiemix (Flash und JavaScript/ VBScript) verlangt vom Benutzer, dass er einen JavaScript-/VBScript fähigen Browser besitzt, Sicherheitsbedenken in den Wind schlägt und den passenden Flash Player installiert hat. Websites zum Thema Flashdetection Macromedia selbst hat zu diesem Thema eine englischsprachige Technote unter www. macromedia.com/support/flash/ts/documents/ uber_detection.htm veröffentlicht. Unter www.macromedia.com/support/flash/ts/ documents/browser_support_matrix.htm sind die für Flash spezifischen Unterschiede der einzelnen Webbrowser zusammengefasst. Der Entwickler Colin Moock hat sich mit diesem Thema ebenfalls intensiv auseinander gesetzt und die Ergebnisse auf seiner Website www. moock.org zusammengetragen. Flashdetection . 227 Arbeitsweise Um unter Windows NT, 2000 und 9x im Internet Explorer zu ermitteln, ob und in welcher Version der Flash Player vorhanden ist, benötigen Sie VBScript VBScript. Folgende Anweisung können Sie in Ihrem HTML-Dokument dafür verwenden: Flash: FlashInstalled = (IsObject(Create Object("ShockwaveFlash.ShockwaveFlash"))) Um eine spezielle Flash-Version wie z. B. Flash 4 zu ermitteln: FlashInstalled = (IsObject(CreateObject("ShockwaveFlash. ShockwaveFlash.4"))) Abgesehen vom Internet Explorer unter Windows NT, 2000 und 9x und den Webbrowsern, die eine Erkennung nicht unterstützen, wird die Existenz des Flash Players mit JavaScript ermittelt (ab JavaScript 1.1 bzw. Netscape Navigator 3). Dafür können Sie unter anderem die folgenden Anweisungen einsetzen: Flash: navigator.mimeTypes["type"] = Diese Beispiel finden Sie auch auf der CD-ROM zum Buch. "application/x-shockwave-flash" Um eine spezielle Flash-Version wie z. B. Flash 4 zu ermitteln: navigator.plugins ["name"] = "Shockwave Flash" und navigator.plugins['Shockwave Flash']. description >= "Shockwave Flash 4" Hilfsmittel Bevor Sie sich jetzt aber mit der Erstellung eines JavaScripts oder VBScripts beschäftigen, sollten Sie weiterlesen. Macromedia bietet einige Hilfsmittel an, die Ihnen das Programmieren an dieser Stelle ersparen. Flash selbst erzeugt auf Wunsch ein fertiges HTML-Dokument inklusive der Überprüfung des installierten Flash Players mit den oben beschriebenen Einschränkungen. Für Flash 2 und Flash 3 hat Macromedia das kostenlose Programm Aftershock bereitgestellt, das diese 228 Aufgabe übernommen hat. Seit Flash 4 finden Sie diese Einstellungen unter Datei • Einstellungen für Veröffentlichungen im Register HTML. Dort brauchen Sie nur eine passende Vorlage zu wählen, und Flash erstellt für Sie ein HTML-Dokument inklusive der notwendigen Skripts. Ein weiteres nützliches Werkzeug ist Dreamweaver. Dreamweaver und Dreamweaver UltraDev stellen ein Verhalten zur Plug-inÜberprüfung bereit. Deutlich leistungsfähiger ist die Flash Erkennung im kostenlosen »Flash Deployment Kit«, das auch unabhängig von Dreamweaver erhältlich ist. Eine deutsche Version soll unter dem Namen »Flash Anwendungs-Kit« mit Erscheinen dieses Buches erhältlich sein. Erkennung ohne Skript Die Erkennung des Flash Players kann auch ohne Skriptsprachen wie JavaScript oder VBScript durchgeführt werden. Das hat folgende Vorteile Vorteile: Der Benutzer benötigt keine speziellen Webbrowser, da die Erkennung plattformübergreifend in fast allen Situationen zuverlässig funktioniert. Die Erkennung funktioniert unabhängig von den Sicherheitseinstellungen und der Konfiguration des Webbrowsers. Es ist kein Technologiemix notwendig, da auf andere Technologien außer Flash verzichtet werden kann. Es gibt aber auch Nachteile Nachteile, die nicht verschwiegen werden dürfen. Diese Nachteile treten aber normalerweise nur auf, wenn gar kein Flash Player installiert ist, und selbst dann nur in den wenigsten Fällen! ActionScript . Abbildung 1 Arbeitsweise der Flash-Erkennung ohne Skript Arbeitsweise Die skriptlose Erkennung verwendet einen Flash-Film, den so genannten Sniffer (Schnüffler), um den Flash Player zu überprüfen. In mehr als 90 Prozent aller Fälle wird dieser Sniffer von einem Webbrowser mit installiertem Flash Player aufgerufen. Bei nicht einmal zehn Prozent der Anwender ist bis jetzt noch kein Flash Player vorhanden. Falls es sich dann um den Internet Explorer unter Windows handelt, installiert dieser – soweit »Install on Demand« nicht deaktiviert ist – den aktuellen Flash Player automatisch und spielt dann den Sniffer ab. Auch der Netscape Navigator bietet eine ähnliche Funktion und installiert im Normalfall das aktuellste Plug-in. In den wenigen Fällen, in denen nun kein Player vorhanden ist und dieser nicht installiert wird, ruft der Webbrowser über ein RefreshTag eine alternative Seite auf. Wenn es sich um keinen Browser der vierten Generation oder neuer handelt, funktioniert der Refresh (Auffri- schen) nicht, und die aktuelle Seite bleibt auf dem Bildschirm stehen. Für diesen Fall, der weit weniger als fünf Prozent aller Anwender betrifft, wird eine entsprechende Information am Bildschirm angegeben. In den meisten Fällen ist bereits ein Flash Player vorhanden, und es muss nur die Version ermittelt werden. Wenn es sich bei dem Browser um den Internet Explorer unter Windows handelt, hat dieser eine an sich sehr nützliche Besonderheit, denn er erkennt die Version des Flash Players automatisch. Diese Erkennung basiert auf der im HTML-Dokument angegebenen Versionsnummer codebase="http:// download.macromedia.com/pub/shockwave/cabs/ flash/swflash.cab#version=5,0,0,0". Falls Sie die automatische Installation des aktuellsten Flash Players vermeiden möchten, dann verwenden Sie stattdessen se="http://download. macromedia.com/pub/shockwave/cabs/flash/ swflash.cab". Flashdetection . 229 Das komplette HTML-Dokument sollte ungefähr so aussehen: <HTML> <HEAD> <TITLE>Flashdetection</TITLE> <meta http-equiv="refresh" nen Variable $version statt. Da sich neuere Flash-Filme in einem Flash Player der Version 2 recht eigenartig verhalten, müssen noch einige Zeilen geschrieben werden: die URL wird in einer Variablen vor einem Flash 2-Player »versteckt«, und für Flash 2 muss noch ein play hinten angefügt werden. content="15;URL=noflash.html"> </HEAD> url="flash5.html"; <BODY> if (substring(eval("$version"), 5, 1) <OBJECT classid="clsid:D27CDB6E-AE6D- ge "5") { 11cf-96B8-444553540000" getURL (url); codebase="http://download.macromedia. com/pub/shockwave/cabs/flash/swflash. cab" WIDTH=18 HEIGHT=18> stop (); } else { play (); } <PARAM NAME=movie VALUE="flashsniffer.swf"> <EMBED src="flashsniffer.swf" WIDTH=18 HEIGHT=18 TYPE= "application/x-shockwave-flash" PLUGINSPACE="http://www.macromedia.com/ go/flashplayer"> </EMBED> </OBJECT> </BODY> </HTML> Unabhängig davon, welcher Flash Player letztendlich installiert ist, startet jetzt der Sniffer seine Arbeit. Der Sniffer verwendet spezielle Eigenschaften der verschiedenen Flash Player und ermittelt so die installierte Version. Im ersten Schritt wird auf Flash 5 getestet, dann auf Flash 4 mit Druckfunktion (alle Flash Player seit Dezember 1999), dann auf Flash 4, auf Flash 3 und schließlich auf Flash 2. Zuerst wird im Bild 6 überprüft, ob es sich um den Flash Player 5 handelt. Die Überprüfung findet mit Hilfe der seit Flash 4 vorhande- 230 In dem Skript wird über eine Kontrollstruktur überprüft, ob (if) der Flash Player 5 oder (für die Zukunft) ein neuerer installiert ist. Falls nicht (else), läuft der Film einfach weiter ab und gelangt im nächsten Schlüsselbild zu einer weiteren Überprüfung. Das Prüfen auf Flash 4 mit Druckfunktion funktioniert ähnlich. Hier wird aber nur überprüft, ob die Variable $version überhaupt existiert, da sie mit diesem Flash Player das erste Mal eingeführt wurde: url="flash4print.html"; if (eval("$version") gt "") { getURL (url); stop (); } else { play (); } Für den Test auf den normalen Flash 4Player reicht die Aktion if kombiniert mit ei- ActionScript . Abbildung 2 Zeitleiste des Sniffers nem Ausdruck. Dies verstehen weder Flash 2 noch Flash 3. de der Flash-Film überhaupt gar nicht funktionieren. url="flash4.html"; getURL ("flash2.html"); if (url gt "") { stop (); getURL (url); stop (); } else { play (); } Die Überprüfung auf Flash 3 benötigt eine Filmsequenz, da diese in Flash 2 noch nicht existierten und dementsprechend auch nicht abgespielt werden. In dieser Filmsequenz werden die folgenden Aktionen abgelegt, die unter anderem auch verhindern, dass weitere Überprüfungen durchgeführt werden, falls Flash 3 vorhanden ist. getURL ("flash3.html"); tellTarget ("/") { stop (); } Falls bis hierhin keine Überprüfung erfolgreich war, dann muss es sich um den Flash Player der Version 2 handeln, denn sonst wür- Damit der Sniffer zuverlässig funktioniert, wird er im Flash 4-Format veröffentlicht. Aus diesem Grund sind auch nur Aktionen verwendet worden, die es auch schon in Flash 4 gab (falls Sie für den Sniffer beim Veröffentlichen das 5er-Format wählen, arbeitet er nicht korrekt). Testen der Flashdetection Um die Flashdetection testen zu können, benötigen Sie zuallererst die alten Flash Player. Diese bietet Macromedia unter www. macromedia.com/support/flash/ts/documents/ oldplayers.htm für Testzwecke an. Bei dem Plug-in (alle Browser außer dem Internet Explorer unter Windows) sind die Installation und das Entfernen kein Problem. Falls Sie den Flash Player komplett aus Ihrem System verbannen möchten, finden Sie diesen im Plug-in-Ordner des Browsers unter den Dateinamen: Flashdetection . 231 NPSWF32.dll unter Windows Shockwave-Flash-NP-PPC oder ShockwaveFlash-NP-68 auf Macintosh-Computern Durch das Entfernen der Datei beginnen für Sie traurige Zeiten ohne Flash. Beim Internet Explorer unter Windows ist das nicht ganz so einfach. Bevor Sie einen älteren Flash Player installieren, sollten Sie den vorhandenen Flash Player entfernen. Dazu finden Sie die zugehörige ActiveX-Steuerung swflash.ocx entweder im Ordner C:\Windows\System\Macromed\ Flash (Windows 9x) oder im Ordner C:\WinNT\ System32\Macromed\Flash (Windows NT oder Windows 2000). Nachdem Sie die ActiveXSteuerung gefunden haben, können Sie diese über regsvr32 C:\Windows\System\Macromed\ Flash\swflash.ocx /u aus Ihrem System deaktivieren (den genauen Pfad zur Datei nicht vergessen). Um das Entfernen wirklich endgültig abzuschließen, müssen Sie jetzt noch alle Vorkommen von swflash.ocx und swflash.inf von Ihrem Computer löschen und dann einen Neustart durchführen. Stelle nur einen anderen Flash-Film anzugeben (siehe das Kapitel zu HTML, Seite 312). Falls der Benutzer einen Flash Player 4 oder neuer installiert hat, können Sie auch mit einem Flash-Film arbeiten, der die entsprechende Information von außen über das HTMLDokument erhält (siehe Beispiel auf der CD-ROM). In einem Flash-Film lassen sich direkt über die URL-Angabe Variablen festlegen, was nicht nur in der URL-Zeile des Browsers, sondern auch innerhalb eines HTML-Dokumentes funktioniert. <HTML> <HEAD> <TITLE>erweiterte_detection</TITLE> </HEAD> <BODY> <OBJECT classid="clsid:D27CDB6E-AE6D11cf-96B8-444553540000" codebase="http://download.macromedia. com/pub/shockwave/cabs/flash/swflash. cab#version =5,0,0,0" Erweitern der Flashdetection Die Flashdetection ohne Skript lässt sich auch mit der JavaScript-Methode erweitern, um die Vorteile beider Technologien optimal miteinander zu verbinden. Eine der besten Kombinationen hat Colin Moock unter www.moock.org veröffentlicht. Aber auch ohne JavaScript kann mit dieser Flashdetection noch mehr als nur die Version des installierten Flash Players herausgefunden werden. Mit einem einfachen Trick finden Sie heraus, ob es sich um den Internet Explorer unter Windows oder einen anderen Browser handelt. Da der Internet Explorer mit dem Object-Tag arbeitet, brauchen Sie an dieser 232 WIDTH=100% HEIGHT=100%> <PARAM NAME=movie VALUE="erweiterte_detection.swf?activex=yes erweiterte_detection.swf?activex=yes"> erweiterte_detection.swf?activex=yes <EMBED src="erweiterte_detection.swf?activex=no erweiterte_detection.swf?activex=no" erweiterte_detection.swf?activex=no WIDTH=100% HEIGHT=100% TYPE="application/ x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/ shockwave/download/index.cgi?P1_ Prod_Version=ShockwaveFlash"> </EMBED> </OBJECT> </BODY> </HTML> ActionScript . Eine weitere Information, die Sie leider erst mit dem Flash Player 4 vom Dezember 1999 oder höher herausfinden können, ist das Betriebssystem und die genaue Versionsnummer des Flash Players ($version und getVersion). In Flash 5 sieht das in ActionScript dann so aus: Darüber hinaus lassen sich in Flash 5 endlich auch das Datum und die Uhrzeit ermitteln (date und toString). Mit der Methode toString wird ein Datum in eine Zeichenkette verwandelt, die sich in einem Textfeld ausgeben lässt: datum=new Date(); version=getVersion (); datum=datum.toString(); player=version.substring( 4,5 ); os=version.substr(0,3); Flashdetection . 233 Preloader Das »Streaming« optimal nutzen! Wenn Sie größere Flash-Filme erstellen, benötigen Sie einen Preloader, um das Laden des Films zu steuern. Welche Dateigröße ein Flash-Film maximal haben darf, lässt sich nicht pauschal beantworten. Je besser der Inhalt ist, desto eher ist der Anwender bereit, auf ihn zu warten. Wenn es sich nun aber partout nicht verhindern lässt, dass die Datei sehr groß wird, sollten Sie die Streaming-Fähigkeit von Flash ausnutzen, um den Anwender schon während des Ladens zu unterhalten. wünschten Inhalt an, sondern springt nur in das letzte verfügbare Bild. Das Streaming testen Sie in der Entwicklungsumgebung, indem Sie Ihren Film über Steuerung • Film testen ausprobieren. Hier steht Ihnen der Bandbreiten-Profiler zur Verfügung (Ansicht • Bandbreiten-Profiler). Strategien für Preloader Was ist Streaming? Sobald Flash einen Film lädt, wird dieser gestreamt. Flash lädt einen Film Bild für Bild: Die Reihenfolge der Bilder in der Zeitleiste gibt auch die Ladereihenfolge vor. Sobald das erste Bild geladen ist, fängt Flash an, den Film abzuspielen, auch wenn noch nicht alles geladen ist. Grundsätzlich ist das eine nützliche Eigenschaft, aber was passiert, wenn das Laden langsamer verläuft als das Abspielen? 왘 Bewegungen und Streaming-Sounds stoppen, sobald Flash beim Abspielen auf ein noch nicht komplett geladenes Bild stößt. Sobald dieses Bild geladen ist, läuft der Film wieder weiter. 왘 Falls Sie im Film mit einer Aktion an eine Stelle springen möchten, die noch nicht geladen ist, dann zeigt Flash nicht den ge- 234 Um das Laden Ihres Flash-Films zu steuern, stehen mehrere Varianten von Preloadern zur Auswahl. Wenn es sich um eine einfache Animation handelt, die keine Interaktivität oder Sprungbefehle beinhaltet, dann können Sie meistens auf einen Preloader verzichten. Auch bei sehr kleinen Flash-Filmen brauchen Sie nicht immer das Laden zu steuern. Falls es sich jedoch um ein umfangreiches Projekt handelt, sollten Sie eine der folgenden Strategien wählen: 왘 Eine eher radikale, aber einfach umzusetzende Methode ist, darauf zu warten, dass der komplette Film geladen ist. Um das Warten etwas spannender zu gestalten, sollten Sie es mit einer Animation – einer Art Vorspann – erweitern. ActionScript . 왘 Es ist kein guter Stil, dem Anwender nur mitzuteilen, dass er sich noch etwas gedulden muss. Besser ist es, ihm auch zu sagen, wie lange er noch zu warten hat. Bei dieser Anzeige des Ladefortschritts können Sie zwischen geladenen Bildern und Bytes wählen. Sogar die Anzeige der momentanen Bandbreite ist möglich. 왘 Ein sehr trickreicher Preloader, der anzeigt, welche Elemente gerade geladen werden (z. B. »Loading Sound«) kommt weitestgehend ohne ActionScript aus und gewinnt immer mehr Fans. Das liegt hauptsächlich daran, dass er einfach zu realisieren ist, mit jeder Flash-Version funktioniert und dem Benutzer auch ein Feedback über den Ladefortschritt gibt. Natürlich können Sie die verschiedenen Strategien auch miteinander kombinieren, um Ihren Lieblings-Preloader zu erhalten. vom Ergebnis Aktionen durchführen. Die Aktion If Frame Is Loaded kontrolliert den Programmablauf, indem sie den Ladestatus eines Bildes überprüft und abhängig vom Ergebnis weitere Aktionen ausführt: ifFrameLoaded ( Bild Bild) { Aktionen } Übersetzt bedeutet das so viel wie: »Wenn das Bild x geladen ist, dann führe die folgenden Aktionen aus.« Leider kann hier aber nicht angegeben werden, was gemacht werden soll, wenn das Bild nicht geladen ist: Flash spielt in diesem Fall einfach weiter ab! Um dieses Verhalten jetzt für einen Preloader zu nutzen, platzieren Sie einfach in das nächste Schlüsselbild die folgenden Aktionen, die sicherstellen, dass die Überprüfung immer wieder durchgeführt wird (dafür muss zwischen zwei Bildern hin- und hergesprungen werden): Abwarten prevFrame (); Bevor Ihr Flash-Film »loslegt«, können Sie sicherstellen, dass er komplett geladen ist. Diese Variante des Preloaders ist relativ einfach einzusetzen und funktioniert auch schon mit Flash 3. Bei größeren Projekten hat sie aber den Nachteil, dass der Benutzer nicht »unterhalten« wird und bei zu langen Ladezeiten die Website einfach wieder verlässt. Flash 3-Variante Für die Flash 3-Variante des abwartenden Preloaders benötigen Sie die Aktion If Frame Is Loaded . Bei dieser Aktion handelt es sich um eine Kontrollstruktur Kontrollstruktur. Kontrollstrukturen beeinflussen den Ablauf eines Programms, indem Sie Bedingungen überprüfen und abhängig play (); Die Aktion prevFrame erhalten Sie, indem Sie in den Basisaktionen Go To wählen und dort als Typ »vorhergehendes Bild« angeben. Da prevFrame den Abspielkopf im vorhergehenden Bild stoppt, benötigen Sie noch das play. Hier ergibt sich gleich eine Besonderheit von Flash: Der Inhalt des Bildes, in dem diese Aktionen liegen, wird nämlich niemals angezeigt, da Flash die Aktionen ausführt – also in das vorherige Bild springt –, bevor der Inhalt dargestellt wird. Die Aktion If Frame Is loaded springt dann nicht einfach in das nächste, sondern in das Preloader . 235 왖 Abbildung 1 Meldung bei einer Endlosschleife übernächste Bild und spielt weiter ab, sobald der Film komplett geladen ist. Es gibt aber leider zwei ganz entscheidende Argumente gegen diesen Preloader: 왘 Falls Sie nicht explizit Filme für den Flash 3Player entwickeln, sollten Sie eine der folgenden Varianten wählen, da die Aktion If Frame Is Loaded von Macromedia nicht mehr »empfohlen« wird. 왘 Damit der Preloader richtig funktioniert (auch in einem Flash 3-Player) müssen Sie jedes Mal das letzte Bild Ihres Films ermitteln und angeben. Flash 4-Variante Seit Flash 4 haben Sie noch weitere Möglichkeiten, den Ladevorgang zu kontrollieren. Insbesondere _framesloaded und _totalframes sind sehr hilfreich. Bei _framesloaded und _totalframes handelt es sich um Eigenschaften, mit denen Sie die Anzahl der geladenen Bilder und die Zahl aller Bilder des Flash-Films ermitteln. Es gibt noch einen ganzen Haufen weiterer Eigenschaften, die Sie für den Film oder einzelne Filmsequenzen ermitteln und verändern können. Weitere nützliche Aktionen, die erst seit Flash 4 funktionieren, sind Schleifen Schleifen. Bei den Schleifen handelt es sich ebenfalls um Kon- 236 trollstrukturen: Solange eine Bedingung erfüllt ist, werden bestimmte Aktionen ausgeführt. Beim Sahneschlagen heißt es: So lange rühren, bis die Sahne steif ist. In Flash brauchen wir die Schleife: So lange warten, bis das letzte Bild geladen ist. In ActionScript sieht das dann so aus: while (_framesloaded<_totalframes) { // warte und tue nichts } Leider funktioniert dieses Skript aber nicht, da Flash glaubt, in eine Endlosschleife geraten zu sein, und die Ausführung von Aktionen einfach abbricht (Flash 4) bzw. eine entsprechende Meldung ausgibt (Flash 5). Das Problem der Endlosschleife lässt sich lösen, indem der Abspielkopf zwischen zwei Bildern hin- und herspringt. Dafür benötigen Sie mit der bedingten Anweisung if eine weitere Kontrollstruktur. Mit if überprüfen Sie eine beliebige Bedingung, wie z. B. ob die Anzahl der geladenen Bilder der Gesamtzahl an Bildern des Films entspricht, und führen dann abhängig vom Ergebnis weitere Aktionen aus. Falls die Bedingung nicht erfüllt ist, können Sie mit der Aktion else alternative Anweisungen geben: ActionScript . if (_framesloaded==_totalframes) { // film ist geladen } else { // film ist noch nicht geladen } Seit Flash 4 können Sie Ausdrücke innerhalb der Aktionen verwenden. So lässt sich an Stelle eines festen Wertes auch eine Funktion oder Eigenschaft in der Aktion Go To als Ziel nutzen. Mit der Eigenschaft _currentframe ermitteln Sie z. B. das aktuelle Bild. Durch _currentframe-1 wird in das vorhergehende Bild gewechselt, egal wo sich der Film befindet. Das folgende Skript lässt sich universell als Preloader einsetzen: if (_framesloaded<_totalframes) { // film ist noch nicht geladen gotoAndPlay (_currentframe-1); } Dieses Skript überprüft, ob alle Bilder geladen sind. Falls nicht, wird eine Schleife erzeugt, indem immer wieder zum vorherigen Bild gesprungen wird. Sobald der Film vollständig geladen ist, geht es dann ganz normal mit dem nächsten Bild weiter. Eigenschaften Mit den Eigenschaften können Sie in Flash zahlreiche Objekte und Einstellungen beeinflussen. Position und Größe sind z. B. Eigenschaften von Filmsequenzen und die Darstellungsqualität ist eine Eigenschaft des gesamten Films. Es gibt drei Kategorien von Eigenschaften: Eigenschaften für Textfelder, mit denen die Anzeige von Textfeldern gesteuert werden kann (scroll und maxscroll). Diese werden in Flash 5 aber nicht mehr als Eigenschaften, sondern als Funktionen behandelt und durch einen Punkt getrennt direkt hinter einer Variablen ohne Unterstrich angegeben. 왘 Die für den gesamten Film gültigen globalen Eigenschaften beeinflussen den Ton (_soundbuftime), die Bedienung durch die Tastatur (_focusrect) und die Darstellungsqualität (_highquality). 왘 Eigenschaften für Filmsequenzen, die zahlreiche Möglichkeiten bieten, Filmsequenzen darzustellen und zu animieren. Diese Eigenschaften lassen sich auch auf den ganzen Film anwenden. Änderungen an den Eigenschaften werden erst durchgeführt, wenn der Abspielkopf das Bild, in dem die Änderungen vorgenommen wurden, verlässt. Eigenschaften können ermittelt und teilweise auch verändert werden. Manche verwenden als Wert konkrete Zahlen, Zeichenfolgen oder einfach nur die Alternative zwischen wahr (TRUE) und falsch (FALSE). Wahr und falsch werden bei Eigenschaften als ein- oder ausgeschaltet interpretiert. Mit Hilfe von Ausdrücken können Sie alle Eigenschaften auslesen, umformen und wieder einer Eigenschaft zuweisen. Um innerhalb einer Filmsequenz deren Eigenschaften zu bestimmen, brauchen Sie nur die Eigenschaft anzugeben. Falls Sie jedoch Werte einer anderen Filmsequenz ermitteln möchten, geben Sie den Pfad zu der Filmsequenz gefolgt von einem Punkt und der Eigenschaft inklusive Unterstrich an: filmsequenz._x bezieht sich z. B. auf die horizontale Position der Filmsequenz. 왘 Preloader . 왘 Das Beispiel finden Sie auf der CD-ROM zum Buch. 237 Preloader in der Flash 3-Variante erstellen 1. Bestimmen Sie das letzte Bild Ihres Films Setzen Sie in der letzten Szene in das letzte Bild Ihres Flash-Films ein Schlüsselbild. Diesem Schlüsselbild geben Sie eine Bezeichnung: z. B. »ende«. 왗 Das Beispiel finden Sie auf der CD-ROM zum Buch. 2. Platzieren Sie die Aktion IF Frame Is Loaded In das zweite Schlüsselbild (Aktionen im ersten Schlüsselbild werden in einigen seltenen Fällen nicht richtig ausgeführt) Ihres gesamten Films platzieren Sie die neben stehenden Aktionen. Diese Aktionen überprüfen, ob alle Bilder bis zum Bild mit der Bezeichnung »ende« schon geladen sind. Falls ja, wird vom zweiten Bild direkt in das vierte Bild gesprungen und der Film weiter abgespielt. Falls nein, geht es weiter mit Bild drei. Wichtig ist, dass es gotoAndPlay und nicht gotoAndStop heißt, da sonst der Film im vierten Bild einfach stehen bleibt. 3. Stellen Sie sicher, dass die Überprüfung immer wieder durchgeführt wird, bis der Film komplett geladen ist. In das dritte Bild platzieren Sie ebenfalls ein Schlüsselbild. Hier verwenden Sie die neben stehenden Aktionen. Diese Aktionen bewirken, dass es zurück zum zweiten Bild geht. Dort wird dann wieder überprüft, ob alle Bilder bis zum Ende geladen sind. An Stelle dieser beiden Aktionen ließe sich auch die Aktion Go To verwenden, die aber die genaue Angabe eines Sprungziels benötigt, was häufig mehr Arbeit macht. 238 ifFrameLoaded ("ende") { gotoAndPlay (4); } prevFrame (); play (); ActionScript . Abwarten mit Animation Um einfache Preloader etwas spannender zu gestalten und dem Benutzer die Wartezeit so zu »versüßen«, sollten Sie ein Intro oder zumindest eine kleine Animation verwenden. Auch ein einfaches Spiel als Preloader erhöht die Wahrscheinlichkeit, dass der Benutzer auf Ihrer Website bleibt. Natürlich sollte Ihr Preloader dadurch nicht so groß werden, dass Sie dann einen Preloader für den Preloader benötigen. Sie müssen nur das Intro, die Animation oder das Spiel in eine Filmsequenz packen und diese einfach in den Preloader platzieren. Fertig ist der erweiterte Preloader. Eine weitere Verbesserung dieses Preloaders ist, dass Sie nicht auf das Laden des gesamten Films warten, sondern dass Sie Bereiche vorausladen ausladen. Dafür brauchen Sie nur die Bedingungen zu ändern. In den meisten Fällen müssen Sie dann aber mehrere Preloader in einem Film verwenden, was den Aufwand natürlich erhöht. Anzeige des Fortschritts Platzieren Sie in Ihrem Preloader einen dynamischen Text, den Sie z. B. mit der Variable ausgabe verbinden (Fenster • Bedienfeld • Textoptionen). In diese Variable schreiben Sie immer den Wert der aktuell geladenen Bilder. Der gesamte Preloader sieht dann z. B. so aus: ausgabe=_framesloaded+" Bilder von "+ 왘 totalframes+" Bildern geladen!"; CD-ROM if (_framesloaded<_totalframes) { // film ist noch nicht geladen gotoAndPlay (_currentframe-1); } Für das folgende Beispiel bezüglich der geladenen Bytes benötigen wir noch ein klein wenig den Dreisatz, schließlich wollen Sie dem Benutzer in Prozent anzeigen, wie viel schon geladen ist: Die Anzahl der Bilder interessiert ihn nämlich normalerweise überhaupt nicht. Da beim Dreisatz nicht immer glatte Werte herauskommen, wird mit Math.round noch eine Funktion verwendet, die das Ergebnis rundet. prozent=Math.round (getBytesLoaded()/ 왘 getBytesTotal()*100); CD-ROM ausgabe=prozent+" Prozent von "+ Sehr benutzerfreundlich sind Preloader, die den Fortschritt des Ladens anzeigen und den Anwender jederzeit darüber informieren, wie lange er noch warten muss. Der Fortschritt kann auf mehrere Arten gemessen werden: 왘 Anzahl der geladenen Bilder 왘 Anzahl der geladenen Bytes Die Eigenschaften _totalframes und _framesloaded in ActionScript helfen, die Anzahl der Bilder und den Ladestatus zu bestimmen. Die Methoden getBytesTotal und getBytesLoaded machen das Gleiche bezüglich der Dateigröße. getBytesTotal()+" Bytes geladen!"; if (_framesloaded<_totalframes) { // film ist noch nicht geladen gotoAndPlay (_currentframe-1); } Auf der Basis dieser Eigenschaften und Methoden können Sie noch weitere Berechnungen anstellen. Mit Hilfe einer Zeitmessung (Funktion getTimer) ließe sich z. B. die aktuelle Bandbreite errechnen. Preloader . 239 Preloader ohne ActionScript 왗 Dieses Beispiel finden Sie auch auf der CDROM zum Buch! Preloader ohne ActionScript machen sich das Streaming-Verhalten von Flash zu Nutze! Da alle Symbole, Sounds, Schriftkonturen und Bitmaps nur ein Mal in einem Flash-Film geladen werden, wird die Datei nur unwesentlich größer, wenn Sie diese Elemente zusätzlich an den Anfang des Films platzieren. Dies bewirkt dann, dass sie schon am Anfang geladen werden müssen und somit den Abspielvorgang stoppen. Erst wenn alle Elemente geladen sind, geht es weiter. Da nun keine neuen Elemente mehr geladen werden müssen, hat der Preloader funktioniert, und der Film läuft flüssig durch. Ein Problem bleibt aber: Wie kann ich verhindern, dass die Grafiken und Sounds schon am Anfang sichtbar bzw. hörbar sind. Ein Weg wäre, die Grafiken außerhalb der Bühne zu platzieren und den Sounds die Lautstärke null zu geben. Geschickter ist es, die Elemente einfach in einer Filmsequenz zu platzieren, deren erstes Bild leer ist und eine stop-Aktion enthält. Diese Filmsequenz platzieren Sie dann an den Anfang Ihres Films als Preloader. Dort hält die Filmsequenz, ohne sichtbar oder hörbar zu sein, das Abspielen an, bis alle Elemente geladen sind. Dann läuft der Film flüssig weiter. Sie können natürlich auch mehrere Filmsequenzen hintereinander platzieren und so Kategorien für Sounds, Bitmaps usw. bilden. Auf diese Art geben Sie dem Benutzer z. B. eine Rückmeldung, was eigentlich gerade geladen wird. Variablen Eine Variable ist ein Container oder eine Schublade für die verschiedensten Werte. In einer Variablen kann unter anderem ein Name, eine URL, eine Punktzahl oder eine Uhrzeit gespeichert werden. Der Inhalt einer Variablen kann sich verändern, wobei der Name immer gleich bleibt. Jeder Film und jede Filmsequenz haben ihre eigenen Variablen. Die Variablen werden genauso angesprochen wie Eigenschaften: Sie geben den Pfad (siehe Die Angabe von Zielen) und – gefolgt von einem Punkt – die Bezeichnung der Variablen an. Falls Sie eine Variable in derselben »Zeitleiste« ansprechen, brauchen Sie nur die Bezeichnung der Variablen zu verwenden. 240 ActionScript . Preloader . 241 Filmsequenzen Ein Flash-Dokument besteht aus vielen Objekten Bei komplexen Flash-Filmen werden Sie auf Dauer nicht um Filmsequenzen herumkommen, die – einmal verstanden – beeindruckende Möglichkeiten eröffnen. Tell Target wird nicht mehr gebraucht! Um Filmsequenzen effektiv einzusetzen, müssen Sie zuerst verstehen, wie Sie diese ansprechen und steuern können. Bis Flash 4 benötigte man dafür noch die Aktion Tell Target. Diese Aktion wurde nur von wenigen Entwicklern wirklich verstanden, was aber weniger an den Entwicklern, sondern vielmehr an dem eigenwilligen Konzept lag. In Flash 5 können Sie zwar immer noch mit Tell Target arbeiten, doch die neue Schreibweise ist deutlich schlüssiger. Steuern von Filmen und Filmsequenzen Der logische Aufbau eines Flash-Films Um die »Programmierung« von ineinander geschachtelten Filmsequenzen mit ActionScript zu verstehen, müssen Sie sich nur klar machen, wie ein Flash-Film aufgebaut ist. Dabei kommt es nicht auf die Struktur der Ebenen und Bilder, sondern auf die Verschachtelung der Filmsequenzen an. Ein Flash-Film (also eine SWF-Datei) wird immer von einem Flash Player abgespielt. So ein Flash Player kann sein: 242 ActiveX-Steuerung (für Microsoft Internet Explorer oder z. B. für die Einbindung eines Flash-Films in ein C++- oder Visual BasicProgramm) Plug-in (für Netscape Navigator) Flash Asset Xtra (für Macromedia Director) Stand-alone-Player Stand-alone-Projektor Dieser Flash Player kann Flash-Filme steuern oder von diesen gesteuert werden. Um zu steuern, benötigen Sie z. B. im Netscape Navigator JavaScript. Um gesteuert zu werden, stehen die FS Commands zur Verfügung. Der erste geladene Flash-Film liegt immer in Stufe 0 (engl. Level 0 0). Dieser Flash-Film gibt die Abspielgeschwindigkeit, die Hintergrundfarbe (soweit für den Flash Player keine andere z. B. im HTML-Code angegeben ist) und die Größe vor. Mit Hilfe der Aktion Load Movie können Sie weitere Flash-Filme in darüber liegende Level laden. Die neu geladenen Level werden bezüglich der oberen linken Ecke aneinander ausgerichtet: Um sich die Positionierung der Inhalte zu erleichtern, sollten Sie alle Filme in der gleichen Größe entwickeln. Die neu geladenen Filme besitzen keinen Hintergrund und erhalten die gleiche Abspielgeschwindigkeit wie Level 0. Natürlich können Sie auch einen neuen Film in Level 0 einladen ActionScript . Abbildung 1 Der logische Aufbau eines Flash-Films und so z. B. die Hintergrundfarbe und Abspielgeschwindigkeit ändern. Dies bewirkt allerdings, dass alle anderen Inhalte inklusive Level und Variablen gelöscht werden. In einem Level liegen dann eine ganze MenFilmsequenzen. Diese Filmsequenzen werge Filmsequenzen den anhand ihrer Instanzennamen (Fenster • Bedienfelder • Instanz) identifiziert. In einer Filmsequenz wiederum können weitere Filmsequenzen liegen, und in denen natürlich auch wieder. So besteht ein Level also normalerweise aus einer ganzen Menge ineinander geschachtelter Filmsequenzen. Jede Filmsequenz verhält sich dabei wie ein eigener Flash-Film: Seit Flash 4 lassen sich sogar an die Stelle einer Filmsequenz komplette Flash-Filme mit der Aktion Load Movie laden und auch wieder mit Unload Movie entfernen. Einen Flash-Film können Sie sich wie einen Baum vorstellen. Jede Astgabel und jedes Blatt wird dabei als Knoten bezeichnet, der wieder aus einem kompletten Flash-Film (SWF-Datei) oder einer Filmsequenz besteht. Wenn Sie mit Leveln arbeiten, erhalten Sie einen ganzen Wald (siehe Abbildung 1)! Einige der größten Fragen vieler Flash-Entwickler sind jetzt: »Wie beeinflusse ich die einzelnen Knoten? Wie kann ich diese Filmsequenzen und Flash-Filme in meinem Projekt steuern, und wofür ist das überhaupt gut?« Der Sinn von Filmsequenzen Fangen wir mit der letzten Frage an. Was ist der Sinn dieser ganzen Sache? Dies lässt sich einfach an einem (zugegebenermaßen etwas abgegriffenen) Beispiel beantworten: Sie bauen einen einarmigen Banditen (engl. Slot Machine). Dieser Automat besteht aus drei Anzeigen, die jeweils zehn verschiedene Motive darstellen können. Der Spieler hat also insgesamt 30 verschiedene Kombinationsmöglichkeiten, die Sie alle in Ihrem Flash-Film programmieren müssen. Wenn Sie eine vierte Anzeige benötigen, dann kommen Sie schon auf Filmsequenzen . 243 40 Möglichkeiten. Falls Sie jetzt aber mit Filmsequenzen arbeiten, dann kapseln Sie die Anzeige in ein Objekt. Dieses Objekt besteht aus nur noch zehn Zuständen. Sie nehmen drei oder vier oder fünf dieser Anzeigen und packen diese in den Film, und fertig ist die ganze Sache – Sie müssen nur noch die einzelnen Anzeigen steuern. Aber nicht nur Spiele wären ohne Filmsequenzen, also das Aufteilen der Grafiken und Interaktionen auf mehrere ineinander geschachtelte Objekte, undenkbar, sondern auch anspruchsvolle Menüs, Navigationen und Schaltflächen, wie Sie das sicherlich von Websites wie www.yugop.com kennen. Auf der CDROM zum Buch finden Sie einen Flash-Film zu diesem Thema, mit dem Sie die Angabe von Zielen üben können. Bilder und Zustände An manchen Stellen in diesem Kapitel wird absichtlich nicht von Bildern, sondern von Zuständen gesprochen. Zustände beziehen sich nicht nur auf Grafiken, sondern auch auf Interaktionen, auf Variableninhalte und Programmierung. Wenn der Benutzer auf einen Menüpunkt klickt, dann wechseln Sie einfach in einen neuen Zustand mit geöffnetem Menü. In Flash lassen sich diese Zustände am einfachsten in Bildern montieren. Bei Bildern wiederum handelt es sich eigentlich nur um eine Teilmenge der Zustände, um einzelne aufeinander folgende Zustände mit grafischem Inhalt, die im Normalfall eine Animation ergeben. Wenn Sie sich jetzt aber von dieser grafischen Betrachtungsweise lösen und Ihren Film nicht einfach als eine Ansammlung von Bildern, sondern als eine Menge von Zuständen sehen, dann entwickeln Sie völlig neue Möglichkeiten lichkeiten, mit Flash zu arbeiten. Die Angabe von Zielen Um Aktionen zielgerichtet einzusetzen, müssen Sie zwei Dinge beachten: Wo werden diese Aktionen aufgerufen? Auf wen sollen sich diese Aktionen beziehen? Aktionen beziehen sich immer auf die Zeitleiste, in der sie aufgerufen werden. Mit Zeitleiste ist hier eine Filmsequenz oder ein FlashFilm (egal ob als Level oder in eine Filmsequenz Angabe von Zielen in Flash 4 und Flash 5 Flash 4 244 Flash 5 (keine Angabe) this (optional) _level1 _level1 / _root .. _parent pfad/filmsequenz pfad.filmsequenz Tell Target With pfad:_eigenschaft pfad._eigenschaft pfad:variable pfad.variable (nicht vorhanden) pfad.methode Set Variable: "variable" = wert Variable=wert GetProperty ( "filmsequenz", _eigenschaft ) Filmsequenz._eigenschaft Set Property ("filmsequenz", _eigenschaft) = wert Filmsequenz._eigenschaft=wert ActionScript . Abbildung 2 Die Ziele in einem Flash-Film geladen) gemeint. Wenn Sie also direkt in Ihrem Film eine Aktion wie z. B. _visible=false verwenden, dann wird der komplette Flash-Film inklusive aller enthaltenen Filmsequenzen unsichtbar. Andere Level bleiben davon aber unberührt. Wenn Sie diese Aktion in eine Filmsequenz platzieren, dann werden nur diese Filmsequenz und natürlich alle anderen in ihr liegenden Filmsequenzen ausgeblendet. Das heißt, dass der komplette Ast des Baumes ausgehend von dem Knoten, in dem die Aktion liegt, unsichtbar wird. Um jetzt ein anderes »Ziel« unsichtbar zu machen, benötigen Sie den Pfad zu diesem Ziel. Wenn Sie die Aktion direkt im Film, sozusagen an der Wurzel ausführen, dann ermitteln Sie den Pfad, indem Sie einfach die Kanten bis zum Ziel entlang wandern. Um z. B. die Filmsequenz c1 zu steuern, benötigen Sie den Pfad a2.b2.c1. Die komplette Aktion lautet dann a2.b2.c1._visible=false. Falls Sie die Aktion aus der Filmsequenz a2 heraus auf c1 anwenden möchten, lautet das dann b2.c1._visible= false. Wenn Sie eine Wirkung von b1 auf a1 erzielen möchten, dann müssen Sie im Baum wieder nach unten wandern. Dies erreichen Sie mit _parent (in der Tabelle finden Sie einen Vergleich der Schreibweise aus Flash 4 mit der aus Flash 5). Die ganze Aktion lautet dann _parent. visible=false. Um von c2 nach a2 zu kommen, schreiben Sie _parent._parent._visible=false. Wie Flash die Filmsequenzen verwaltet Alle Objekte inklusive der Filmsequenzen werden in Arrays (Feldern) verwaltet. Mit ActionScript können Sie so die Elemente des Films ermitteln. Das folgende Skript z. B. gibt alle Elemente der Hauptzeitleiste (_root) im Ausgabefenster aus, wenn Sie den Film in der Entwicklungsumgebung testen (Steuerung • Film testen): for (i in _root) { trace ("Typ:"+typeof _root[i]+" Wert:"+_root[i]); } Filmsequenzen . 245 Wenn Sie von a2 nach a1 möchten, würden Sie _parent.a1 als Pfad angeben. Es gibt aber nicht nur relative, also vom Ausgangspunkt abhängige, sondern auch absolute Pfade Pfade. Mit _root wandern Sie z. B. immer direkt in die Wurzel des Baums. Also wenn Sie z. B. von b3 nach a1 möchten, geben Sie _parent._parent.a1 oder _root.a1 an. Egal von wo aus Sie _root.a1 als Pfad im Baum angeben, Sie erreichen immer die Filmsequenz mit dem Namen a1. Bis jetzt bezogen sich alle Aktionen immer nur auf das gleiche Level (Stufe), also den gleichen Baum. Um einen anderen Baum anzusprechen, benötigen Sie ebenfalls absolute Pfade, die mit _level gefolgt von der Nummer des Levels beginnen. Die Aktion _level0. _visible z. B. macht den ganzen Baum inklusive aller enthaltenen Filmsequenzen unsichtbar, egal von wo diese Aktion aufgerufen wird. Das funktioniert selbst dann, wenn diese Aktion in einem anderen Flash-Film liegt (solange beide Filme vom gleichen Flash Player abgespielt werden). Um z. B. von a3 aus b1 unsichtbar zu machen, würden Sie _level0.a1.b1._visible= false schreiben. Wenn Sie Aktionen erstellen, die sich auf die Filmsequenz beziehen, in der sie liegen, dann können Sie den Pfad weglassen. Meistens ist es aber besser (zumindest besser zu lesen), wenn Sie sich an JavaScript orientieren und anstatt _visible=false die Aktion this. _visible=false verwenden. Mit this wird immer eine Referenz auf die Zeitleiste verwaltet, in der die Aktionen liegen. Der Zieleditor Bei der Angabe von Zielen ist der Zieleditor ein hilfreiches Werkzeug, um die Pfade zu den Filmsequenzen zu ermitteln. Diesen Editor ru- 246 fen Sie im Bedienfeld Aktionen (Fenster • Bedienfelder • Aktionen) über das kleine Zielkreuz unten rechts auf. Im Editor wird die komplette Struktur der Filmsequenzen angezeigt. Ähnlich wie in einem Verzeichnisbaum wählen Sie hier ein Ziel aus. Flash schreibt dann in das Feld Ziel den dafür notwendigen Pfad. Bei der Darstellung des Pfades haben Sie die Wahl zwischen Schrägstrichen und Punkten als Trennzeichen der einzelnen Bestandteile des Pfades. Bei den Schrägstrichen handelt es sich um eine (nicht mehr zu empfehlende) Schreibweise aus Flash 4: Auch mit der Punktschreibweise lässt sich der Film für Flash Player 4 veröffentlichen. Im Unterschied zum Zieleditor in Flash 4 können Sie in Flash 5 auch zwischen einem absoluten und einem relativen Modus wählen. Sie sollten den relativen Modus bevorzugen, da dieser Ihre Filme flexibler hält. Der absolute Modus hat aber den Vorteil, dass Sie für den Zielpfad hier auch Filmsequenzen auswählen können, die nicht oberhalb (also näher zu den Blättern des Baums) liegen. Sonst müssten Sie diese Pfade immer per Hand angeben (was dann aber auch meistens relativ geht, indem Sie _parent verwenden). Eigenschaften, Methoden und Variablen Ein Flash-Film zeichnet sich durch eine Vielzahl an Eigenschaften aus. Diese Eigenschaften gelten teilweise für den ganzen Film, die meisten lassen sich aber auch für einzelne Filmsequenzen angeben. Genauso verhält es sich mit Variablen (siehe Seite 249). Auch diese werden für einzelne Filmsequenzen definiert. Um Film- ActionScript . Abbildung 4 Aktion Set Property Abbildung 3 Zieleditor sequenzen steuern zu können, bietet Flash neben den Eigenschaften zahlreiche Methoden. Häufig kommt es vor, dass Sie nicht nur einzelne Eigenschaften, Variablen oder Methoden aufrufen möchten, sondern dass Sie eine ganze Reihe von Aktionen bezüglich eines Objektes durchführen wollen. Dann ist die Aktion with sehr nützlich. Statt filmsequenz._x=10; filmsequenz._y=10; filmsequenz._alpha=10; schreiben Sie with (filmsequenz) { Eigenschaften Die meisten Dinge in einem Flash-Film lassen sich durch Eigenschaften beeinflussen. Alle Eigenschaften finden Sie innerhalb des Bedienfelds Aktionen in der Kategorie Eigenschaften. Den Wert der Eigenschaften können Sie mit ActionScript ermitteln und bei den meisten dieser Eigenschaften auch verändern. Den Inhalt einer Eigenschaft ermitteln Sie, indem Sie das zugehörige Objekt (meistens eine Filmsequenz) und die entsprechende Eigenschaft mit einem vorangestellten Unterstrich angeben. Dies können Sie auf zwei Arten durchführen: Wie bei Variablen (empfohlen) Mit der Funktion Get Property Den Befehl with gibt es auch in JavaScript! _x=10; _y=10; _alpha=10; } Alle Aktionen, die im with-Block liegen, werden so ausgeführt, als ob sie direkt in dem angegebenen Objekt (in diesem Fall eine Filmsequenz) liegen. Zeitpunkt und Auswirkung einer Änderung Änderungen an den Eigenschaften einer Filmsequenz werden erst durchgeführt, wenn der Abspielkopf das Bild, in dem die Änderungen vorgenommen wurden, verlässt. Änderungen der Eigenschaften einer Filmsequenz wirken sich auch auf alle in der Filmsequenz enthaltenen Objekte aus. Filmsequenzen . 247 Die Funktion Get Property erhält zwei Parameter: einen für das Ziel (falls Sie kein Ziel angeben, bezieht sich diese Funktion auf die Zeitleiste, in der sie ausgeführt wird) und einen für die zu ermittelnde Eigenschaft. Ein ActionScript, mit dem Sie die aktuelle Darstellungsqualität ermitteln, könnte z. B. ausgabe = getProperty ( "", _quality ); lauten. Die aktuelle horizontale Position einer Filmsequenz geben Sie mit ausgabe = getProperty ( "pfad. filmsequenz", _x ); aus. Die meisten Eigenschaften lassen sich verändern, was ebenfalls auf zwei Arten möglich ist: Wie bei Variablen (empfohlen) Mit der Aktion Set Property Falls Sie die Eigenschaften von Filmsequenzen mit der Aktion Set Property bestimmen möchten, gibt Ihnen Flash im normalen Modus des ActionScript-Editors alle notwendigen Parameter vor. Alle Eigenschaften, deren Wert Sie verändern können, werden im Feld Eigenschaft angeboten. Als Ziel geben Sie eine Filmsequenz – wie ab Seite 246, Die Angabe von Zielen, beschrieben – an. Falls Sie kein Ziel festlegen, verwendet Flash automatisch die Filmsequenz oder den Film, in der bzw. dem die Aktion aufgerufen wird. Das Feld Wert bestimmt die Änderung an der Eigenschaft. Eigenschaften Eigenschaft Beschreibung Lesen/Setzen Wert _alpha Diese Eigenschaft bestimmt den Alphawert (Transparenz) einer Filmsequenz in Prozent. ja/ja Ganzzahl von 0 (durchsichtig) bis 100 (undurchsichtig), Standard 100 _currentframe Diese Eigenschaft bestimmt das aktuelle Bild in einer Filmsequenz. ja/nein _droptarget Diese Eigenschaft bestimmt, auf welche Film- ja/nein sequenz eine andere Filmsequenz gezogen wurde. _focusrect Diese globale Eigenschaft bestimmt, ob um ausgewählte Schaltflächen ein gelbes Rechteck erscheint. Dadurch wird die Bedienung mit der Tastatur erleichtert. Diese Eigenschaft gibt an, wie viele Bilder der Filmsequenz bereits in den Speicher geladen sind. Diese Eigenschaft bestimmt die Höhe einer Filmsequenz in Pixel. Diese globale Eigenschaft bestimmt die Darstellungsqualität des gesamten Films. An Stelle dieser Eigenschaft sollte ab jetzt _quality verwendet werden. Ganzzahl von 1 (erstes Bild) bis 16000 (maximale Anzahl Bilder) Name einer Filmsequenz als Zeichenfolge (die Position des Mauszeigers ist ausschlaggebend für den Wert) Boolean (TRUE oder FALSE), Standard TRUE (eingeschaltet) _framesloaded _height _highquality 248 ja/ja ja/nein ja/ja ja/ja Ganzzahl von 1 (erstes Bild) bis 16.000 (maximale Anzahl Bilder) Ganzzahl 0 für niedrige Qualität, 1 für hohe Qualität und 2 für beste Qualität ActionScript . Eigenschaft Beschreibung Lesen/Setzen Wert _name Diese Eigenschaft bestimmt die Bezeichnung einer Filmsequenz. Diese globale Eigenschaft bestimmt die Darstellungsqualität des gesamten Films. Diese Eigenschaft bestimmt die Drehung einer Filmsequenz in Grad. ja/ja Zeichenfolge ja/ja ja/ja "LOW", "MEDIUM", "HIGH" oder "BEST" als Zeichenfolge Ganzzahl (Flash rechnet die Drehung automatisch auf einen Winkel zwischen –180 und 180 Grad um) Ganzzahl, Standard 5 ja/nein Zeichenfolge ja/nein Ganzzahl von 1 (erstes Bild) bis 16.000 (maximale Anzahl der Bilder) Zeichenfolge _quality _rotation _soundbuftime _target _totalframes _url _visible _width _x _xmouse _xscale _y _ymouse _yscale Diese globale Eigenschaft bestimmt den Puffer für den gestreamten Sound des gesamten Films in Sekunden. Diese Eigenschaft bestimmt den kompletten Pfad einer Filmsequenz. Diese Eigenschaft gibt an, aus wie vielen Bildern der Flash-Film oder eine Filmsequenz bestehen. Diese Eigenschaft gibt den URL-Pfad des Flash Player-Films an, der die Filmsequenz enthält. Diese Eigenschaft bestimmt, ob eine Filmsequenz sichtbar ist oder nicht. Diese Eigenschaft bestimmt die Breite einer Filmsequenz in Pixel. Diese Eigenschaft bestimmt die horizontale Position einer Filmsequenz in Pixeln. Diese Eigenschaft ermittelt die horizontale Position der Maus in Pixel. Diese Eigenschaft bestimmt die Breite einer Filmsequenz in Prozent. Diese Eigenschaft bestimmt die vertikale Position einer Filmsequenz in Pixel. Diese Eigenschaft ermittelt die vertikale Position der Maus in Pixel. Diese Eigenschaft bestimmt die Höhe einer Filmsequenz in Prozent. Variablen Eine Variable ist nichts anderes als ein Container ner, in den Sie beliebige Dinge packen können. In Variablen legen Sie z. B. Zwischenergebnisse, Namen und Punktestände ab, um an anderer Stelle im gleichen oder in anderen Skripts wieder auf diese zuzugreifen. Dabei verhalten sich ja/ja ja/nein ja/ja ja/ja Boolean (TRUE oder FALSE), Standard TRUE (eingeschaltet) Ganzzahl ja/ja Ganzzahl ja/nein Ganzzahl ja/ja Ganzzahl, Standard 100 ja/ja Ganzzahl ja/nein Ganzzahl ja/ja Ganzzahl, Standard 100 Variablen ähnlich wie Eigenschaften; nur dass Variablen nicht mit einem Unterstrich beginnen, sondern einen von Ihnen frei gewählten Namen erhalten (dieser muss aber mit einem Buchstaben beginnen und darf keine Sonder- oder Leerzeichen enthalten). Anhand dieses Namens identifizieren Sie den Container. Filmsequenzen . 249 Angabe von Zielen 250 Variablen werden wie Eigenschaften immer in einer Zeitleiste verwaltet. Das heißt, Sie definieren Variablen für jede Filmsequenz separat. Wenn Sie auf die Variablen einer anderen Filmsequenz zugreifen möchten, benötigen Sie den Pfad zu diesem Objekt. Um den Inhalt einer Variable (oder Eigenschaft) zu ermitteln, geben Sie den Namen der Variablen an. Falls Sie den Inhalt der Variablen punkte in einem Textfeld ausgeben möchten, können Sie z. B. ausgabe=punkte; schreiben. Wenn die Variable nicht in der gleichen Filmsequenz liegt, in der die Aktionen ausgeführt werden, dann müssen Sie den Pfad zu der gewünschten Filmsequenz angeben. Liegen die Aktionen direkt im Film, und die Variable ist in der Filmsequenz »spieler« definiert, dann schreiben Sie ausgabe=spieler.punkte;. Falls Sie z. B. von der Filmsequenz »highscore« auf die im Hauptfilm liegende Variable name zugreifen möchten, dann könnten Sie ausgabe= _parent.name; oder ausgabe=_root.name; schreiben. Sie können verschiedene Aktionen wählen, um eine Variable (oder Eigenschaft) zu ändern ändern: Mit der Aktion set variable geben Sie die Variable und den Wert für diese Variable an. Im Expertenmodus geben Sie die Variable und den Wert getrennt durch den Zuweisungsoperator »=« (der Vergleichsoperator »=« aus Flash 4 ist durch »==« ersetzt worden) direkt in das Skript ein: variable = wert;. Im normalen Modus lässt sich mit Hilfe der Aktion evaluate die Zuweisung eines Wertes zu einer Variablen genauso wie im Expertenmodus durchführen. Falls Sie eine Variable ändern möchten, die nicht in derselben Zeitleiste liegt, dann müssen Sie den Pfad zu dieser Zeitleiste angeben. Liegt die Aktion z. B. im Hauptfilm und ändert eine Variable tage in der Filmsequenz »alter«, dann schreiben Sie alter.tage=365*27;. Falls Sie eine Filmsequenz »hindernis« haben, die auf die Variable punkte im Hauptfilm zugreift, dann können Sie _parent.punkte=_parent.punkte+10; oder _root.punkte=_root.punkte+10; schreiben. Übrigens lässt sich bei der Zuweisung von Werten wie in JavaScript vorgehen, was in der Dokumentation von Macromedia nur sehr beiläufig erwähnt wird: Um den Wert einer Variablen zu erhöhen, schreiben Sie z. B. variable+=10;. Um den Wert einer Variablen zu verringern, geben Sie z. B. variable-=10; an. Um den Wert einer Variablen von einem Vergleich abhängig zu machen, verwenden Sie z. B. gruppe = Number(alter)>65 ? "Rentner" : "Erwerbstätig"; an Stelle der Aktion if. Lokale und globale Variablen In Flash 5 gibt es jetzt auch die Unterscheidung zwischen lokalen und globalen Variablen. Für lokale Variablen, also Variablen, die nur innerhalb eines durch geschweifte Klammern festgelegten Bereichs (z. B. in einer Funktion) gelten, benötigen Sie bei der Deklaration das Schlüsselwort var. Methoden Mit Methoden lassen sich Objekte – und bei Filmsequenzen handelt es sich ebenfalls um Objekte – steuern. Eine Methode verwenden Sie genauso wie eine Variable oder eine Eigenschaft. Abhängig davon, wo die Methode ausgeführt wird und wo das Objekt liegt, müssen Sie einen passenden Pfad zu dem Objekt angeben. ActionScript . Wenn die Methode direkt im Objekt selber liegt, dann geben Sie die Methode direkt an. Um die Animation im Film oder einer Filmsequenz zu stoppen, würden Sie z. B. stop (); schreiben. Alternativ können Sie auch this. stop(); angeben. An der zweiten Variante erkennen Sie, dass Methoden direkt hinter dem Objektbezeichner (also hier hinter dem Pfad zur Filmsequenz) Filmsequenz), durch einen Punkt getrennt, angegeben werden. Um z. B. das Abspielen in einer Filmsequenz mit dem Instanzennamen »animation« aus dem Hauptfilm zu stoppen, würden Sie animation.stop(); schreiben. In Flash gibt es eine ganze Menge an Methoden, die speziell für Filmsequenzen gedacht sind. Diese Methoden finden Sie im ActionScript-Editor (Fenster • Aktionen) innerhalb der Objekte in der Kategorie MovieClip (Filmsequenz). Einige dieser Methoden werden bei der Spieleentwicklung ab Seite 282, Spiele, näher betrachtet. Operatoren benutzen Sie, um mehrere Elemente miteinander zu verknüpfen: also z. B. das Pluszeichen, um in einem Ausdruck zwei Zahlen zu addieren und das Ergebnis dann als Parameter in einer Aktion zu verwenden. Flash wertet diese Liste an Elementen aus und verwendet das Ergebnis als Parameter. Ausdrücke sind nach einem festen Schema aufgebaut. Entweder Sie verwenden in einem Ausdruck nur einen einzigen Operanden, also nur einen Wert, oder Sie verbinden mehrere Operanden durch Operatoren. Operanden gibt es für die verschiedensten Dinge. Die bekanntesten sind Plus, Minus, Mal und Geteilt. Das Plus kann in Flash 5 auch verwendet werden, um Zeichenketten miteinander zu verbinden (in Flash 4 benötigten Sie dafür noch den Operator »&«). Objektaktionen Ausdrücke als Parameter Die Parameter für Aktionen und Methoden können als Ausdrücke angegeben werden. Ein Ausdruck ist so etwas wie eine mathematische Formel Formel, die eine ganze Liste an Elementen beinhalten darf. Zahlen wie z. B. 5 oder 11.7 (das Dezimalzeichen muss ein Punkt sein). Zeichenketten Zeichenketten, wie z. B. »Sie haben gewonnen«, werden in Anführungszeichen gesetzt. Funktionen verhalten sich ähnlich wie in der Mathematik: Sie packen etwas hinein, und die Funktion gibt ein Ergebnis zurück (wie bei einer »Blackbox«). Eigenschaften wie z. B. die Größe oder Position haben die meisten Objekte. Neu in Flash 5 ist, dass auf Ereignisse nicht nur mit Bildaktionen und über Schaltflächen, sondern auch mit Filmsequenzen reagiert werden kann. Diese ActionScripts werden wie die ActionScripts für Schaltflächen als Objektaktionen bezeichnet. Der Vorteil der Objektaktionen für Filmsequenzen ist, dass Sie dadurch autarke, also sich selbst verwaltende Objekte schaffen. Dazu ein Beispiel: Filmsequenzen . 251 Mausverfolger 1. Erstellen Sie eine Filmsequenz Erstellen Sie eine Filmsequenz mit der Grafik, die dem Mauszeiger verzögert folgen soll. Platzieren Sie diese Filmsequenz in Ihren Film. 2. Erstellen Sie die Objektaktionen Aktivieren Sie den ActionScript-Editor (Fenster • Aktionen), und wählen Sie anschließend die Instanz der Filmsequenz auf der Bühne aus. Im ActionScript-Editor sollte der Text »Objektaktionen« angezeigt werden. Wählen Sie nun die Aktion onClipEvent, und aktivieren Sie für diese Aktion das etwas unglücklich übersetzte Ereignis Bild eingeben (engl. enter Frame). Als Nächstes fügen Sie entweder im Expertenmodus oder über die Aktion evaluate die neben stehenden zwei Zeilen ein. In diesen Zeilen wird der Abstand der Maus zur Filmsequenz ermittelt. Auf Grund der Division nähert sich die Filmsequenz nur langsam dem Mauszeiger an. Das fertige Skript sollte dann wie neben stehend aussehen. Im Beispiel Mausverfolger wird ausgenutzt, dass sich alle Aktionen innerhalb des onClipEvent-Blocks auf die Filmsequenz beziehen. Auch die Mausposition wird hier im Verhältnis zur Filmsequenz ermittelt. Filmsequenzen verstehen folgende Ereignisse se, wobei es bei den Mausereignissen egal ist, wo auf der Bühne sie ausgelöst werden (es muss also nicht auf das Objekt geklickt werden): Laden bedeutet, dass die Filmsequenz neu auf der Bühne erscheint. 252 _x = _x+_xmouse/8; _y = _y+_ymouse/8; onClipEvent (enterFrame) { _x = _x+_xmouse/8; _y = _y+_ymouse/8; } Bild eingeben (engl. enter Frame) wird abhängig von der Abspielrate ausgelöst und funktioniert auch bei Filmen, die nur aus einem Bild bestehen. Beim Entladen wird die Filmsequenz von der Bühne entfernt. Maus drücken wird immer dann ausgelöst, wenn die Maustaste gedrückt wird (es ist unerheblich, wo geklickt wird). Maus loslassen bezieht sich auf das Loslassen der Maustaste. Maus ziehen reagiert auf jede Mausbewegung. ActionScript . Durch das Drücken einer Taste wird das Ereignis Taste drücken ausgelöst (wenn die Taste gedrückt bleibt, wird dieses Ereignis normalerweise immer wieder ausgelöst). Sobald eine Taste losgelassen wird, löst Flash das Ereignis Taste loslassen aus. Das Ereignis Daten hilft, auf neu eingelesene Informationen zu reagieren. Smart Clips Neu in Flash 5 sind die Smart Clips (oder Smart-Filmsequenzen). Diese erleichtern die Smart-Filmsequenzen Erstellung von komplexen Flash-Filmen aus zwei Gründen: Eine Trennung zwischen Programmierung und Design wird ermöglicht. Objekte lassen sich als Vorlage erstellen und einfach konfigurieren. Bei einem Smart Clip handelt es sich um eine Filmsequenz, deren Instanzen Sequenzparameter erhalten, die für jede Instanz individuell eingestellt werden können. Mit diesen Sequenzparametern wird das Objekt dann beim Start des Films initialisiert. Sie geben auf diese Art und Weise Eigenschaften und Variablenwerte vor. Die Verwendung eines Smart Clips besteht normalerweise aus vier Schritten: 1. Filmsequenz erstellen 2. Sequenzparameter definieren (dann wird aus der Filmsequenz ein Smart Clip). 3. Smart Clip im Film platzieren (dann erhalten Sie eine oder mehrere Instanzen). 4. Sequenzparameter für jede Instanz einstellen len. Schaltfläche als Smart Clip Sie haben für eine große Website einen Styleguide entwickelt. Dieser Styleguide enthält verschiedene Gestaltungselemente, darunter auch Schaltflächen, deren Beschriftung erst beim Zusammenbauen der Website festgelegt wird. Um zu verhindern, dass dafür das Symbol bearbeitet und eventuell unabsichtlich verändert wird, erstellen Sie einen Smart Clip, der einen Sequenzparameter für die Beschriftung enthält. Erzeugen Sie eine einfache Schaltfläche (Einfügen • Neues Symbol). Platzieren Sie die eben erstellte Schaltfläche in eine Filmsequenz, und erstellen Sie einen dynamischen Text oberhalb der Schaltfläche. Weisen Sie dem Text die Variable »beschriftung« zu (Fenster • Bedienfelder • Textoptionen). Erst wenn Sie der Filmsequenz Sequenzparameter zuweisen, erhalten Sie einen Smart Clip. Die Sequenzparameter erstellen Sie, indem Sie die Filmsequenz in der Bibliothek auswählen und dort Optionen • Sequenzparameter definieren wählen. Dort geben Sie als Dieses Beispiel finden Sie auch auf der CDROM zum Buch. Beispiele für Smart Clips Im Lieferumfang von Flash sind einige Smart Clips enthalten, anhand derer Sie dieses Konzept erlernen können. Unter Fenster • Allgemeine Bibliotheken finden Sie die Bibliothek Smart Filmsequenzen, die z. B. eine Listbox auf der Basis von Smart Clips enthält. In der Bibliothek Lernende Objekte hat Macromedia einige Smart Clips für WBTs (Web Based Training oder webbasiertes Lernen) zusammengefasst. Natürlich finden Sie auch auf der CDROM zum Buch Dateien zu diesem Thema. Filmsequenzen . 253 Abbildung 5 Sequenzparameter definieren Parameter den Namen »beschriftung« ein, da dies der zu steuernde Parameter ist. Nachdem Sie eine Filmsequenz mit Sequenzparamtern erstellt haben, verwenden Sie diese wie eine normale Filmsequenz in Ihrem Film. Es gibt nur einen Unterschied: Über das Bedienfeld Sequenzparamter (Fenster • Bedienfelder • Sequenzparameter) legen Sie den Wert für alle definierten Parameter fest. Die Werte werden aber erst dann »umgesetzt«, wenn der Film veröffentlicht oder getestet wird (Steuerung • Film testen). Sequenzparameter festlegen Um aus einer Filmsequenz einen Smart Clip zu machen, benötigen Sie Sequenzparameter. Dabei handelt es sich um nichts anderes als Variablen und Eigenschaften, die später über das Bedienfeld Sequenzparameter eingestellt werden können und dann in der Filmsequenz gesetzt werden. Die Sequenzparameter (engl. Clip Parameters) legen Sie in der Bibliothek über Optio- 254 nen • Sequenzparameter definieren fest. Über die Plus- und Minus-Schaltflächen fügen Sie neue Parameter hinzu oder löschen vorhandene: Änderungen wirken sich nur aus, wenn Sie den Smart Clip erneut im Film platzieren. Der Name bestimmt, welche Variable in der Filmsequenz gesetzt wird (Sie können an dieser Stelle sogar Eigenschaften angeben und so über die Sequenzparameter z. B. die Größe festlegen). Im Feld Wert geben Sie die möglichen Eingaben für die Variable vor; diese sind vom Typ abhängig: Default (Standard) erlaubt beliebige Texte und Zahlen. Array (Feld) ermöglicht es, eine Menge von Einträgen (engl. Items) festzulegen. Der Benutzer kann auch weitere Items hinzufügen. Den Standardwert (Standard-Offset) geben Sie ebenfalls vor: Flash fängt hierfür bei null zu zählen an. Object steht für ein Objekt, dessen Eigenschaften Sie definieren. Der Benutzer des Smart Clips gibt die Werte der Eigenschaf- ActionScript . ten dann selbst an (siehe Selbst definierte Objekte, Seite 266). List steht für eine Liste von Werten. Diese Liste geben Sie vor, und der Benutzer sucht sich später den passenden Eintrag aus. Den Standardwert (Standardt-Offset) geben Sie ebenfalls vor: Flash fängt hierfür bei null zu zählen an. Bei den Typen Array, Object und List wechseln Sie zur Angabe der Werte durch Doppelklick in ein neues Fenster. Dort können Sie diese Werte angeben, löschen und ordnen. Es ist sehr praktisch, dass Sie zur Eingabe der Werte für die von Ihnen definierten Sequenzparameter nicht auf das eher »unerotische« Bedienfeld Sequenzparameter zurückgreifen müssen: Sie können einen speziellen Flash-Film erstellen erstellen, der dann in diesem Bedienfeld angezeigt wird und die notwendigen Eingaben entgegennimmt. Alles, was Sie dafür brauchen, ist eine Filmsequenz mit dem Instanzennamen »xch« in der benutzerdefinier- ten Oberfläche (xch steht für exchange, was soviel wie Austausch bedeutet). Alle Sequenzparameter werden automatisch in dieser Instanz initialisiert und mit den Standardwerten belegt. Eine Änderung in diesem Film ändert auch den zugehörigen Sequenzparameter. Damit die benutzerdefinierte Oberfläche auch funktioniert, muss sie noch als Flash-Film innerhalb der Sequenzparameter angegeben werden. Ärgerlich ist, dass sich die Größe des Flash-Films hier nicht vorgeben lässt. Wenn das Bedienfeld Sequenzparameter sehr klein ist, wird die benutzerdefinierte Oberfläche im Rahmen dieses Bedienfelds auch entsprechend klein angezeigt. Das Sperren der Instanz im Fenster Sequenzparameter definieren verhindert, dass der spätere Benutzer des Smart Clips die Variablennamen bearbeiten kann. So lässt sich, wie in den meisten Fällen gewünscht, nur der Wert einstellen. Filmsequenzen . Ein Beispiel finden Sie auf der CD-ROM zum Buch. 255 Oberflächenelemente Wie kann ich Oberflächenelemente erzeugen? Nicht immer reichen die Standardelemente wie Schaltflächen und Textfelder zur Gestaltung aus. Eigene Oberflächenelemente (z. B. Pop-up-Menüs, Fenster und Checkboxen) zu erstellen, ist jedoch sehr einfach: Man muss nur wissen, wie! Da es eine unerschöpfliche Menge an Oberflächenelementen gibt, kann hier nur eine kleine Auswahl präsentiert werden. Im Internet gibt es jedoch Hunderte von Tutorials für weitere Elemente. Diese Schaltfläche erhält die Aktion play, sobald der Benutzer die Maus auf ihr loslässt (on (release)). Fenster und Drag and Drop Checkboxen 왗 Dieses Beispiel finden Sie auch auf der CDROM zum Buch. Bei Checkboxen (Kontrollkästchen) handelt es sich um Elemente, die aktiviert und deaktiviert werden können. Häufig kommen Checkboxen als kleine Kästchen in Formularen zum Einsatz, um z. B. Interessengebiete anzugeben. Checkbox erstellen Erstellen Sie eine Filmsequenz, die genau zwei Bilder lang ist. Eine Checkbox besteht aus einem aktivierten und einem deaktivierten Zustand. Platzieren Sie diese beiden Zustände hintereinander in die Filmsequenz. Damit die Checkbox nicht von alleine an und aus geht, müssen Sie in beide aufeinander folgenden Bilder die Aktion stop platzieren. Um die Checkbox fertig zu stellen, benötigen Sie nur noch eine Schaltfläche, die in beiden Zuständen genau auf der Checkbox liegt. 256 Egel ob es sich um Fenster wie bei einem Windows- oder Macintosh-Computer oder um ein anderes ziehbares Element handelt, die nötigen ActionScript-Befehle sind immer die gleichen. Um ein Drag and Drop zu programmieren, erzeugen Sie zunächst eine Filmsequenz, welche die gewünschten Grafiken und Animationen des zu ziehenden Objektes beinhaltet. Erstellen Sie eine Schaltfläche, die Sie in die Filmsequenz platzieren. Der aktive Bereich der Schaltfläche bestimmt, wo der Benutzer klicken muss, um das Objekt durch die Gegend zu ziehen. Damit die Filmsequenz ziehbar wird, müssen Sie diese bei einem Mausklick an den Mauszeiger binden. Das machen Sie über die Aktion startDrag in der Schaltfläche. Damit die Filmsequenz an einer beliebigen Stelle losgelassen werden kann, muss die Bindung an den Mauszeiger mit dem Loslassen der Maustaste wieder aufgehoben werden. Dies errei- ActionScript . 왗 Abbildung 1 Zeitleiste für Checkboxen chen Sie durch die Aktion stopDrag. Das komplette Skript sollte dann so aussehen: on (press) { this.startDrag(); } on (release, releaseOutside) { this.stopDrag(); } Da es bei sehr schnellen Mausbewegungen zu einem Loslassen auch außerhalb der definierten Schaltfläche kommen kann, wird die Bindung an den Mauszeiger auch in diesem Fall (release outside) aufgehoben – sonst kann es passieren, dass die Filmsequenz noch an dem Mauszeiger hängt, obwohl der Anwender gar keine Maustaste mehr drückt. Unsichtbare Schaltflächen leichter verwenden Eine unsichtbare Schaltfläche lässt sich leichter platzieren, wenn Sie das Menü Steuerung • Schaltflächen aktivieren ausschalten. Dann wird der aktive Bereich der Schaltfläche türkis dargestellt. Im fertigen Film ist der aktive Bereich natürlich weiterhin unsichtbar. Menüs Der erste Gedanke bei der Erstellung eines Menüs, in den gedrückten Zustand einer Schaltfläche weitere Schaltflächen für die einzelnen Menüpunkte zu platzieren, lässt sich leider nicht umsetzen! Schaltflächen innerhalb einer Schaltfläche funktionieren nicht. Ein hierarchisches Menü ist nur möglich, indem beim Anwählen des Menüs (geschlossen) an eine Stelle mit den Menüpunkten gesprungen wird (geöffnet): Sie wechseln bei einem Menü einfach zwischen zwei Zuständen hin und her. Dabei ist es egal, ob es sich um ein Pop-upoder Pull-down-Menü handelt. Das Menü in eine Filmsequenz »verpacken« Auch wenn in diesem Beispiel das Menü direkt in der Zeitleiste des Films angelegt wird, kann es geschickter sein, das Menü in einer Filmsequenz abzulegen: Die Vorteile sind, dass die Zeitleiste des Films übersichtlicher wird, da dort für das Menü nur noch ein Symbol gebraucht wird, und dass sich das Menü auch an verschiedenen Stellen nutzen lässt, ohne die Datei wesentlich zu vergrößern. Oberflächenelemente . 257 Menü In diesem Beispiel wird ein Menü erstellt, das drei Unterpunkte bietet. Das Menü soll sich ähnlich einem Standardmenü unter Windows oder auf Macintosh-Computern verhalten. ➊ ➌ ➋ 1. Erstellen Sie die Zustände des Menüs Zuerst wird die Zeitleiste des Films in Bereiche für das geschlossene ➊ und für das geöffnete ➋ Menü unterteilt. Jeder Bereich beginnt mit einem Schlüsselbild (Einfügen • Schlüsselbild), das im ersten Bereich mit PopUp geöffnet und im zweiten Bereich mit PopUp geschlossen bezeichnet wird. In den beiden Schlüsselbildern verhindern Sie mit der Aktion stop, dass der Film einfach durchläuft. 2. Legen Sie das Menü an Als Nächstes benötigen Sie Schaltflächen für das Menü und die Menüpunkte. Sie können für jeden Punkt eine neue Schaltfläche erstellen. Es reicht aber aus, wie in diesem Beispiel nur eine einzige Schaltfläche zu definieren und diese mehrmals zu verwenden. Die Schaltfläche zur Menüauswahl platzieren Sie so in eine eigene Ebene ➌, dass Sie in beiden Bereichen der Zeitleiste zu sehen ist. Zusätzlich weisen Sie der Schaltfläche folgendes Skript innerhalb des ActionScript-Editors zu (Fenster • Aktionen): on (press, keyPress "k") { gotoAndStop ("PopUp geöffnet"); } Dieses ActionScript bewirkt, dass das geöffnete Menü dargestellt wird, sobald entweder mit der Maus auf die Schaltfläche geklickt oder (K) gedrückt wird. 258 ActionScript . ➍ Üblicherweise öffnen sich Menüs, sobald man mit der Maus darauf klickt (press). Schaltflächen und Menüpunkte reagieren normalerweise erst dann, wenn die Maustaste wieder losgelassen (release) wird. 3. Erstellen Sie die Menüpunkte Die Schaltflächen für die Menüpunkte platzieren Sie innerhalb des Bereichs PopUp geöffnet ➍, da Sie auch nur dort sichtbar sein sollen. Zusätzlich weisen Sie allen Schaltflächen folgende Aktionen zu (Fenster • Aktionen). ➎ on (release, keyPress "b") { // Platzieren Sie hier die auszulösenden Aktionen! gotoAndStop ("PopUp geschlossen"); } Dieses ActionScript bewirkt, dass die gewünschten Aktionen ausgeführt werden und sich das Menü schließt, sobald entweder mit der Maus oder der Tastatur ein Menüpunkt ausgewählt wird. Für den letzten Menüpunkt ➎ Flashforum sieht das Skript dann wie folgt aus. on (release, keyPress "f") { getURL ("http://www.flashforum.de", "_self"); gotoAndStop ("PopUp geschlossen"); } Oberflächenelemente . 259 ➏ 260 4. Entdecken Sie die Probleme mit dem Menü Eigentlich sollte Ihr Menü jetzt funktionieren. Wenn Sie es testen (Steuerung • Film testen), dürften Ihnen aber zwei Probleme auffallen. Erstens: Das Menü lässt sich nicht mit gedrückter Maustaste bediene. Sie müssen immer zuerst das Menü durch einen Klick öffnen und dann einen Menüpunkt anklicken. Und zweitens: Das Menü schließt sich nur, wenn ein Menüpunkt ausgewählt wird. Das erste Problem lösen Sie, indem Sie alle Schaltflächen als Menüelement behandeln. Wenn diese Option aktiviert ist, lässt die gedrückte Schaltfläche zu, dass auch andere Schaltflächen noch auf die gedrückte Maus reagieren können. Diese Option finden Sie im Bedienfeld Instanz für die Schaltflächen (Modifizieren • Instanz oder Fenster • Bedienfelder • Instanz). Auch das zweite Problem lässt sich lösen. Dafür platzieren Sie eine unsichtbare Schaltfläche in eine Ebene unterhalb des geöffneten Menüs. Eine unsichtbare Schaltfläche legen Sie an, indem Sie in einem Schaltflächensymbol nur den aktiven Bereich ➏ verwenden. Dies bewirkt, dass die Schaltfläche zwar auf die Maus reagiert (Aktivzustand), aber nicht sichtbar ist. Für dieses Beispiel sollten Sie einen rechteckigen aktiven Bereich wählen, dessen Größe unwichtig ist, da die Schaltfläche sowieso noch im Film auf die passende Größe skaliert wird. ActionScript . Die unsichtbare Schaltfläche platzieren Sie im Bereich geöffnet innerhalb einer Ebene unter dem Menü. Sie sollten die Schaltfläche möglichst großzügig skalieren, damit der Benutzer das Menü mit einem beliebigen Klick wieder schließen kann. Innerhalb der Instanzeneigenschaften stellen Sie auch diese Schaltfläche auf Als Menüelement behandeln und weisen ihr folgende Aktionen zu: on (press, release) { gotoAndStop ("PopUp geschlossen"); } Dieses ActionScript bewirkt, dass sich das Menü schließt, sobald neben die Menüpunkte (auf die unsichtbare Schaltfläche) geklickt wird. 5. Testen Sie das Menü Jetzt ist das Menü fertig. Da die verwendeten Mausereignisse in der Entwicklungsumgebung aber nicht korrekt funktionieren, müssen Sie den Film testen (Steuerung • Film testen), um alles betrachten zu können. Kombiniert mit animierten Schaltflächen können Sie die Qualität Ihrer Menüs noch weiter erhöhen. Oberflächenelemente . 261 Funktionen und Objekte Weitere nützliche Konzepte von ActionScript Eine Programmiersprache verwendet eine ganzeReihe an Konzepten, die natürlich auch nicht in ActionScript fehlen dürfen. Zwei der wichtigsten und in Flash 5 neuen Funktionen werden in diesem Kapitel beschrieben. In den vorigen Kapiteln haben Sie eine ganze Reihe an Aktionen kennen gelernt. Diese Aktionen werden bei Objekten in Blöcke zusammengefasst, die Flash bei festgelegten Ereignissen (z. B. ein Mausklick) ausführt. Diese Blöcke werden Handler (bearbeitet) genannt. Komplexe »Programmstücke« lassen sich auf eine weitere Art und Weise in Blöcke zusammenfassen: als Funktion. Ebenfalls in den vorherigen Kapiteln haben Sie Objekte kennen gelernt. Ein Objekttyp sind z. B. Filmsequenzen (dann wird aber meistens die englische Bezeichnung Movieclip verwendet). In Flash gibt es aber noch eine ganze Reihe weiterer Objekte; Sie können aber natürlich auch eigene definieren. Funktionen Eine Funktion ermöglicht es, komplexe Skripts immer wieder zu verwenden, ohne sie jedes Mal komplett angeben zu müssen. Eine Funktion erhält einen Namen, über den sie aktiviert wird – ähnlich einem Makro. Genauso ist es auch bei Backbüchern, dort wird irgendwo die FunkZubereitung von Hefeteig erklärt (Funktionsdefinition tionsdefinition), der in den weiteren Rezepten Funkimmer wieder verwendet wird (Funktionsaufruf tionsaufruf): Es muss ja nicht unbedingt in jedem Rezept wieder genau angegeben werden, wie Sie diesen Teig erstellen. Funktionen 262 Funktion Beschreibung Boolean (Ausdruck) Diese Funktion wandelt den angegebenen Ausdruck in einen booleschen Wert um (TRUE oder FALSE). escape(Zeichenkette) Diese Funktion wandelt eine Zeichenkette in die URL-Schreibweise um. Das heißt, Sonderzeichen werden mit einem Prozentzeichen gefolgt von einer hexadezimalen Zahl kodiert. ActionScript . Funktion Beschreibung eval (Ausdruck) Mit dieser Funktion haben Sie die Möglichkeit, den Bezeichner eines Objektes, einer Eigenschaft oder einer Variablen dynamisch zu erzeugen und dann den Wert zu ermitteln. Diese Funktion kann im Gegensatz zu JavaScript keine Anweisungen ausführen. False Diese Funktion steht für »falsch« bzw. »aus«. Mathematisch ist das der Wert 0. GetProperty (Ziel, Eigenschaft) Mit dieser Funktion ermitteln Sie eine Eigenschaft einer Filmsequenz. Die Pfad schreibweise ist aber vorzuziehen (siehe 246, Die Angabe von Zielen). getTimer () Diese Funktion gibt die Zeit in Millisekunden (1/1000 Sekunde) an, die der FlashFilm bereits läuft. getVersion () Diese Funktion gibt Informationen über den Flash Player und das Betriebssystems zurück. In Flash 4 gab es bereits eine entsprechende Variable mit der Bezeichnung $version. isFinite(Zahl) Diese Funktion ermittelt, ob es sich um eine endliche Zahl handelt (TRUE). Unendliche Zahlen (FALSE) können z. B. bei der Division durch null entstehen. isNaN(Zahl) Diese Funktion ermittelt, ob es sich um eine Zahl handelt (TRUE). Andernfalls gibt die Funktion den Wert FALSE zurück. .maxscroll Diese Funktion bestimmt für Textfelder die Anzahl der Zeilen. Das Textfeld wird über den Variablennamen identifiziert. Falls es nur sichtbare Zeilen im Feld gibt, hat varible.maxscroll den Wert eins. Jede weitere Zeile erhöht den Wert um eins. Newline Diese Funktion steht für einen Zeilenumbruch. Number (Ausdruck) Diese Funktion wandelt den angegebenen Ausdruck in eine Zahl um. Im Gegensatz zu parseInt kann diese Funktion auch für den Flash Player 4 verwendet werden. ParseFloat(Zeichenkette) Diese Funktion wandelt die angegebene Zeichenkette in eine Gleitkommazahl um. parseInt(Zeichenkette, basis) Diese Funktion wandelt die angegebene Zeichenkette in eine Gleitkommazahl um. Die Basis ist optional und ermöglicht es, in anderen Zahlenräumen (z. B. hexadezimal) zu arbeiten. .scroll Diese Funktion bestimmt für Textfelder die angezeigten Zeilen. Falls die erste Zeile sichtbar ist, dann hat variable.scroll den Wert 1 (Standard). String (Ausdruck) Diese Funktion wandelt den angegebenen Ausdruck in eine Zeichenkette um. targetPath (Filmsequenz) Diese Funktion ermittelt den Zielpfad einer Filmsequenz in Punktnotation. Für die »alte« Schreibweise mit Schrägstrichen verwenden Sie die Eigenschaft _target. True Diese Funktion steht für »wahr« bzw. »an«. Mathematisch ist das der Wert 1. unescape(Zeichenkette) Diese Funktion wandelt die URL-Schreibweise in eine Zeichenkette um. Das heißt, Prozentzeichen gefolgt von einer hexadezimalen Zahl werden in die entsprechenden Sonderzeichen umgewandelt. updateAfterEvent() Diese Funktion bewirkt, dass der Bildschirm unabhängig von der Abspielgeschwindigkeit neu gezeichnet wird. Diese Funktion wird innerhalb eines onclip-Blocks verwendet. So lässt sich ein Objekt z. B. unabhängig von der Abspielrate weich über den Bildschirm ziehen. Funktionen und Objekte . 263 왘 왘 In Flash gibt es zwei Arten von Funktionen: Funktionen, die in ActionScript vordefiniert sind und überall verwendet werden dürfen. Ihre eigenen Algorithmen und Programme können Sie in Funktionen unterteilen und so Module entwickeln, die Sie an verschiedenen Stellen immer wieder aufrufen. Vordefinierte Funktionen Einige der vordefinierten Funktionen aus Flash 4 sollten nicht mehr in Flash 5 verwendet werden, auch wenn sie noch existieren: 왘 Int: Besser ist es, die Funktion Number zum Umwandeln zu verwenden. 왘 Random: Flash 5 bietet eine Zufallsfunktion als Methode des Math-Objektes, die dem ECMA-Standard entspricht. 왘 Alle Zeichenfolgenfunktionen: In Flash 5 gibt es das Stringobjekt zum Bearbeiten von Zeichenfolgen. In der vorstehenden Tabelle finden Sie alle Funktionen, die in Flash 5 zur Verfügung stehen (mathematische Funktionen finden Sie als Methoden bei dem Math-Objekt, Funktionen zum Bearbeiten von Zeichenketten hat Macromedia als Methoden des Stringobjektes definiert). stunden=datum.getHours(); minuten=datum.getMinutes(); sekunden=datum.getSeconds(); uhrzeit=stunden+":"+minuten+":"+ sekunden; return uhrzeit; } Eine Besonderheit der Funktionen ist, dass sie in derselben hierarchischen Reihenfolge wie Variablen und Objekte liegen. Je nachdem, wo die Funktion initialisiert war, muss sie über z. B. _root.functionsname() , in diesem Beispiel also _root.ermittleUhrzeit(), angesprochen werden. Case-Anweisung Zwar gibt es in ActionScript keine Case-Anweisung, aber mit Hilfe einer selbst definierten Funktion und ein wenig undokumentiertem ActionScript kann das umgesetzt werden: function case(a) { b = (a==8) ? "eight" :(a==9) ? "nine" :(a==10) ? 왗 CD-ROM Selbstdefinierte Funktionen In Flash lassen sich beliebige Aktionen auch als selbst definierte Funktionen zusammenfassen (in Flash 4 gab es mit call eine ähnliche Aktion, die aber nicht mehr verwendet werden sollte). Die folgende ermittelt die Uhrzeit Uhrzeit: "ten" :(a==11) ? "eleven" :(a>11) ? "eleven plus" : "default"; function ermittleUhrzeit () { var datum; trace(b); } var stunden, minuten, sekunden; var uhrzeit; datum=new Date(); 264 Natürlich können Sie eine Case-Anweisung auch durch If-Anweisungen nachbauen. ActionScript . Objekte Neben den Filmsequenzen gibt es seit Flash 5 eine ganze Reihe an Objekten. Falls es kein Objekt für Ihren speziellen Fall gibt, können Sie auch eigene Objekte definieren. Je nach Objekttyp benötigen Sie in den meisten Fällen einen so genannten Konstruktor tor, um ein Objekt zu erzeugen und es dann verwenden zu können. Normalerweise wird dafür die Aktion new verwendet. Die Anweisung datum=new Date(); z. B. erzeugt ein Objekt mit dem Namen »datum«, das ein Datum enthält. So ein Datumsobjekt besitzt Eigenschaften und Methoden, um es sinnvoll einzusetzen. Vordefinierte Objekte Objekt Beschreibung Array Dieses Objekt ermöglicht Ihnen, Felder als Datenstrukturen anzulegen. Ein Feld erzeugen Sie z. B. mit der Aktion feld = new Array(); . Ein neues Element fügen Sie mit feld.push(element); an das Ende des Feldes. Boolean Dieses Objekt stellt boolesche Werte dar. Mit wert = new Boolean(); booleschen Wert. Colors Mit diesem Objekt lassen sich Filmsequenzen einfärben. Über farbe = new Color(filmsequenz); erzeugen Sie eine Instanz des Colors-Objekts, und mit farbe.setRGB( 0xFF0000 ); färben Sie die zugehörige Filmsequenz rot ein. Date Das Date-Objekt ermöglicht den Zugriff auf das Systemdatum und die Uhrzeit. Dieses Objekt entspricht dem ECMA-Standard und wird wie in JavaScript verwendet. Mit heute = new Date(); erzeugen Sie eine neue Instanz mit dem aktuellen Datum, deren Inhalt Sie über ausgabe=heute. toString(); als Zeichenkette in eine Variable namens ausgabe schreiben. Key Das Key-Objekt bietet zahlreiche Methoden, um auf Tastatureingaben zu reagieren. Das KeyObjekt wird nicht instanziiert, sondern direkt über das Schlüsselwort Key angesprochen. Mit Key.isDown(Key.BACKSPACE) ermitteln Sie z. B., ob (Löschen) gedrückt ist. Math Auch das Math-Objekt braucht nicht instanziiert zu werden. Im Math-Objekt ist eine ganze Menge an wichtigen mathematischen Funktionen zusammengefasst. Den Sinus ermitteln Sie z. B. über Math.sin (wert) . Mouse Das Mouse-Objekt bietet nur zwei Methoden, die ohne Initialisierung direkt genutzt werden können. Mouse.hide(); versteckt den Mauszeiger, und Mouse.show(); zeigt ihn wieder an. MovieClip Dieses Objekt bietet zahlreiche Methoden, um Filmsequenzen zu erzeugen, zu beeinflussen oder Informationen von Filmsequenzen zu erhalten. Mit oben.swapDepths( unten ); wird z. B. eine oben liegende Filmsequenz in der z-Reihenfolge mit einer unten liegenden Filmsequenz getauscht. Number Dieses Objekt kann für den Datentyp Zahl verwendet werden und entspricht dem gleichnamigen JavaScript-Element. Object Dieses generische Objekt hilft bei der Erstellung von selbst definierten Objekten. In diesem Objekt ist eine Grundfunktionalität für Objekte zusammengefasst. erzeugen Sie einen neuen Funktionen und Objekte . 265 왘 Objektorientierung Objekt Beschreibung Selection Das Selection-Objekt bestimmt den Fokus bei Feldern, also auch die Tabulatorreihenfolge. Es lässt sich darüber hinaus die Auswahl von Text innerhalb eines Feldes steuern. Für dieses Objekt gibt es keinen Konstruktor, da immer nur ein Feld den Fokus haben kann. Sound Das Sound-Objekt ermöglicht es, Sounds mit ActionScript zu steuern. Zwar stehen keine Methoden zur Synchronisation zur Verfügung, es können aber immerhin die Lautstärke und Balance beeinflusst werden. soundobject = new Sound(); erzeugt einen neuen Sound. Über soundobject.attachSound (soundID); wird ein Sound aus der Bibliothek zugeordnet. Die Lautstärke bestimmt soundobject. setVolume(50);, und das Abspielen beginnt mit soundobject.start();. String An Stelle der Zeichenkettenfunktionen aus Flash 4 sollte das String-Objekt verwendet werden. Dieses Objekt stellt zahlreiche Methoden zur Verwaltung von Zeichenketten bereit. XML Flash 5 ist in der Lage, XML-Dokumente zu verarbeiten. Das XML-Objekt bietet die dafür notwendigen Methoden. XMLSocket Das XMLSocket-Objekt verwenden Sie, um eine kontinuierliche Verbindung zu einem Server aufzubauen. So lassen sich z. B. Chats und Multiuser-Spiele realisieren. Selbst definierte Objekte Mit ActionScript lassen sich nicht nur vordefinierte Objekte verwenden. Sie können auch eigene Objekte erzeugen. Die Objektorientierung in ActionScript basiert wie JavaScript und JScript auf dem ECMA-262-Standard. Alle Objekte besitzen einen Prototypen (eine Vorlage): Es gibt nicht den Unterschied zwischen Klassen und Objekten wie in Java: ActionScript ist klassenlos. In ActionScript gibt es nur Konstruktoren (die somit die Funktion der Klassen übernehmen). Mit einem Konstruktor wird eine Objektinstanz erzeugt. Jede Funktion kann ein Konstruktor sein: Skope (Gültigkeitsbereich) Objekte haben genauso wie Filmsequenzen, Variablen und Funktionen einen Gültigkeitsbereich: Je nachdem, wo sie definiert sind, müssen Sie über die Pfadschreibweise angesprochen werden (siehe Seite 246, Die Angabe von Zielen). 266 function meinObjekt (meinparameter) { this.meineeigenschaft = meinparameter; } // Erzeuge neue Objektinstanz meineInstanz = new meinObjekt(meinwert); Auf selbst definierte Konstruktorfunktionen wird wie auf Filmsequenzen und Variablen zugegriffen. Sie müssen immer den richtigen Pfad zum Gültigkeitsbereich der Funktion angeben. Z. B. können Sie meineInstanz=new _root. meinObjekt(); schreiben. Sounds mit Beatnik abspielen Falls Ihnen die Möglichkeiten zur Soundsteuerung nicht ausreichen, können Sie mit Flash auch Beatnik nutzen. Umfangreiche Informationen finden Sie unter http://www.beatnik. com/software/documentation/music_object/ general-reference/beatnik-and-flash.html. ActionScript . Darüber hinaus gibt es noch die Konstruktoroperatoren »{« und »}«: meineInstanz= {meineeigenschaft:meinparameter};. Diese ge- schweiften Klammern erzeugen eine Instanz, ohne dass extra eine Funktion als Prototyp benötigt wird. Selbst definierte Objekte verwenden In diesem Beispiel wird ein einfaches Objekt erstellt, das die wichtigsten Eigenschaften einer Person aus der realen Welt enthält. function person (vorname, nachname) { this.vorname=vorname; this.nachname=nachname; } on (release) { // Erstelle Instanz chef chef = new person("Bernd", "Besserwisser"); // Erstelle Instanz angestellter angestellter = new person(); angestellter.vorname = "Norbert"; angestellter.nachname = "Nörgler"; } ausgabe="Hallo " + chef.vorname + " " + chef.nachname +"!"; 1. Prototyp erstellen Für selbst definierte Objekte wird als Erstes eine Vorlage benötigt, die auch gleichzeitig als Konstruktor dient. In den meisten Fällen sollten Sie dafür eine Funktion definieren. Die Eigenschaften des Objektes werden direkt in dieser Funktion angegeben. Beispiele finden Sie auch auf der CDROM zum Buch. 2. Instanz erzeugen Um jetzt aus dem Prototypen mehrere Instanzen zu erzeugen, benötigen Sie die Aktion new. Die durch new erzeugte Instanz legen Sie dann in einer Variablen ab. In diesem Skript wird ein Mal ein »Chef« erstellt, dessen Eigenschaften direkt im Konstruktor gesetzt werden. Bei der Instanz für den »Angestellten« werden diese Eigenschaften nachträglich festgelegt. 3. Verwenden des Objektes Auf die Eigenschaften des Objektes greifen Sie in ActionScript über die Punktnotation zu. Wie bei Filmsequenzen geben Sie zuerst den Pfad und dann durch einen Punkt getrennt die Eigenschaft an. Um z. B. den Namen des Chefs in die Variable ausgabe zu schreiben, könnten Sie die nebenstehende Aktion angeben. Funktionen und Objekte . 왘 267 Ein Objekt besitzt aber nicht nur Eigenschaften, sondern – wenn Sie das möchten – auch Methoden. Z. B. könnte es bei einer Person die Eigenschaften Vor- und Nachname geben, wenn aber der gesamte Name benötigt wird, ist es mühsam, ihn immer wieder aus den Eigenschaften zusammenzubauen. Dafür ist eine Methode nützlich: function person (vorname, nachname) { // Eigenschaften this.vorname=vorname; this.nachname=nachname; // Methoden this.name=name; chef = new person("Bernd", "Besserwisser"); ausgabe="Hallo " + chef.name() +"!"; Diese Variante der Methodendefinition hat aber einen Nachteil: Die zur Methode gehörende Funktion muss in jeder Instanz gespeichert werden. Es ist in den meisten Fällen besser, den »Prototypen« um die Funktion zu erweitern, was der objektorientierten Programmierung aus Hochsprachen wie Java oder C++ ähnelt (die objektorientierte Programmierung in Skriptsprachen wie JavaScript oder ActionScript ist im direkten Vergleich sehr gewöhnungsbedürftig): } function name () { function person (vorname, nachname) { return this.vorname+" // Eigenschaften "+this.nachname; this.vorname=vorname; } this.nachname=nachname; } Um die Methode zu verwenden, genügt der einfache Aufruf (zwar können Sie die Methode auch ohne zugehöriges Objekt verwenden, was aber möglichst vermieden werden sollte): // Objekt erweitern person.prototype.name=name; function name () { return this.vorname + " "+this.nachname; } Weitere Informationen Artikel zur Objektorientierung finden Sie unter http://developer.netscape.com/docs/manuals/ js/client/jsguide/obj2.htm (auch Vergleich zwischen Java und JavaScript) und http://www.tuchemnitz.de/urz/java/kba/JSObjekte.html (Vergleich zwischen klassenbasierten objektorientierten Sprachen und klassenlosen objektorientierten Sprachen). 268 This Dem Schlüsselwort this kommt eine große Bedeutung zu, denn mit ihm kann man das aktuelle Objekt selbst referenzieren, ohne seinen Namen zu kennen. Dies ist besonders dann von Interesse, wenn man eine Funktion geschrieben hat, die als Methode eines Objekts dienen soll. Da der Name des Objekts in der Funktion nicht immer bekannt ist, wäre es anders gar nicht möglich, ihn zu verwenden. Stattdessen nutzt man this. Innerhalb einer Methode bezieht sich this auf das aufrufende Objekt selbst. ActionScript . Um die Methoden und Eigenschaften eines Objektes an ein anderes Objekt zu vererben, wird ebenfalls der Prototyp gebraucht: // Erbe vom XML-Objekt Methoden und meinObjekt.prototype=new vaterobjekt(); // Erzeuge eine Objektinstanz Wenn jetzt beim Zugriff auf eine Methode oder Eigenschaft diese nicht gefunden wird, untersucht Flash die Prototypen (__proto__) in hierarchischer Reihenfolge. In dem folgenden Beispiel wird ein neues XML-Objekt erzeugt, das eigene Eigenschaften und Methoden besitzt und zusätzlich vom XML-Objekt erbt. objekt = new meinXML(); // Erzeuge einen neuen Prototypen (ähnlich einer Klasse) function meinXML () { this.load = "Überladene Eigenschaft"; this.neueEigenschaft = "Neue Eigenschaft"; Eigenschaften meinXML.prototype = new XML(); // da die Methode load überladen ist, kann kein XML mehr geladen werden! objekt.load("meinDokument.html"); Wenn Sie in dem obigen Beispiel die neue Definition der Methode load entfernen, geht wieder alles ganz normal. Die Reihenfolge der Vererbung ist entscheidend! Falls das XML-Objekt dem Prototypen hinzugefügt wird, können Methoden überschrieben werden, da diese in der __proto__-Reihenfolge später erscheinen. Würde jedoch dem Prototypen des XML-Objektes eine Methode hinzugefügt, kann diese nicht schon vorhandene Methoden überladen. } Alle Eigenschaften einer Objektinstanz ermitteln Nützlich zum Test ist ein Button mit den folgenden Aktionen, der die Eigenschaften einer Objektinstanz ausgibt: on (release) { // Gib Eigenschaften aus for (i in objektinstanz) { trace (i+":"+ objektinstanz[i]); } } Alle Elemente eines Objektes lassen sich mit diesem Skript ermitteln, da sie in so genannten assoziativen Feldern gespeichert werden. Funktionen und Objekte . 269 Formulare und Datenbanken Zwischen einem Flash-Film und dem Rest der Welt Daten austauschen Falls Sie Daten in einem Flash-Film ermitteln, dann möchten Sie diese sicherlich auch auf irgendeine Art und Weise speichern. Möglicherweise existiert auch eine Datenquelle, deren Inhalt Sie in einem Flash-Film darstellen möchten. Dieses Kapitel zeigt Ihnen, worauf Sie dabei achten müssen. Ein Flash-Film darf neben Animation, Sound und Interaktion auch dynamische Daten enthalten. Diese Daten können in einem FlashFilm erfasst und ausgegeben werden. Beispiele für dynamische Daten in einem Flash-Film sind: Highscore-Listen Diskussionsforen Formulare Warenkörbe Gästebücher Börsenkurse Staumeldungen Wetter Sicherheit Mit den aktuellen Flash Plug-ins ist es aus Sicherheitsgründen leider nicht möglich, innerhalb eines Webbrowsers auf andere Domains zuzugreifen. Ebenfalls können über eine HTTPVerbindung geladene Flash-Filme nicht auf die 270 Grundsätzlich zeigt Flash die Daten an oder nimmt sie entgegen. Dafür werden in den meisten Fällen (falls es sich um reine Texte handelt) Formulare mit Textfeldern benötigt. Flash bietet darüber hinaus noch eine ganze Reihe an Aktionen, mit denen sich die Daten überprüfen, verändern und auswerten lassen. Die Daten wiederum werden meistens an einen Server gesendet, der sie auswertet und ein Ergebnis zurück zum Flash-Film liefert, wo diese Daten visualisiert werden. In manchen Fällen liefert der Flash-Film keine Daten zum Server, sondern bezieht nur Informationen (z. B. um die aktuellen Wetterdaten anzuzeigen). lokale Festplatte zugreifen. Darüber hinaus ist bis jetzt noch kein Weg bekannt, um mit einem Flash-Film Schaden anzurichten (und da viele erfolglos danach gesucht haben, wird es wohl auch keinen geben). ActionScript . In Flash 5 sind neben den Aktionen zum Austausch von Textdaten noch XML-Funktionen hinzugekommen. Zum einen dürfen die Textdaten in einer XML-Struktur vorliegen, was die Kommunikation erleichtern kann, und zum anderen gibt es mit dem XMLSocket-Objekt jetzt auch die Möglichkeit, eine kontinuierliche Verbindung mit einem Server aufzubauen, um z. B. Multiuser-Spiele oder Chats zu realisieren. Felder und Formulare Die Erstellung eines Formulars ist simpel. Alles, was benötigt wird, sind ein paar Textfelder. Damit sich die Daten aber auch von einem Server beziehen oder an einen Server senden lassen, benötigt jedes Feld (egal ob dynamischer Text oder Texteingabe) eine Variable Variable. Bis Flash 5 ist die Hierarchie der Felder mehr oder weniger vom Zufall bestimmt. Die Tabulatorreihenfolge für Textfelder und Schaltflächen wird vom Flash Player durch einen festen Algorithmus bestimmt. Grundsätzlich werden die einzelnen Objekte bezüglich ihrer linken oberen Ecke von links nach rechts und dann von oben nach unten durchlaufen. Die genaue Funktion zur Bestimmung der Reihenfolge wird auf der Website von Macromedia (www.macromedia.com) in der Technote 14075 mit kx * x + ky * y beschrieben, wobei x und y die horizontale und vertikale Koordinate der linken oberen Ecke des Objekts bezüglich der linken oberen des Films beschreiben. Falls die Felder oder Schaltflächen in einer Filmsequenz liegen, wird dies berücksichtigt. Die Werte für kx und ky sind konstant und betragen 1/3 für kx und 2 für ky. Falls ein Objekt verschoben wird, korrigiert Flash die Position in der Tabulatorreihenfolge automatisch. In Flash 5 gibt es mit dem Selection-Objekt endlich eine Möglichkeit, diese Reihenfolge zu beeinflussen. Mit Selection.getFocus(); ermitteln Sie, welches Feld gerade aktiviert ist. Die Aktion gibt den genauen Namen der Variablen inklusive Level an. Mit Selection. setFocus("variable"); setzen Sie den Fokus auf das Feld mit der angegebenen Variablen. E-Mail aus Flash versenden Eine E-Mail lässt sich aus Flash sehr einfach auch ohne CGI senden. Platzieren Sie in ihren Film mehrere Felder, um die Angaben für die E-Mail entgegenzunehmen. In diesem Beispiel sind die Felder mit den Variablen to für den Empfänger, cc für den Empfänger einer Kopie, subject für die Betreffzeile und body für den Inhalt der E-Mail versehen. Erzeugen Sie eine Schaltfläche im Film mit den folgenden Aktionen: on (keyPress "<Tab>") { feldname = Selection.getFocus(); trace (feldname); if (feldname == "_level0.to") { Selection.setFocus("cc"); } else if (feldname == "_level0.cc") { Selection.setFocus("subject"); } else if (feldname == "_level0.subject") { Selection.setFocus("body"); } else if (feldname == "_level0.body") { Selection.setFocus("to"); } } on (release, keyPress "<Enter>") { getURL ("mailto:", "", "GET"); } Formulare und Datenbanken . 271 Dieses Skript bewirkt, dass Flash beim Drücken des Tabulators immer wieder in das nächste Feld springt. Hier muss beachtet werden, dass Flash den Namen des Feldes anhand der zugeordneten Variable inklusive des gesamten Pfades bestimmt. Durch Drücken von Eingabe oder Klicken auf den Button wird dann eine E-Mail gesendet. Falls Sie andere Variablennamen verwenden müssen, können Sie auch folgendes Skript angeben, um die URL zum Versenden von E-Mails genau zu bestimmen: on (release, keyPress "<Enter>") { getURL ("mailto:"+to+"?cc="+cc+ "&subject="+subject+"&body=" +body); } Leider ist das hier vorgestellte Beispiel aber nur als Notlösung geeignet! Wenn der Anwender nämlich kein E-Mail-Programm hat oder das E-Mail-Programm nicht über die Angabe E-Mail Mit getURL lassen sich E-Mails versenden. Die meisten Browser unterstützen das Erzeugen einer E-Mail über die URL. Dass es sich bei der angegebenen Adresse um eine E-Mail handelt, erkennt der Browser an dem vorangestellten »mailto:«. Diesem folgt die Adresse. Optional kann auch der Name des Empfängers angegeben werden. Dann muss die Adresse aber in Klammern (<>) stehen. Je nach Browser lassen sich mit & getrennt noch weitere Angaben wie subject, cc, body usw. machen. Die zusätzlichen Angaben werden durch ein ? von der Adresse getrennt. 272 von »mailto:« aufgerufen wird, funktioniert es nicht. Außerdem werden, je nach Variante, alle Sonderzeichen in der URL-Schreibweise kodiert. Dies führt z. B. dazu, dass Leerzeichen durch ein Plus dargestellt werden. CGI-Kommunikation Flash bot schon in den vorherigen Versionen Möglichkeiten, um direkt auf beliebige URLs und damit auch auf CGI-Skripts zuzugreifen. Die Aktionen aus der Tabelle dürfen Sie in Flash 5 für diese Aufgaben benutzen. Die Aktionen unterscheiden sich in erster Linie durch das als Antwort erwartete Format. Sehr interessant ist, dass alle genannten Aktionen nicht zwangsläufig ein CGI-Skript, sondern auch jede beliebige URL aufrufen können, solange das richtige Ergebnis von dieser URL zurückgeliefert wird. Gerne wird das ge- CGI Das Common Gateway Interface (allgemeine Vermittlungsrechner-Schnittstelle), kurz CGI, ist die Schnittstelle zu Programmen auf einem Webserver. Einmal aufgerufen übertragen diese Programme als Ergebnis meist ein HTMLDokument zurück an den Webbrowser. In Flash haben Sie die Möglichkeit, Informationen zu ermitteln, die Sie in Variablen speichern. Diese Variablen können Sie von einem CGI-Skript auswerten lassen. Die meisten Anfragen im Internet werden über CGI gesteuert. So lassen sich Daten aus einer Datenbank abrufen, Bestellungen bei einem Versandhaus aufgeben oder einfach nur ein Feedback für die Website ermitteln. ActionScript . nutzt, um Texte (z. B. Nachrichten) extern zu halten und bei Bedarf dynamisch in Flash einzuladen. Scrolltext Um Texte dynamisch in einen Flash-Film einzubinden, gehen Sie wie in diesem Beispiel für Flash 5, das der Augsburger Abiturient Jonathan Dörr (www.get-the-flash.de) ursprünglich auf der Basis von Flash 4 im Flashforum (www.flashforum.de) veröffentlicht hatte, vor. Erstellen Sie als Erstes einen dynamischen Text, der im Bedienfeld Textoptionen die Parameter dynamischer Text, Mehrere Zeilen und Wortumbruch erhält. Geben Sie für den Text außerdem eine Variable an. Diese Variable wird als Container für den zu ladenden Text benötigt, das heißt, der Text wird in der Variablen abgelegt. Weisen Sie dem Film im ersten Bild, in dem sich das Textfeld befindet, die folgende Aktion zu, damit der Text eingelesen wird: loadVariables ("text.txt", ""); Flash lädt über diese Aktion die Textdatei, die auch in einem Unterverzeichnis liegen kann (z. B. news/text.txt). Für die Position geben Sie bitte »Ziel« an. Geben Sie sonst nichts weiter an, damit die Zeitleiste, in der sich die Aktion befindet, als Ziel verwendet wird. Am Anfang der Textdatei (hier text.txt) muss dieselbe Variable wie für das Textfeld angegeben werden. Direkt dahinter platzieren Sie durch ein Gleichheitszeichen getrennt den Text. Durch die Variable in der Textdatei weiß Flash, in welches Feld es den Text laden soll. Da die meisten Texte zu groß sind, um vollständig in einem Textfeld angezeigt zu werden, gibt es die Möglichkeit, den Text auch in ein kleineres Feld zu laden und ihn dann mit der Hilfe von Schaltflächen zu scrollen (Heraufund Herunterschieben). Dafür benötigen Sie eine Filmsequenz. Dort werden zwei gleiche Schaltflächen eingefügt, die jedoch unterschiedliche Aktionen erhalten. Eine der Schaltflächen befindet sich oben und ist zum Heraufschieben gedacht. Sie bekommt folgende Aktionen: Dieses Beispiel finden Sie auch auf der CDROM zum Buch. on (press, dragOver, dragOut) { _root.text.scroll = _root.text.scroll-1; } Für das Herunterschieben benötigen Sie dieselben Aktionen, nur mit +1 auf der zweiten Schaltfläche. Damit sich der Text auch bei gedrückter Maustaste herauf und herunter bewegt, wird ein kleiner Trick benötigt, denn normalerweise müsste für jeden Zeilenvorschub mühsam ein- Aktionen für die Kommunikation über CGI Aktion Erwartetes Ergebnis getURL HTML-Dokument loadMovie und loadMovieNum Flash-Film (SWF-Datei) loadVariables und loadVariablesNum Daten vom Typ urlformencoded wie var1=wert1&var2=wert2 usw. Formulare und Datenbanken . 273 Abbildung 1 Bildanordnung für die Scrollleiste zeln geklickt werden. Der Trick ist, dass die Schaltflächen in einem darauf folgenden Bild in einer neuen Ebene wiederholt werden. Dadurch wechselt Flash immer zwischen dem ersten und zweiten Bild hin und her. Da die Schaltflächen die Ereignisse »Drücken«, »Darüberziehen« und »Wegziehen« erhalten haben und – was bis jetzt verheimlicht wurde – als Menüelement behandelt werden (Fenster • Bedienfelder • Instanz), wiederholt Flash die Aktionen bei einer gedrückten Schaltfläche immer wieder. Wenn Sie jetzt die Filmsequenz mit den Schaltflächen im Film platzieren, sollte alles fertig sein. ASP, ColdFusion, JSP, Perl, PHP usw. Als URL können Sie in Flash jederzeit auch ein CGI-Skript angeben. Es ist dabei für Flash unerheblich, welche Sprache auf der Serverseite eingesetzt wird. Für Flash zählt nur, was als Ergebnis vom Server zurück zum Flash-Film ge- 274 sendet wird. Diese Daten müssen das richtige Format haben: Es sollten der MIME-Typ application/x-www-urlformencoded eingestellt sein und die Variablen in der Form var1=wert1&var2=wert2 übergeben werden. Dabei müssen Sie unbedingt darauf achten, dass keine Leerzeichen, Zeilenumbrüche oder HTML-Tags integriert werden. Für den Test hat es sich als nützlich erwiesen, die serverseitigen Skripts erst einmal über ein normales HTMLFormular zu testen. Das gelieferte Ergebnis können Sie sich dann im Browser anschauen und dort auch den Quelltext auf eventuell unerwünschte Zeichen überprüfen. Falls Sie Daten an den Server senden möchten, ist das auch nicht wesentlich anders als das Senden von normalen HTML-Formularen an einen Server. Für alle in der Tabelle »Aktionen für die Kommunikation über CGI« genannten Befehle dürfen Sie zwischen dem Versenden der Variablen mit POST und GET wählen oder auf das Versenden verzichten. Bei der POST-Methode werden die Werte nicht zusammen mit der URL, sondern separat übertragen, wodurch deutlich größere Informationsmengen möglich sind. Bei der GETMethode können Sie die Werte – je nach Webbrowser – in der URL-Zeile ablesen. Flash versendet immer alle Variablen aus der Zeitleiste, auf die sich die Aktion bezieht. Bei den Aktionen loadMovie, loadMovieNum, loadVariables und loadVariablesNum können Sie darüber hinaus auch angeben, wohin das Ergebnis im Flash-Film geladen werden soll. In der Praxis hat sich gezeigt, dass es meistens besser ist, alle Variablen eines Formulars in einer Filmsequenz abzulegen, die dann als Container für die relevanten Variablen dient. So eine Filmsequenz darf auch völlig leer sein, Hauptsache, ist, sie besitzt einen eindeutigen ActionScript . Instanzennamen. So lassen sich die Daten dann gezielt ohne unnötige andere Variablen versenden und empfangen. Datenbanken Da Flash nicht direkt auf Datenbanken zugreifen kann, bleibt Ihnen nichts anderes übrig, als entweder ein Werkzeug wie den Generator zu verwenden oder die gesamte Funktionalität der Datenbankschnittstelle in das CGI-Skript zu verlagern. Damit handelt es sich hier nicht mehr um ein Flash-Problem, sondern um serverseitige Programmierung Programmierung. XML Seit Flash 5 beschränkt sich der Datenaustausch nicht mehr auf einfache Texte im URLFormat: Flash versteht jetzt auch XML. Sie können in Flash XML-Dokumente erzeugen, diese versenden und natürlich auch wieder Probleme! Bei der Kommunikation mit einem Server gibt es eine Menge Probleme, die zum größten Teil durch die verschiedenen Betriebssysteme und Webbrowser verursacht werden. Die POSTMethode funktioniert z. B. nicht mit dem Internet Explorer 4.5 auf Macintosh-Computern Macintosh-Computern, da dieser kein POST beherrscht. Alternativ kann hier entweder GET oder das XMLSocket-Objekt verwendet werden. Ein weiteres Problem ist, dass Flash aus Sicherheitsgründen nur auf die Domain der SWF-Datei zugreifen kann. Falls Sie z. B. keine CGI-Skipts auf Ihrem Server installieren dürfen, können Sie auch keine fremden Skripts unter anderen Domains verwenden. empfangen. Flash unterscheidet zwei Arten der Verarbeitung von XML: Mit dem XML-Objekt können Sie ähnlich wie mit loadVariable Daten zu einer URL schicken und von diesem auch Daten laden. Im Unterschied zu loadVariables müssen die Daten im XML-Format vorliegen. Das XMLSocket-Objekt ermöglicht es, kontinuierliche Verbindungen mit einem Server aufzubauen. Dadurch kann die Antwortzeit des Servers deutlich erhöht werden. Dies ermöglicht z. B. echtzeitgesteuerte Mehrbenutzeranwendungen. XML-Objekt Mit Hilfe des XML-Objektes können Sie XML-Dokumente in Flash einladen XML-Dokumente in Flash erstellen und bearbeiten XML-Dokumente aus Flash an einen Server senden Zwischenzeitlich gab es dann noch einen defekten Flash Player, der an den Anfang der zum Server übertragenen Daten noch ein zusätzliches & platzierte. Dieses kaufmännische Und sollte bei Bedarf auf der Serverseite von Ihrem Skript herausgefiltert werden. Falls die Kommunikation immer noch nicht funktioniert, dann liegt das meistens daran, dass in Flash nicht die richtigen Pfade für die Filmsequenzen und die in ihnen enthaltenen Variablen angegeben sind oder dass das zurückgelieferte Ergebnis (nur bei loadVariables und loadVariablesNum) eventuell Leerzeichen, HTML-Code oder Zeilenumbrüche enthält. Formulare und Datenbanken . 275 Dieses Beispiel finden Sie auch auf der CDROM zum Buch. Die wesentlichen Aktionen zum Laden eines XML-Dokumentes sind immer dieselben. Sie benötigen als Erstes ein Objekt, das die XMLDaten verwaltet und entsprechende Methoden bereitstellt (dokument=new XML( ); ). Damit auf das hoffentlich erfolgreiche Laden eines Dokumentes reagiert werden kann, weisen Sie mit z. B. dokument.onLoad=geladen; dem Objekt eine Funktion zu. Diese Funktion enthält den Programmcode, der ausgeführt werden soll, sobald das Laden geglückt oder fehlgeschlagen ist: function geladen (success) { if (success) { trace ("Erfolg"); } else { trace ("Misserfolg"); } } Jetzt fehlt nur noch, dass das Laden des Dokumentes auch gestartet wird. Dies geschieht z. B. mit der Aktion dokument.load("daten. xml");. Internet Explorer 4.5 auf MacintoshComputern Da XML.load, XML.send und XML.sendAndLoad über HTTP arbeiten, funktionieren sie nicht mit dem Internet Explorer 4.5 auf Macintosh-Computern. XMLSocket arbeitet nicht über HTTP, sondern erzeugt eine kontinuierliche Verbindung über TCP/IP und benötigt einen speziellen, meist in Java oder C++ geschriebenen Server. Aus diesem Grund funktioniert XMLSocket auch mit dem Internet Explorer 4.5. 276 Minibrowser Da HTML-Dokumente von der Struktur her XML-Dateien ähneln, können über diesen Weg auch HTML-Dokumente dynamisch in Flash eingeladen werden. Da Flash 5 in der Lage ist, einfache HTML-Tags darzustellen, lässt sich so ein kleiner Webbrowser auf einfache Art und Weise erstellen. Platzieren Sie in Ihren Film ein Textfeld, das Sie mit der Variable ausgabe verbinden (Fenster • Bedienfelder • Textoptionen). Damit dieses Feld HTML-Formate korrekt darstellen kann, müssen Mehrere Zeilen, HTML und Wortumbruch aktiviert sein. Falls Sie parallel auch noch den Quelltext betrachten möchten, dann erzeugen Sie ein zweites Feld, das sich ebenfalls auf die Variable ausgabe bezieht. Im Unterschied zum ersten Feld muss hier die Option HTML deaktiviert sein. Damit der Benutzer auch eine URL angeben kann, müssen Sie noch ein Textfeld für die Eingabe der Adresse anlegen. Für die Variable bietet sich hier z. B. der Name »url« an. In Ihrem Film benötigen Sie jetzt noch eine Schaltfläche, die das Laden des in der Adressleiste eingegebenen Dokumentes startet. Geben Sie dieser Schaltfläche die folgenden Aktionen: on (release, keyPress "<Enter>") { dokument=new XML( ); dokument.onLoad=geladen; dokument.load(url); } Dieses Skript bewirkt, dass sowohl bei Mausklick als auch bei Eingabe ein neues XMLObjekt erzeugt wird. Das Laden von Inhalt startet dann die Methode load. Nach Abschluss des Ladens wird die Funktion geladen ActionScript . aufgerufen. Diese Funktion erhält den folgenden Code: function geladen (success) { if (success) { ausgabe=dokument.toString(); } else { trace ("No"); } } Durch dokument.toString() wird der Inhalt des Objektes dokument in eine Zeichenkette verwandelt und kann dann in einem Feld angezeigt werden. Grundsätzlich funktioniert dieser Minibrowser. Leider interpretiert Flash aber XMLDateien sehr großzügig. Z. B. werden auch Zeilenumbrüche im Quellcode zwischen den Tags berücksichtigt und als Knoten im XML-Baum abgelegt (die HTML-Beispieldatei auf der CDROM zum Buch ist deshalb nur einzeilig). Auch werden nicht immer alle Inhalte des Objektes über die Methode toString in eine Zeichenkette verwandelt (dies hängt unter anderem auch von der Tiefe des XML-Baums ab). Flash bietet Ihnen zur Lösung dieser Probleme eine ganze Reihe von Methoden. Dies führt aber in den meisten Fällen zu einem deutlich komplexeren ActionScript. XMLSockets Bei dem XMLSocket-Objekt handelt es sich um eine Sammlung von Methoden, mit denen sich direkte Verbindungen über ein Socket mit einem Server aufbauen lassen. Dafür wird ein spezieller Server benötigt. Meistens wird dieser Server in Java (java.net.ServerSocket Klasse) oder C++ (BSD Socket Library) programmiert. Das verwendete Protokoll ist TCP Stream Sockets, nicht UDP. Mit den aktuellen Flash Plug-ins ist es aus Sicherheitsgründen nicht möglich, innerhalb eines Webbrowsers auf andere Subdomains zuzugreifen, was auch für XMLSocket gilt. XMLSocket-Objekte haben darüber hinaus die Beschränkung, dass nur Ports größer oder gleich 1024 verwendet werden dürfen. So wird der Zugriff über telnet, ftp, www, finger usw. verhindert. Alle gesendeten Daten müssen mit einem Nullbyte beendet werden, damit Flash das »Paket« erkennt. Ebenso sendet Flash alle Daten mit einem angehängten Nullbyte. Weitere Informationen zu Sockets finden Sie unter http:// snickers.ek.univ.gda.pl/java/networking/ sockets/index.html. Formulare und Datenbanken . 277 Flashprinting SDK Drucken im Web Mit Flash lassen sich z. B. Wegbeschreibungen, Rechnungen, Bestellscheine, Grußkarten und Produktinformationen aus einer Flash-Anwendung drucken. Mit den Flash Playern (Browser-Plug-in), die seit dem 16. Dezember 1999 zum Download bereitstehen, ist es nun möglich, Dokumente über das Web auf Papier zu bannen. Im Gegensatz zu den sehr unflexiblen Druckmöglichkeiten direkt aus dem Browser oder über JavaScript (window.print()) erfolgt der Ausdruck in hoher Qualität und individuell gesteuert. Die gesamte Druckfunktionalität wurde von Macromedia im Flash Player untergebracht, so dass auch ältere Flash-Filme ohne Änderung von dieser Erweiterung profitieren. Im Kontextmenü eines Flash-Films (rechte Maustaste unter Windows oder (Strg) + Maustaste auf Macintosh-Computern) wird bei dem aktuellen Plug-in der Punkt Drucken angezeigt, über Seit wann kann Flash drucken? Die Druckfunktion steht zurzeit nur auf Macintosh-Computern (Release 4.0.20 des Flash Players) und unter Windows 9x/NT (Release 4.0.25 des Flash Players) zur Verfügung. Seit Flash 5 lassen sich auch aus einem Standalone-Projektor Dokumente auf einem Drucker ausgeben (das britische Unternehmen »3rd eye solution« bietet für Flash 4 den JPrinter unter www.flashjester.de an). 278 den sich jedes Bild des Films ausgeben lässt. Alphakanäle (Transparenzen) werden hier jedoch ignoriert. Auch direkt aus einem Flash-Film lässt sich drucken, indem die Aktion GetURL (Flash 4) mit der Angabe des Parameters print: innerhalb der URL oder die Aktion print (Flash 5) verwendet wird. Falls Alphakanäle verwendet werden, sollte das Dokument als Bitmap ausgegeben werden (printAsBitmap), da die Transparenzen sonst verloren gehen. Flash bietet zahlreiche Möglichkeiten, um das zu druckende Dokument zu gestalten. Der ganze Film oder einzelne Filmsequenzen lassen sich ausgeben und die zu druckenden Bilder und auch die zu druckenden Bereiche können frei festgelegt werden. Macromedia hat die Funktionalität im unter www.macromedia.com/software/flash/open/ webprinting/ erhältlichen »Flash 5 Print Authoring Kit« beschrieben (eine deutsche Version soll mit Erscheinen dieses Buches erhältlich sein). Etwas ausführlicher sind die Erklärungen in dem entsprechenden PDF-Dokument zu Flash 4, das ebenfalls auf der Macromedia Website erhältlich ist. ActionScript . 왗 Abbildung 1 Die Aktion print Drucken mit ActionScript Das Drucken mit ActionScript ist prinzipiell sehr einfach zu realisieren. Je nachdem, mit welcher Flash-Version Sie arbeiten, benötigen Sie folgende Aktionen: 왘 getURL mit der URL print:, um den Inhalt des Flash-Films als Vektorzeichnung zu drucken (Transparenzen gehen verloren). Diese Aktion funktioniert sowohl in Flash 4 als auch in Flash 5. 왘 getURL mit der URL printAsBitmap:, um den Inhalt des Flash-Film als Bitmap zu drucken (Transparenzen bleiben erhalten, es wird aber mehr Arbeitsspeicher benötigt). Diese Aktion funktioniert sowohl in Flash 4 als auch in Flash 5. 왘 Die Aktion print ist erst seit Flash 5 möglich. Für diesen Befehl können Sie direkt angeben, ob Sie den Film als Vektorzeichnung ohne Transparenzen (print) oder als Bitmap (printAsBitmap) ausgeben möchten. Falls Sie nicht den gesamten Film, sondern nur eine Filmsequenz drucken möchten, dann geben Sie bei der getURL-Variante für den Para- meter Fenster den Instanzennamen der Filmsequenz an. Bei der Aktion print wählen Sie im Feld Position entweder eine Stufe oder eine Filmsequenz als Ziel. Druckbereich einschränken Normalerweise druckt Flash alle Bilder einer Zeitleiste oder bietet zumindest alle Bilder im Drucken-Dialogfenster zur Ausgabe an. Sie können die Ausgabe aber auf spezielle Bilder beschränken oder ganz verhindern. Alles, was Sie dafür tun müssen, ist: 왘 Verwenden Sie irgendwo in der Zeitleiste die Bildbezeichnung (Fenster • Bedienfelder • Bild) »!#p«, um das Drucken des Films oder der Filmsequenz über das Kontextmenü zu verhindern. Die Ausgabe mit Hilfe der Aktionen ist weiterhin möglich. 왘 Platzieren Sie in allen Bildern, die gedruckt werden sollen, die Bildbezeichnung »#p«. Alle Bilder ohne diese Bildbezeichnung werden nicht mehr zur Ausgabe angeboten. Dies gilt sowohl für das Kontextmenü Dru- Flashprinting SDK . 279 왘 cken als auch für die entsprechenden Aktionen (z. B. print). Wenn Sie weder »!#p« noch »#p« verwenden, wird die gesamte Zeitleiste zum Druck angeboten, falls Sie die entsprechenden Aktionen verwenden oder der Betrachter im Kontextmenü den Punkt Drucken wählt. Dies gilt auch für Filme, die vor der Einführung der Druckfunktion erstellt wurden. Druckgröße beeinflussen Sie bestimmen nicht nur, welche Bilder ausgegeben werden können, sondern auch in welcher Größe diese Ausgabe erfolgen soll. Dafür stehen vier Einstellungen bei der Aktion print zur Verfügung, die in ähnlicher Form auch bei der Flash 4-Variante mit getURL eingesetzt werden können: 왘 Begrenzungsrahmen • Film (bmovie): In diesem Fall wird jedes Bild im Verhältnis zur Bühne gedruckt. Dies entspricht den Aktionen getURL ("print:"); und getURL ("printAsBitmap:"); in Flash 4. 왘 Begrenzungsrahmen • Bild (bframe): Bei dieser Einstellung wird der Inhalt jedes Bildes so groß wie möglich ausgegeben. Dies entspricht den Aktionen getURL ("print: Num oder nicht Num Alle Aktionen, bei denen Sie ein Ziel angeben können, lassen sich auf zwei Arten verwenden und werden dann auch unterschiedlich geschrieben: einmal mit Num und einmal ohne Num. Das Num bedeutet, dass Sie als Ziel keine Filmsequenz, sondern eine Stufe (engl. Level) angeben. Alternativ können Sie z. B. zum Drucken anstatt printAsBitmapNum (0, "bmovie"); auch die Aktion printAsBitmap ("_level0", "bmovie"); angeben. Die Aktion 280 #bframe"); und getURL ("printAsBitmap: 왘 왘 #bframe"); in Flash 4. Begrenzungsrahmen • Max. (bmax): Bei dieser Einstellung ermittelt Flash die maximale Größer aller zu druckenden Bilder. Diese werden dann alle so groß wie möglich ausgegeben, wobei die Proportionen und das Verhältnis zueinander gewahrt bleiben. Dies entspricht den Aktionen getURL ("print:#bmax"); und getURL ("printAsBitmap:#bmax"); in Flash 4. Durch die Bildbezeichnung »#b« geben Sie sowohl in Flash 4 als auch in Flash 5 an, welcher Bereich so groß wie möglich ausgegeben werden soll. Sie können diese Bildbezeichnung nur ein Mal in einer Zeitleiste verwenden. In diesem Bild erstellen Sie dann einen Kasten, der als Begrenzungsrechteck (engl. Boundingbox) dient. Dies entspricht der Angabe von »#bmax«, bei der Flash dieses Begrenzungsrechteck automatisch ermittelt. Sehr hilfreich ist in beiden Fällen der Zwiebelschichteneffekt, über den die Anordnung der Objekte und des Begrenzungsrechtecks komfortabel durchgeführt werden kann. printAsBitmap ("0", "bmovie"); hingegen sucht nach einer Filmsequenz mit der Bezeichnung »0«. Folgende Aktionen sind von diesem Verhalten betroffen: 왘 print 왘 printAsBitmap 왘 loadMovie 왘 loadVariables 왘 unloadMovie ActionScript . Filmsequenzen zum Drucken laden Falls Sie eine Filmsequenz drucken möchten, die extra zu diesem Zweck eingelesen wird (Aktion loadMovie), dann funktioniert das Drucken nur, wenn die Filmsequenz komplett geladen ist. Dies überprüfen Sie, indem sichergestellt wird, dass die Eigenschaft _totalframes größer als null (sonst existiert diese Filmsequenz nicht) und _framesloaded gleich _totalframes ist: Für den Fall, dass die Zeitleiste (Ziel oder Stufe) nicht existiert, wird der Inhalt der Eigenschaft _totalframes vorsichtshalber mit der Funktion Number in eine Zahl konvertiert. Dies führt dazu, dass Flash das mögliche Ergebnis undefined in null umwandelt. on (release) { if (Number(container._totalframes) == 0 and container._framesloaded ==container. _totalframes) { printAsBitmap ("container", "bmovie"); } } Flashprinting SDK . 281 Spiele Unterhaltung für das Web mit Flash erstellen Der Markt für Internetspiele boomt. Immer mehr Firmen versuchen die Attraktivität einer Website durch interaktive Anwendungen und Spiele zu verstärken. Die Vorteile liegen auf der Hand: Die Kundenbindung wird erhöht, es lohnt sich, eine Site regelmäßig zu besuchen. In diesem Kapitel werden einige Techniken der Spieleentwicklung mit Flash vorgestellt. 왗 Finanzierung 282 Nicht nur Freelancer und Agenturen erstellen Spiele, um ihre eigenen Fähigkeiten zu demonstrieren und für sich selber zu werben. RAND Interactive (http://www.randinteractive. com/) z. B. hat auf der eigenen Site durch Spiele wie Meteor (auch bekannt als Asteroids) kurzweiligen Mehrwert geschaffen. Immer häufiger setzen Firmen Spiele auf ihrer Website ein, um Kunden anzulocken oder zu binden. Adressen für gute Spiele verbreiten sich schnell unter den Angehörigen der Netzgemeinschaft und erhöhen so die Besucherzahl: Schon manch ein Entwickler wurde von dem zusätzlichen Traffic und der darauf folgenden Rechnung seines Providers überrascht. Um die Kosten eines Webspiels zu begleichen, gibt es verschiedene Modelle. Zum einen finanzieren die Firmen die Entwicklung eines Spiels für ihre Website. Dabei kann es sich um eine Lizenzierung mit angepassten Grafiken, aber auch um eine Neuentwicklung handeln. Zum anderen entstehen immer mehr Portale, die wie eine virtuelle Spielhalle agieren. Das zurzeit bekannteste Portal shockwave. com wird direkt von Macromedia betrieben (http://www.shockwave.com/). In diesen Fällen wird das Spiel meist pauschal bezahlt, oder der Entwickler erhält eine von der Anzahl der Benutzer abhängige Provision. Um die Kosten gering zu halten, ist auch ein Sponsoring interessant: Mehrere Firmen finanzieren das Spiel über »Bandenwerbung«. Die Produkte oder Logos der Firma werden geschickt im Spiel platziert oder sogar in die Handlung eingebaut. Bei der Konzeption eines Spiels darf nicht vergessen werden, dass das Web ein sehr schnelllebiges Medium ist und sich die Technologien ständig verändern: Eine kostspielige und langwierige Produktion – wie es sonst bei Computerspielen üblich ist – lässt sich in den seltensten Fällen umsetzen. Nicht nur wegen dem meist knappen Budget und der kurzen Entwicklungszeit sind die meisten Spiele recht einfach gestrickt und erinnern eher an das Pong-Spiel der ersten Spielekonsolen als an mehrere hundert Megahertz schnelle Computer. Auch die zur Verfügung stehenden Technologien begrenzen die Möglichkeiten. ActionScript . Um Spiele für das Web zu produzieren, können Skriptsprachen wie VBScript oder JavaScript (inklusive dynamischem HTML) verwendet werden. Auch mit der Programmiersprache Java lassen sich ansprechende Spiele wie z. B. Race3D auf der WebGames-Site (http://www.webgames.de/) programmieren. Immer häufiger kommen jedoch Autorensysteme wie Flash und Director zum Einsatz. Ein Beispiel für gelungene Flash-Spiele ist »Cheops« für den österreichischen Rundfunk (ORF) von der Agentur source (http://www. orf.at/cheops/game.htm). Dieses Spiel zeichnet sich durch zahlreiche kleine knifflige Rätsel aus. Echtes Spielhallen-Feeling kommt bei Spielen wie Gigablast (http://www.gigablast. com/) von dem Krefelder Patrick Thiel (siehe auch Screen 02/00) und Actionfighter (http:// www.actionfighter.com/) von »Spooky and the Bandit« auf. Ruhigere Gemüter kommen bei dem liebevollen Adventure »Leo´s großer Tag« (http://www2.pepworks.com/pepworks/ pep.html) auf ihre Kosten. Die amerikanischen Firmen smashingideas (http://www.smashingideas.com/) aus Seattle und ezone (http://www.ezone.com/) aus San Franzisco zeigen neben zahlreichen Spielen, dass man mit Flash und Director auch Zeichentrickfilme zur Unterhaltung in das Netz stellen kann. Zur ihrem Repertoire gehören die Peanuts, SouthPark und der Pechvogel Lenny Loosejocks. Diese Filme finden sich zum Teil auch auf Macromedias Spieleportal www. shockwave.com wieder. Zwar kein Spiel, aber doch ein technisches Highlight ist die Site »Mono Craft« des Japaners Yugop unter http://www.yugop.com/ shocked/index.html. Hier sind zahlreiche interessante Effekte mit Flash realisiert worden, die das Betrachten auf »spielerische Art und Weise« zu einem Erlebnis machen. Spieleentwicklung mit Flash Das auf Vektoren basierende Autorensystem Flash bietet neben der weiten Verbreitung zahlreiche Vorteile bei der Entwicklung von Webspielen: 왘 Das nötige Plug-in ist auf zahlreichen Plattformen verfügbar. 왘 Falls erforderlich, benötigt das Plug-in nur ca. 300 kByte beim Download. 왘 Flash-Filme werden auf allen Rechnern identisch dargestellt. 왘 Die Dateigröße der fertigen Anwendungen kann sehr klein gehalten werden. 왘 Die Anwendungen lassen sich auch auf CDROM/Diskette als Stand-alone-Projektoren und als Bildschirmschoner vertreiben. Zeichentrickfilme, einfache Spiele und Adventure konnten schon mit früheren Versionen von Flash erstellt werden. Aufwändigere Spiele sind aber erst mit der Einführung der Programmiersprache ActionScript in Version 4 in vertretbarem Rahmen realisierbar geworden. Die wesentlichen Elemente Elemente, die innerhalb komplexerer Spiele immer wieder benötigt werden, sind: Beispiele finden Sie auf der CD-ROM zum Buch. Wenn Sie mit Flash auf Grenzen stoßen … … dann ist die Kombination von Flash und Director gerade für die Spieleentwicklung im Web sehr interessant. Durch Flash bleibt die Dateigröße auch bei umfangreichen Grafiken klein, und Director bietet deutlich mehr Möglichkeiten und mit Lingo eine komfortable Programmiersprache (siehe 356). Spiele . 왘 283 왘 왘 왘 왘 eine Steuerung (z. B. eines Raumschiffes) eine Kollisionskontrolle zwischen den einzelnen Objekten (die dann auch Sprites genannt werden) die dynamische und zufällige Erzeugung von Hindernissen oder Gegnern eine Punktezählung mit Highscore Steuerung von Objekten Objekte lassen sich in Flash sowohl über die Maus als auch mit der Tastatur bewegen. Interessant ist, dass sich die Bewegung auf zwei verschiedene Arten realisieren lässt: durch Animation und durch Programmierung. Die Animation hat den Vorteil, dass sich eine normale Tween-Animation mit einem beliebigen Pfad verwenden lässt. Manchmal ist es aber einfacher, nur die x- und y-Koordinaten eines Objektes mit ActionScript zu beeinflussen. Maus Wenn der Benutzer das Eingabewerkzeug beim Surfen nicht wechseln soll oder keine Tastatur zur Verfügung steht (Set-Top-Boxen), dann ist eine Maussteuerung der Tastatureingabe vorzuziehen. Solange das Objekt direkt unter der Maus liegen soll, ist die Lösung sehr einfach. Platzieren Sie das Objekt in eine Filmsequenz, die Sie über die Aktion startDrag an den Mauszeiger binden. Die notwendige Aktion können Sie direkt in einem Schlüsselbild platzieren. Eine weitere Alternative ist, die Aktion als Objektaktion bei einer Filmsequenz zu verwenden (dies hat den Vorteil, dass alle auf die Filmsequenz bezogenen Aktionen auch direkt bei ihr platziert sind und keine Pfade angegeben werden müssen). Das genaue Skript könnte dann so aussehen: 284 onClipEvent (load) { this.startDrag(true,100,20,100,280); } In diesem Beispiel wird das Objekt sogar nur auf einer vertikalen Linie relativ zum Mauszeiger verschoben, da die Ziehoperation (engl. to drag) eingeschränkt (engl. constraint) ist. Achten Sie darauf, die Option Maus zentrieren (engl. lockcenter) zu verwenden, andernfalls wird das Objekt um einige Pixeln versetzt zum Mauszeiger bewegt. Da die Aktion direkt im Objekt innerhalb der Objektaktionen ausgeführt wird, muss noch ein passendes Ereignis angegeben werden: Das Ereignis load (Laden) tritt immer dann ein, wenn eine Filmsequenz im Film erscheint – mit unload gibt es auch ein Ereignis für das Verschwinden einer Filmsequenz. Ein kleines bisschen schwieriger wird es, wenn das Objekt dem Mauszeiger nur folgen soll. In diesem Fall muss der Abstand zum Mauszeiger berechnet und das Objekt, abhängig von einem Faktor, dem Mauszeiger angenähert werden. Diese Aktionen sollten in Flash 5 als Filmsequenzaktion (Objektaktion für eine Filmsequenz) angegeben werden. Da Sie auf Seite 252, Mausverfolger, bereits ein Beispiel finden, ist an dieser Stelle die kürzeste mögliche Schreibweise als Alternative angegeben: onClipEvent (enterFrame) { _x+=_xmouse/8; _y+=_ymouse/8; } Tastatur Um ein Objekt mit der Tastatur zu steuern, benötigen Sie zum einen das zu steuernde Objekt und natürlich die Steuerung. Das Objekt (in diesem Beispiel ein Auto) muss als Filmsequenz ActionScript . verwendet werden. Die Filmsequenz wird dann eig per ActionScript bewegt. Um auf Tastaturer Tastaturereig eig-nisse zu reagieren, gibt es zwei Wege: Entweder Sie erstellen eine Schaltfläche, oder Sie platzieren die Aktionen direkt auf der Filmsequenz. Die erste Variante funktioniert auch noch in Flash 4, die zweite ist erst seit Flash 5 möglich. Für die Flash 4-Variante ist es erforderlich, dass die Filmsequenz im Bedienfeld Instanz einen Namen erhält. Nur so lässt sie sich identifizieren und beeinflussen. Damit Flash auf die Tastatureingabe reagieren kann, legen Sie eine Schaltfläche mit dem folgenden Skript an: on (keyPress "<Up>") { // normale Schreibweise auto._y=auto._y-5; } on (keyPress "<Down>") { diesen Fällen bietet es sich an, eine völlig leere, unsichtbare Schaltfläche zu erstellen. Alle leeren Symbole werden auf der Bühne in der Entwicklungsumgebung von Flash mit einem kleinen Kreis visualisiert, der im fertigen Film nicht sichtbar ist. Über diesen Kreis können die Instanzeigenschaften inklusive der Aktionen bei Schaltflächen festgelegt werden. Während der Entwicklung ist es aber geschickter, in eine unsichtbare Schaltfläche eine einfache Grafik zu platzieren, da die Schaltfläche dann sichtbar und somit leichter bearbeitbar ist. Bevor der Film dann endgültig fertiggestellt wird, sollten Sie den Inhalt der Schaltfläche natürlich wieder löschen. Die Flash 5-Variante ist etwas eleganter, da keine separate Schaltfläche notwendig ist. Das Skript braucht nur direkt als Objektaktion auf die Filmsequenz gepackt zu werden: // kurze Schreibweise auto._y+=5; } onClipEvent (keyDown) { if (Key.isDown(Key.RIGHT)) { on (keyPress "<Right>") { // normale Schreibweise this._x=this._x+5; } else if (Key.isDown(Key.LEFT)) { auto._x=auto._x+5; } this._x=this._x-5; } else if (Key.isDown(Key.UP)) { on (keyPress "<Left>") { // kurze Schreibweise this._y=this._y-5; } else if (Key.isDown(Key.DOWN)) { auto._x-=5; } this._y=this._y+5; } } Um Tastaturereignisse wie das Drücken der Leertaste in Flash 4 verarbeiten zu können, werden Schaltflächen benötigt (in Flash 5 können Sie alternativ auch Objektaktionen und das Key-Objekt verwenden). Häufig möchte man aber nicht, dass diese Schaltflächen in irgendeiner Form sichtbar sind oder auf die Maus reagieren: Schon das Erscheinen eines Handmauszeigers kann unerwünscht sein. In In Flash 5 kann auf diese Art sogar überprüft werden, ob eine Taste noch gedrückt oder bereits losgelassen wurde: onClipEvent (keyDown) { taste=Key.getCode(); } onClipEvent (keyUp) { Spiele . 285 taste=null; } onClipEvent (enterFrame) { if (taste==Key.RIGHT) { this._x=this._x+5; } else if (taste==Key.LEFT) { this._x=this._x-5; } else if (taste==Key.UP) { this._y=this._y-5; } else if (taste==Key.DOWN) { this._y=this._y+5; } } Umgekehrt kann die automatische Tastenwiederholung auch ignoriert werden. So wird sichergestellt, dass der Benutzer bei jedem Schritt einzeln drücken muss: Mit den bis hierhin gezeigten Methoden bewegen Sie ein Objekt immer in festen Schritten über den Bildschirm. Dies kann natürlich noch mit ein wenig Mathematik und den entsprechenden trigonometrischen Funktionen verbessert werden, um eine natürlichere Bewegung zu erhalten. Es gibt aber einen einfacheren Weg, der sich auch mit einem Minimum an ActionScript umsetzen lässt: Verwenden Sie einfach eine Tween-Animation und steuern Sie diese. Die Schrittweite einer Bewegung lässt sich so komfortabel durch das bloße Einfügen einiger Bilder anpassen. Der genaue Weg der Bewegung wird durch eine Bewegungsführung festgelegt. Die Steuerung des Objektes wird erreicht, wenn der Abspielkopf in dem Tweening ein Bild vor oder zurück gesetzt wird. Das entsprechende Skript könnte dann so aussehen: onClipEvent (keyDown) { if (not gedrueckt) { if (Key.isDown(Key.RIGHT)) { onClipEvent (keyDown) { if (Key.isDown(Key.RIGHT)) { this._x=this._x+5; } else if (Key.isDown(Key.LEFT)) nextFrame (); } else if (Key.isDown(Key.LEFT)) { { prevFrame (); this._x=this._x-5; } else if (Key.isDown(Key.UP)) { this._y=this._y-5; } else if (Key.isDown(Key.DOWN)) { } } onClipEvent (load) { // stoppe bewegung am anfang stop (); this._y=this._y+5; } } gedrueckt=true; } Kollisionskontrolle } onClipEvent (keyUp) { gedrueckt=false; } 286 Auch bei der Kollisionskontrolle gibt es verschiedene Wege, die zum Ziel führen: 왘 Schaltflächen können zur Erkennung einer Kollision verwendet werden, wenn ein Ob- ActionScript . 왘 왘 jekt mit der Maus gesteuert wird, was auch in Flash 4 funktioniert. Die Position von Objekten kann verglichen werden, was auch in Flash 4 funktioniert. Diese Variante ist aber sehr aufwändig. Die in Flash 5 neue Methode hitTest überprüft, ob zwei Objekte sich treffen oder ob ein Punkt in einem Objekt liegt. Schaltflächen Solange ein Objekt mit der Maus gesteuert wird, können Sie die Kollision recht einfach über Schaltflächen erreichen. Verwenden Sie für die Hindernisse, die mit dem mausgesteuerten Objekt kollidieren können, einfache Schaltflächen. Sie können auch unsichtbare Schaltflächen verwenden. Entscheidend dabei ist der aktive Bereich Bereich, der bestimmt, wo die Kollision stattfinden kann. Ein Feature (»It´s not a bug, it´s a feature!«) von Flash ist, dass Schaltflächen nicht immer auf die Mausposition reagieren. Bei Objekten, die mit startDrag an den Mauszeiger gebunden werden, ist der Mittelpunkt des Objektes ausschlaggebend und nicht die Mausposition. Wenn die Bewegung des Objektes eingeschränkt wird (startDrag(true,100,20,100, 280)), dann reagiert die Schaltfläche nur auf den Mittelpunkt des Objektes und nicht auf die Position der Maus. Vergessen Sie nicht, als Ereignis für die Schaltfläche Darüberrollen (engl. Rollover) zu verwenden. kann. Die zweite Variante sollte verwendet werden, wenn mehrere Objekte miteinander kollidieren können. Ob Sie bei der Kollisionskontrolle die x- und y-Koordinaten vergleichen, die so genannten Boundingboxen (umschließendes Rechteck) ermitteln oder einfach nur den Abstand berechnen, hängt dabei vom Einzelfall ab. In allen Fällen benötigen Sie die Eigenschaften für die Position (_x und _y ), in manchen Fällen auch die Größe der Objekte (_width und _height). In diesem Zusammenhang sind Trace-Aktionen wie Trace (objekt._x); sehr nützlich. Mit diesen Aktionen kann man beim Testen die ermittelten Werte ausgeben und überprüfen. Hittest Die Aktion hitTest kann auf zwei Arten verwendet werden: Entweder Sie überprüfen, ob ein Punkt in einem Objekt liegt oder ob sich zwei Objekte überschneiden. Bei der zweiten Variante berücksichtigt Flash immer die Boundingbox (das kleinste umschließende Rechteck). Die erste Variante kann entweder anhand der Boundingbox oder der Form die Kollision überprüfen. Das folgende Skript überprüft, ob der Mauszeiger (oder bei startDrag der Mittelpunkt des an den Mauszeiger gebundenen Objektes) innerhalb der Filmsequenz liegt: onClipEvent (enterFrame) { if (this.hitTest( _root._xmouse, Position vergleichen Wenn die Position der Objekte miteinander verglichen wird, kann jedes Objekt diesen Vergleich selbst durchführen durchführen, oder aber es wird eine Liste mit allen Objekten verwaltet. Die erste Variante bietet sich an, wenn ein einzelnes Objekt nur mit einem anderen kollidieren _root._ymouse, true )) { // Kollision _parent.gotoAndPlay(1); _root.punkte = parseInt(_root.punkte)+10; } } Spiele . 287 Natürlich können Sie für die Kollisionsüberprüfung auch die Koordinaten anderer Objekte an Stelle der Mausposition angeben. Und wenn Sie nicht die Form, sondern die Boundingbox des Objektes berücksichtigen möchten, geben Sie this.hitTest( x, y, false ) für die Bedingung an. Um die Kollision zweier Objekte zu überprüfen, bietet sich meistens aber eher die Variante this.hitTest( filmsequenz ) an, wobei filmsequenz das zweite an der eventuellen Kollision beteiligte Objekt ist. Bei dieser Variante berücksichtigt Flash aber leider nur die Boundingboxen beider Objekte. Das folgende Skript überprüft die Kollision und schaltet davon abhängig die Sichtbarkeit aus: onClipEvent (enterFrame) { if ( this.hitTest(_root.objekt)) { Objekte dynamisch erzeugen Ein Spiel wird in den meisten Fällen erst dann richtig interessant, wenn der Zufall eine Rolle spielt. Gerade die Hindernisse sollten zufällig erscheinen oder zumindest abhängig vom Spielablauf generiert werden. Um Objekte zufällig auf dem Bildschirm zu platzieren, benötigen Sie die Methode Math. random () des Math-Objektes. In Flash 4 gab es die Funktion random, die zwar noch unterstützt wird, aber nicht mehr verwendet werden sollte. Math.random () ermittelt einen zufälligen Wert (eine so genannte Pseudozufallszahl) zwischen 0 und 1. Falls Sie einen Wert in einem anderen Zahlenbereich benötigen, berechnen Sie diesen. Um ein Objekt innerhalb der Bühne zu platzieren, verwenden Sie z. B. folgendes Skript: this._visible=false; } } onClipEvent (load) { this._x=Math.ceil ( Math.random ()*550); this._y=Math.ceil ( Math.random ()*400); Wer überprüft die Kollision? In den meisten Fällen haben Sie ein Objekt (z. B. ein Raumschiff), das vom Benutzer gesteuert wird und mit zahlreichen anderen Objekten (z. B. Asteroiden) zusammenstoßen kann. Dann ist es am geschicktesten, dass die Asteroiden jeweils überprüfen, ob sie mit dem Raumschiff kollidieren. Wenn das Raumschiff überprüfen soll, ob es mit den Asteroiden kollidiert, ist der Programmieraufwand deutlich höher: Das Raumschiff weiß ja nicht, welche Objekte es noch gibt bzw. müsste diese in einer Liste verwalten. Die Objekte wiederum wissen, dass es genau ein Raumschiff gibt, mit dem sie kollidieren können. 288 } Es reicht in den meisten Fällen aber nicht aus, Objekte zufällig zu platzieren, auch die Anzahl der Objekte soll zufällig oder zumindest dynamisch sein. Auch dafür gibt es wieder zwei Möglichkeiten: Entweder es existiert bereits eine Filmsequenz, die nur noch dupliziert werden muss, oder Sie nutzen die in Flash 5 neue Möglichkeit, Filmsequenzen zur Laufzeit zu erzeugen. Die erste Variante erfordert nur, dass bereits eine Filmsequenz mit Instanzennamen existiert (diese Filmsequenz kann auch unsichtbar sein). Anhand dieser Filmsequenz werden dann mit ActionScript . der Aktion duplicateMovieClip weitere Objekte generiert. Das komplette Skript könnte dann so aussehen: for (i=1; i<=10; i++) { vorlage.duplicateMovieClip( "Instanz"+i, i ); } Falls Sie keine Vorlagen für die zu erzeugenden Objekte im Film platzieren möchten, dann benötigen Sie die neue Aktion attach (hierbei handelt es sich um eine Methode des MovieClip-Objektes). Damit sich ein Objekt im Film dynamisch einfügen lässt, muss es sich um eine Filmsequenz handeln. Diese Filmsequenz muss in der Bibliothek über die Verknüpfung exportiert werden. Der hier verwendete Bezeichner wird dann auch bei der Aktion attach benötigt: Punktezählung Die Punktezählung ist eine leicht zu realisierende Sache. Das einzige Problem ist, dass Flash keinerlei globale Variablen kennt. Mit einem einfachen Trick kann aber auch das realisiert werden: Erstellen Sie eine Variable, die im ganzen Film gültig ist. Diese Variable legen Sie am besten im Hauptfilm an. So kann die Variable jederzeit über _root.variablenname (_root bedeutet, dass die Variable im Hauptfilm liegt) angesprochen werden. Neue Punkte würden Sie dann über _root.punkte=_root.punkte+10; vergeben. Falls Sie die Punkte in einem Feld ausgeben, dürfen Sie nicht vergessen, den Inhalt bei jeder Operation explizit in eine Zahl umzuwandeln. Dafür stehen die Funktionen parseInt() und Number() zur Verfügung. Das fertige Skript könnte so aussehen: on (rollOver) { for (i=1; i<=10; i++) { // Kollision _root.attachMovie( "vorlage", _root.punkte=parseInt( "Instanz"+i, i ); _root.punkte)+10; } gotoAndPlay (1); } Falls Sie beim Duplizieren Objektaktionen direkt auf der Filmsequenz platziert haben, werden diese auch vervielfältigt. Da Sie beim dynamischen Einfügen auf das Symbol in der Bibliothek zugreifen, müssen hier alle Aktionen innerhalb des Symbols liegen! Was jetzt nur noch fehlt, ist ein Highscore Highscore. Dieses wird meist zentral auf einem Server verwaltet, so dass der Punktestand im einfachsten Fall nur per loadVariablesNum ("http://www. meinserver.de/cgi-bin/highscore.pl", 0, "POST"); übertragen werden muss. Ein CGI-Skript zum Speichern von Higscorelisten namens ScoreKeeper finden Sie unter http://www.k2w.f2s.com/software. Dieses Skript ist in Perl geschrieben und sollte mit den meisten Webservern, sofern sie dort CGIs verwenden dürfen, harmonieren. Spiele . 289 Fehlersuche … oder Käfer entfernen (engl. debugging)! Gute Programme – und damit natürlich auch ihre Entwickler – zeichnen sich nicht nur durch herausragende Ideen und effizientes Arbeiten, sondern auch durch die Qualität des Codes aus. Damit Ihre Skripts gut wartbar sind, sollten Sie diese dokumentieren dokumentieren. Immer genau dann, wenn man nicht damit rechnet, werden nämlich noch Änderungen – manchmal Monate später – erforderlich. Wenn Ihre Skripts dann gut dokumentiert sind, werden Sie die Änderungen schnell durchführen können. Die gleichen Regeln gelten für die Arbeit im Team, schließlich müssen hier Ihre Kollegen oder Kunden den Programmcode verstehen können. Eine der wichtigsten Regeln ist, dass Sie zahlreiche Kommentare verwenden (übrigens schreibt man Kommentare möglichst im Imperativ, da diese so prägnanter und verständlicher sind). Kommentare (engl. Comments) stehen als Aktion im ActionScript-Editor zur Verfügung. Falls Sie im Expertenmodus arbeiten, können Sie auch mehrzeilige Kommentare verwenden, die mit /* beginnen und mit */ enden sollten. Flash wandelt mehrzeilige Kommentare im normalen Modus in normale Kommentare um. Schlüsselwörter, die nicht für Bezeichner verwendet werden sollten 290 Abstract Boolean Break Byte Case Catch Char Class Const Continue debugger default delete do double Else enum export extends final finally float For function goto if implements import in instanceof int interface long native New package private protected public Return short static super switch synchronized this throw throws transient try typeof Var Void volatile while with ActionScript . Auch Bezeichner (z. B. Variablen, Objekte und Funktionen) sollten möglichst selbsterklärend sein. Wenn Sie eine Variable für die Punkte verwenden, dann nennen Sie diese auch so. Kryptische Synonyme wie z. B. ip01 machen es für einen Menschen schwer, den Programmcode zu lesen. Für Bezeichner sollten Sie sich im Übrigen an die gewöhnlichen Konventionen halten: Es hat sich eingebürgert, dass Bezeichner komplett kleingeschrieben werden; zur besseren Lesbarkeit beginnt man neue Begriffe in einem Bezeichner aber mit einem Großbuchstaben: ermittleDatum. Handelt es sich um den Bezeichner einer Funktion oder Methode, sollte auch hier wieder ein Imperativ verwendet werden. Schon in der Programmiersprache ActionScript vorhandene Begriffe sind für eigene Bezeichner tabu. Daneben gibt es aber noch weitere Schlüsselwörter, die nicht verwendet werden sollten: Auch wenn Sie Ihre Skripts gut dokumentieren, wird es sicherlich noch zu dem einen oder anderen Fehler kommen. Flash bietet Ihnen Werkzeuge, um diese Fehler möglichst schnell zu finden und auszumerzen: 왘 Ausgabefenster (Aktion trace) 왘 Debuggen (Fehlersuche) 왘 Watcher (Beobachten von Werten) Ausgabefenster Das Ausgabefenster funktioniert nur in der Flash-Entwicklungsumgebung. Sie öffnen es sowohl im Bearbeitungsmodus als auch im Textmodus (Steuerung • Film testen) über Fenster • Ausgabe. Das Ausgabefenster erscheint aber auch automatisch, sobald eine Ausgabe erfolgt. Flash gibt im Ausgabefenster z. B. Warnmeldungen und Fehler an. Auch die Konvertierungen beim Import eines Flash-Films werden hier festgehalten. Um den Programmablauf zu kontrollieren, können Sie mit der Aktion trace Zwischenergebnisse und Text ausgeben lassen, falls der Film in der Entwicklungsumgebung getestet wird. Wenn Sie z. B. nicht sicher sind, ob ein Codeblock überhaupt ausgeführt wird, dann platzieren Sie einfach eine trace-Aktion in diesen Block, und überprüfen Sie, ob ein Text im Ausgabefenster erscheint. Ebenfalls im Testmodus stehen Ihnen die Menüs Fehlersuche • Objekte auflisten und Fehlersuche • Variablen auflisten zur Verfügung. Objekte auflisten zeigt alle auf der Bühne befindlichen Objekte inklusive der Filmsequenzen des Films im Ausgabefenster an. Variablen auflisten macht dasselbe nur bezüglich der Variablen (die wiederum auch Objekte enthalten können). Debugger und Watcher Der Debugger hilft Ihnen, Fehler in einem laufenden Flash-Film zu lokalisieren. In der Anzeigeliste des Debuggers werden alle gerade ablaufenden Filme und Filmsequenzen einer abspielenden SWF-Datei angezeigt und die entsprechenden Eigenschaften und Variablen ausgegeben. Einzelne Variablenwerte und Eigenschaften lassen sich hier während des Abspielens auch ändern oder hinzufügen. Der Debugger lässt sich auf mehrere Arten einsetzen: 왘 Direkt in der Entwicklungsumgebung überprüfen Sie einen Flash-Film über Steuerung • Fehlersuche. Fehlersuche . 291 Abbildung 1 왘 Debugger mit Watcher (Überwacher) 왘 292 Um einen Film direkt im Webbrowser zu testen, benötigen Sie einen speziellen Flash Player Player, der normalerweise auf Ihrem Computer installiert ist. Diesen Flash Player finden Sie auch im Flash 5-Programmordner (meistens c:\programme\macromedia\flash 5\) unter Players\Debug. Damit ein Flash-Film jetzt auch aus dem Browser heraus getestet werden kann, müssen Sie in Flash unter Datei • Einstellungen für das Veröffentlichen innerhalb des Registers Flash die Fehlersuche zulassen und bei Bedarf ein entsprechendes Passwort vergeben. Dann zeigt Flash beim Abspielen des Films im Webbrowser im Kontextmenü den Punkt Debuggen an, über den sich der Debugger in Flash starten lässt. Beachten Sie bitte, dass Flash dafür geöffnet sein muss. 왘 Macromedia bietet auch einen speziellen Stand-alone-Player an, mit dem sich ein Flash-Film mit Debugger abspielen lässt. Hierfür gelten aber die gleichen Bedingungen wie für den Webbrowser. Im Register Eigenschaften des Debuggers ermitteln und ändern Sie Eigenschaften. Variablen ändern Sie im Register Variablen. Diese können Sie über das Kontextmenü (rechte Maustaste oder (Ctrl) + Maustaste) oder die Bedienfeldoptionen auch zur Überwachung (engl. Watch) hinzufügen. Der Watcher ermöglicht es Ihnen, einzelne Variablenwerte zu verfolgen, zu ändern und ActionScript . auch neue Variablen anzulegen (Überwachung hinzufügen). Über den Befehl Überwachung entfernen löschen Sie einzelne Variablen wieder aus dem Watcher. Im Watcher lassen sich neben Variablen auch Eigenschaften angeben. Fehlersuche . 293 Fortsetzung folgt. Nächste Woche finden Sie den nächsten Teil dieses Buches – da, wo Sie diesen Teil heruntergeladen haben. Ihr Galileo Team und Sascha Wolter Index #include 220 __proto__ 269 3D 296 Adobe Dimensions 301 Logo 306 mit Microsoft Office erstellen 297 Techniken 296 Würfel 309 A Absatz 44, 80 Eigenschaften 81 Abspielgeschwindigkeit ändern 243 Abspielkopf 36, 106 Abspielsteuerung 40 Action Script Viewer 374 ActionScript Bestandteile 215 CGI-Skripten aufrufen 151 Darstellungsqualität einstellen 150 E-Mail versenden 152, 272 Editor 140, 217 Eigenschaften 236 Eigenschaften bestimmen 248 Expertenmodus 141, 219 Film entladen 154 Film laden 153 Filmsequenzen steuern 155 Formatierung 220 Grundlagen 214 Hilfsmittel 217 HTML-Dokumente anzeigen 151 Importieren und Exportieren 220 Ladestatus ermitteln 158 Normaler Modus 141 Sound anhalten 150 Umgebung steuern 150 Ursprung 214 Variable 240 ActionScript-Editor Escape-Sequenz 219 Normaler Modus 218 ActiveX 324 Eigenschaften 324 Methoden 328 Adobe Dimensions 301 Adobe Illustrator 175, 374, 375 Adobe, Rechtsstreit 43 412 ADPCM-Format 163 Aftershock 201, 228 Aktion 147, 214 Eingabe von Skripten 217 evaluate 219 FSCommand 150 Get URL 151 Go To 148 If Frame Is Loaded 158 Load Movie 153 Play 148 Reihenfolge 217 Set Property 248 Stop 147 Stop All Sounds 150 Tell Target 155 Toggle High Quality 150 Unload Movie 154 Aktualisieren von Medien 122 Allgemeine Bibliothek 123 Andocken der Zeitleiste verhindern 38 Animation 130 Bild-für-Bild 130 Ankerpunkt 98 Ansicht Arbeitsbereich 90 Ausrichten 94 Bühne 89 Gitter 92 Lineal 92 Vergrößerungsfaktor 89 Verschieben 91 Zoom 89 Arbeitsbereich 34, 90 ASP 274 Auffinden von Objekten 101 Ausdruck 236, 251 Ausgabefenster 48, 190, 291 Ausrichten 43, 95 Auswahl aufheben 94 Auswählen 93 Füllung 93 Linie 93 Liniensegment 93 AutoCAD 175 Automatisch hoch 195 Automatisch niedrig 195 B Bandbreite 25 Rechenleistung 25 Simulieren 190 Bandbreiten-Profiler 187, 190 Basisaktion 219 Beatnik 266 Bedienfeld 40 Absatz 44, 80 Aktionen 217 Ausrichten 43 Bild 45 Effekt 45 Farbmischer 42 Farbtöne 42 Füllung 42 Generator 47 Info 41 Instanz 45 Linie 42 Sequenzparameter 46 Sound 46, 161 Szene 46, 115 Textoptionen 44, 82 Transformieren 43 Zeichen 44, 79 Bedienfeld -> s. Inspektor 40 Bedienfeld -> s. Palette 40 Begradigen 96 Bewegung 130 Bewegungs-Tweening 131 Bewegungsführung 133 Bewegungsführung 114, 133 Bezeichnung 110 Bézierkurven 70 Bibliothek 37, 120 allgemeine 123 anlegen 59 gemeinsam nutzen 124 Optionen 122 Bild 45, 108 Ausschneiden 111 Einfügen 108 Füllbild 108 Kopieren 111 Löschen 109 Schlüsselbild 108 Verschieben 110 Bild eingeben 252 Index . . Bild-für-Bild-Animation 130 Dateisequenz 174 Zwiebelschichteneffekt 130 Bildaktion 141, 216 Bildeigenschaften 110 Bildinspektor 45 Bildschirmfüllend 340 Bildschirmschoner 368 Bitmap 24 als Füllung 69, 180 Nachzeichnen 180 Verwenden 180 Zauberstab 99 Blende 114 Boblgum Patch 217 Browser festlegen 193 Bühne 34 Dimension 35 Farbe 35 C call 264 Case 264 Cel-Animator 28 CGI 151, 272 Probleme 275 Checkbox 256 clr 67 ColdFusion 274 Common Gateway Interface 151, 272 CorelDraw 374 currentframe 236 D Darstellung Geschwindigkeit 91 Darstellungsqualität 91 Dashboard 401 Datei Als Bibliothek öffnen 49 Drucken 50 Neu 49 Öffnen 49 Schließen 49 Speichern 49 wiederherstellen 49 Dateigröße optimieren 123 Dateisequenz 174 Datenbank 275 Debuggen 290 Debugger 48, 291 Dehnen 97 Director 356 Abspielleistung eines Flash-Films erhöhen 359 Darstellereigenschaften eines Flash-Films 358 Drucken 363 Eigenschaften eines FlashSprites 360 Flash-Film importieren 358 gesteuert durch Flash-Film 361 Drag and Drop 256 Dreamweaver 201, 228 JavaScript Integration Kit for Macromedia Flash 5 202 Dreamweaver UltraDev 202 Drehbuch 106 Drehen 43, 96 Mittelpunkt 116 Drucken, Druckbereich 35 Durchsichtig, Flash-Film 195 Dynamischer Text 82 E E-Mail Datei senden 50 versenden 152, 271, 272 Easter Egg 408 Ebene 36, 111 Bewegungsführung 114 Eigenschaften 111 Führungsebene 114 gesperrt 112 Höhe 112 Konturen 112 Maske 113 Typ 111 unsichtbar 112 Eckpunkt Erstellen 97 ECMA-262-Standard 215 Editor, ActionScript 217 Effekt 45, 128 Eigenschaft 236, 247 ändern 250 eigenständiger Player 208 Eimer 76 Eingabe, Textfeld 82 Einstellungen 52 Ellipse 72 EMBED 313 Endlosschleife 236 enter Frame 252 Ereignis 216 Ereignissound 164 Erstellen Film für ältere Flash Player 224 für ältere Flash Player 222 Erweiterte Metadatei 175 Expertenmodus 141 Export 174 F Farbe 65 erstellen 68 Füllung 65 keine 65, 68 Linie 65 massive 65 mischen 67 Palette 67 Taste 68 Verlauf 65 vertauschen 66 Web-sicher 68 Farbeffekt 128 Farbeimer 76 Farbenfenster 42 Farbenfenster -> s. Farbmischer 42 Farbmischer 42, 67 Farbpalette 65, 66, 67, 68 Farbton 42, 65 Farbtypindikator 74 Farbverlauf 65 Fast 217 Fehlersuche 290 Felder 78, 271 Reihenfolge 271 Fenster, neues 57 Film-Explorer 47, 101 Filmgröße 195 Filmsequenz 242 Eigenschaft 236 steuern 242 Filmsequenzsymbol 118 FlaSE 217 Flash Abfrage des Plug-ins 226 die Unterschiede der einzelnen Versionen 30 Ermitteln der Version 226 Film optimieren 187 Film schützen 194 Flash 5 wie Flash 4 nutzen 52 Kompatibilität 222 offener Standard 27 Spielerei 26 Sprachen 29 Version 222 Version 1 28 Version 2 30 Version 3 30 Version 4 31 Version 5 32 Wünsche 30 Flash 4 erstellen 224 konvertieren nach Flash 5 224 Index . . 413 Flash Asset Xtra 357 Flash Deployment Kit 203 Flash Dispatcher Behaviour 203 Flash Open File Format 372 Flash Player 26, 184 alte Versionen 231 entfernen 231 Erkennung mit Skript 227 Erkennung ohne Skript 228 Java 346 Verbreitung 27 Flash-Film abspielen mit Java 346 als Bildschirmschoner 368 als QuickTime 352 als Video 352 Aufbau 242 Director steuern 361 durchsichtig im Webbrowser 195 in Director verwenden 358 in Frames 341 mit dynamischem Inhalt 382 steuern mit JavaScript 338 über ActiveX steuern 324 Überblick 101 Flashdetection 226 FlashJester 373 FlashTyper 373 focusrect 236 Form 62 Füllung 62 Kontur 62 Umriss 62 unregelmäßige 63 Verändern 97 Vereinfachen 96 Weichzeichnen 99 Zusammenfassen 116 Form-Tweening 136 Formmarken 136 Format Übertragen 77 Formerkennung 96 Formmarken 136 Formular 271 framesloaded 236 FreeHand 175, 374 Freihandwerkzeug 70 FSCommand 150, 338 allowscale 210 exec 210 fullscreen 210 quit 210 showmenu 210 trapallkeys 210 Führungsebene 114 414 Führungslinie 92 Füllbild 108 Füllfarbe 65 Füllung 42, 62, 76 Erweitern 98 gleichmäßige 69 sperren 74 transformieren 76 Funktion 262 selbstdefiniert 264 vordefiniert 264 FutureSplash 28 FutureSplash-Player 176 FutureWave 28 G GEMA 171 Gemeinsam genutzte Bibliothek 124 Generator 382, 383 Datenquelle 389 Funktionsweise 385 Objekt 388 Vorlagenbefehl 386 Generator Authoring Extensions 383 Generator Developer Edition 384 Generator Enterprise Edition 384 Generator-Inspektor 47 Generator-Variable 386 Generator-Vorlagen 385 generische Schriftart 87 Geräteschriftart 195 Geräteschriftarten 87 Geräusch 160 Geschwindigkeit 91 Get Property 248 Get URL 151, 338 GET-Methode 274 getBytesLoaded 239 getBytesTotal 239 getFocus 271 getURL 273 Gitter 92 Ausrichten 94 Gitternetz 91 Glätten 96 Go To 148 Grafiksymbol 118 Grafiktablett 76 Graphics Interchange Format 176 Größe 195 Bühnengröße 35 Grundelemente 34 Gruppe bearbeiten 116 Sperren 117 Gruppieren 116 H Hand 91 Handler 218, 262 Hervorhebung von Aktionen 220 Hierarchisches Menü erstellen 257 highquality 236 Highscore 289 Hilfe 400 Beispiele 401 Entwicklerzentrum 401 Hotline 400 Internet 402 Hilfemenü 400 Hilfslinie 91, 92 Ausrichten 94 Hintergrundfarbe ändern 243 hitTest 287 HTML 83, 312 EMBED 313 Object 313 Tags 312 Vorlage 320 Hyperlinks 83 I If Frame Is Loaded 158, 235 if und else 236 IfFrameLoaded 158 Illustrationsprogramm 374 Illustrator 374, 375 Imagemap 196 Import 174 Info-Bedienfeld 41 Inspektor 40 Generator 47 Szene 46 Inspiration 16 Instanz 37, 45, 117, 126 Definition 127 Eigenschaften 126 Farbeffekt 128 Verhalten 127 Instanzeigenschaften, Definition 45 Int 264 ISDN 192 J Java 346 Applet 346 Application 348 Konstanten 349 Konstruktor 349 Methoden 349, 350 JavaScript 338 erstellen mit Dreamweaver 202 Flash Player ermitteln 227 Index . Joint Photographic Experts Group 176 JSP 274 Jtools 373 Jugglor 373 K Keybord Shortcuts 54 Kiosk-Modus 340 Klang 160 Kollisionskontrolle 286 Kommentar 110, 220, 290 mehrzeilig 220 Kommunikation zwischen FlashFilmen 341 Kompatibilität von Flash 222 Konstruktor 265, 266 Kontextmenü deaktivieren 195 Kontrollkästchen 256 Kontrollstruktur 235 Kontur 62 Konvertieren, Flash 4 nach Flash 5 224 Kreis, Halbkreis erstellen 63 Kuchendiagramm 389 L Ladereihenfolge 234 Lasso 99 Polygon 99 Zauberstab 99 Launcher 40 Lautstärke 168 Lektionen, Hilfe 401 level 246 Lineal 92 Einheit 93 Linealeinheit 93 Linie 42, 62 Eigenschaften 77 in Füllung umwandeln 98 Segment 62 Typ 64 Verlauf 98 Zeichnen 72 Linienfarbe 65 Linse 69 Linux-Plug-in 372 Lizenz 203 Load Movie 153 loadMovie 274 loadMovieNum 274, 280 loadVariables 274, 382 loadVariablesNum 274, 280 Logo, dreidimensional drehen 306 Lupe 89 M O Macintosh-Projektor 200 MacPaint 176 Macromedia 28 Marktanteil 29 Mitarbeiter 29 Macromedia Director 356 Macromedia FreeHand 374 Macromedia Generator 383 MacroMind 28 Magnet 94 Mail versenden 271 Maske 113 massive Farbe 65 Math.round 239 Maus 284 Außerhalb loslassen 149 Darüber rollen 149 Darüber ziehen 149 Drücken 149 Loslassen 149 Wegrollen 149 Wegziehen 149 Mausverfolger 252 maxscroll 236 Mehrfachauswahl 101 Menü Ansicht 55 Bearbeiten 51 Bibliotheken 59 Datei 49 Einfügen 55 erstellen 257 Fenster 57 Modifizieren 56 Pop-up 257 PopUp 257 Pull-down 257 Steuerung 56 Methode 217, 250 Mittelpunkt 116 Morphing 136 Movie Explorer 101 MP3-Format 163 Musik 160 Oberflächenelement 256 Object 313 Objekt 265 Auffinden 101 dynamisch Erzeugen 288 mehrere gleichzeitig auswählen 101 Methode 268 selbst definiert 266 vordefiniertes 265 Objektaktion 216, 251 Objekte auflisten 291 Objektorientierung 266 Vererbung 269 Ohne Rand 322 OLE 182 OLE/OCX-Steuerungen 324 onClipEvent 252 Operator 251 Optimieren 96, 187 Organisation 47 Osterei 408 N NASDAQ MACR 29 Neigen 96 new 265 Normaler Modus 141 NPSWF32.dll 232 Num, Stufen als Ziel angeben 280 Number 264 P Palette 40 Parameter als Ausdruck 251 parent 245 Perl 274 Pfeil 94 Pfeilwerkzeug, Form verändern 97 PGML 26 PhotoShop 176 Photoshop Alphakanal 182 PHP 274 PICT 176 Pinsel 73 Pipette 65, 77 Pixel 24 Play 148 Plug-in 26, 184 Überprüfen 204 Verbereitung 27 Plug-in -> s. Flash Player 26 PopUp-Menü 257 Position festlegen 41 POST-Methode 274 Preloader 234 printAsBitmapNum 280 printNum 280 Pro und Kontra Flash 25 Projektor 211 prototype 269 Index . 415 Q Qualität 195 Darstellung 91 quality 248 QuickTime 352 R Radiergummi 74 Wasserhahn 75 Rahmenlos 322 Random 264, 288 RAW-Format 163 RealNetworks 352 RealPlayer 355 Rechteck 72 Reihenfolge umkehren 111 root 246 S Scalable Vector Graphics 26 Schaltfläche 142 Animiert 143 Hervorheben 143 Ton 143 Unsichtbar 143, 260 Zustand 142 Schaltflächensymbol 118 Schleife 236 endlos 236 Schlüsselbild 109 Bezeichnung 110 Eigenschaften 110 Einfügen 109 gefülltes 109 Kommentar 110 leeres 109 Löschen 109 Schlüsselwort 290 Schnellstartleiste 40 Schnellstartleiste -> s. Launcher 40 Schrift generisch 87 Gerät 87 mit Farbverlauf 65 Schriftzüge ein- und ausblenden 12 Schriftsymbol 88 Schützen 194 Screensaver 368 scroll 236 Segment 62 Selbstdefinierte Funktion 264 Selbstdefiniertes Objekt 266 Selection-Objekt 271 Sequenzparameter 46, 253 festlegen 254 416 Index Set Property 248 setFocus 271 Shockmachine 111 Shockwave 184 Shockwave Remote 111 HTML-Tag SWREMOTE 318 Shockwave-Flash-NP-68 232 Shockwave-Flash-NP-PPC 232 Sicherheit 270 Skalieren 43, 97 Mittelpunkt 116 Small Web Format 185 Smart Clip 253 Beispiele 253 Smart Filmsequenz 253 SmartSketch 28 Sniffer 229 Sound 46, 160 ADPCM 163 Anfang 164 Beatnik 266 Bedienfeld 161 Daten 164 Effekt 167 Einstellungen 161 Ende 164 Ereignis 164 Exportieren 169 Formate 160 Hülle Bearbeiten 168 Importformate 160 Komprimierung 162 Lautstärke 168 MP3 163 Qualität 169 RAW 163 Standardeinstellung 169 Start 164 Stop 164 Streaming 167 Synchron 167 Wellenform 167 soundbuftime 236 Sperren 117 Spiegeln 97 Spiel finanzieren 282 Konzeption 282 Punktezählung 289 Spieleprogrammierung 282 Spotlight 113 Sprungmarken 110 Stand-alone-Player 208 FSCommand 208 Stand-alone-Projektor 211 Standardfarben 66 Standardsymbolleiste 39 Stanze 94 Stapelreihenfolge 36 startDrag 284 Startsound 164 Statussymbolleiste 39 Stauchen 97 Steuerung von Objekten 284 Stift 70 Stop 147 Stop All Sounds 150 Stop-Sound 164 Storyboard 12 Drucken 50 Streaming 234 Testen 191 Streaming-Sound 167 Streaming-Verhalten 240 Strich 62 Stufe oder LevelLevelLevel -> s. Stufe 242 Styleguide 124 Suchmaschinen 27 SVG 26 SWF Dateiformat 372 SWF-Browser 374 SWfx 373 Swift 3D 300 Swift-Generator 395 Swish 373 Symbol 37, 117 Arten 118 aus anderem Film übernehmen 120 Bearbeiten 119 bearbeiten 51 Filmsequenz 118 Grafik 118 Schaltfläche 118, 142 Sperren 117 Synchronisieren 137 Symbolleiste 38 Abspielsteuerung 40 Standard 39 Status 39 Werkzeuge 38 Zeichnen 38 Symbolleiste -> s. Werkzeuge 38 Szene 37, 114 Popup-Menü 115 Szene-Inspektor 46 T U W Tastatur 284 Tastendruck 149 Tastenkombination 54, 406 Teilen 99 Tell Target 155, 242 Testen 188 alte Flash Player 231 Ausgabefenster 190 Film 189 Szene 189 Text 78 Ausrichtung 80 dynamischer 82 dynamsich laden 273 feste Breite 78 Größe 80 Schriftart 79 Schriftartsymbol 88 scrollen 273 Unterschiede zwischen Texten und Feldern 83 variable Breite 78 Zerlegen 89 Texteffekte 373 Texteingabe 82 Textoptionen 44, 82 Textur 69, 180 this 246, 268 Tintenfass 77 Toggle High Quality 150 Ton 160 totalframes 236 Tracen 180 Transformieren 43 Transparent, Flash-Film 319 Tweening Bewegung 131 Bewegungsführung 114, 133 Form 136 Formmarken 136 in Schlüsselbilder konvertieren 110 Überblick Flash-Film 101 Uhrzeit 264 UltraDev 202 Umriss 62 Unload Movie 154 unloadMovieNum 280 Unsichtbare Schaltfläche 260 Unterschiede zwischen Texten und Feldern 83 Updates 402 Wasserhahn 75 Watcher 48, 291 Webbrowser festlegen 193 Webserver 205 Weichzeichnen 99 Werkzeug 38, 69 auflösungsabhängig 90 Freihand 70 Werkzeugsymbolleiste 38 Werkzeugtipps 38 Windows-Projektor 200 with 247 Würfel dreidimensional drehen 309 V var 250 Variable 240, 249 ändern 250 für Textfeld angeben 83 global 250 lokal 250 Variablen auflisten 291 Vecta3D 300 Vektorgrafik 24 Vektor 24 Veränderungen seit Flash 3 38 Verbreitung 27 Verknüpfung 124 Verlauf 69 linear 69 radial 69 transformieren 76 Veröffentlichen 184, 192 Einstellung 192 Flash Player-Film 193 GIF 198 HTML 195 JPEG 198 PNG 199 Projektor 200 Video 352 visible 245 Vollbildmodus 340, 368 Vordefinierte Funktion 264 Vordefiniertes Objekt 265 Vorlage 320 Variable 320, 322 Vorschau 106 X x 248 xch 255 XML 275 XMLSockets 277 Y y 252 Z Zauberstab 99 Zeichen 44, 79 Zeichenfolgenfunktion 264 Zeichnensymbolleiste 38 Zeitleiste 36, 106 Bilddarstellung 106 Ebene 106 Statusanzeige 108 Zerlegen 99 Ziel angeben 246 Zieleditor 246 Zoomkontrolle 89 Zufall 288 Zusammenfassen 37 Zustand 244 Zwiebelschichteneffekt 107, 130 Zwischenablage 182 Voreinstellungen 53 Index 417 Sagen Sie uns Ihre Meinung. Zu diesem Kapitel oder zum Buch. Zur Eingabe Ihrer Meinung Bitte verwenden Sie dazu auf unserer Website die folgende Registriernummer 01GP10099999 Oder diskutieren Sie mit anderen Flashern im Flashforum von Galileo oder auf flashforum.de Die Schaltflächen enthalten die Weblinks. Bücher, die Sie auch interessieren werden Die Buchcover enthalten Weblinks. und weitere Titel im Programm zu _ Dreamweaver MX – Fireworks MX _ Director und Lingo _ Photoshop 7 _ Digital Video _ Web Usability _ Website-Konzeption _ Webdesign Galileo Design >> www.galileodesign.de