5.5 Ereignisprozeduren
Ereignisprozeduren helfen, die Filmsteuerung ein wenig zu vereinfachen. Wie Sie wissen, gibt es in Flash drei Orte, an denen ein Ereignis auftreten kann: bei Schlüsselbildern, Schaltflächen-Symbolen und MovieClips.
Für Schlüsselbilder müssen Sie das Ereignis nicht extra schreiben, da es nur das eine Ereignis gibt: »der Abspielkopf betritt das Schlüsselbild«. Bei Schaltflächen und MovieClips ist dagegen mehr Arbeit notwendig: on und onClipEvent kommen zum Einsatz, und Sie benötigen ein Ereignis. Der größte Aufwand ist dabei, in jede Schaltfläche oder jeden MovieClip zu wechseln und dort Code einzugeben. Deswegen hat sich Macromedia eine zentrale Möglichkeit ausgedacht, auf Ereignisse bei einzelnen Elementen zu reagieren: die Ereignisprozeduren. Und so funktioniert es:
Fehlerquelle |
Ob Sie eine an anderer Stelle definierte Funktion aufrufen oder direkt in der Ereignisprozedur eine Funktion ohne Funktionsname definieren, macht funktional keinen Unterschied. In der ersten Variante müssen Sie beachten, dass die runden Klammern nach dem Funktionsnamen entfallen. Die zweite Variante führt aber leicht zu Tippfehlern, da hier kein Funktionsname steht und der Funktionsaufruf als Anweisung mit Strichpunkt beendet wird. |
1. | Sie greifen auf die Schaltfläche oder den MovieClip zu, die ein Ereignis erhalten sollen. Wenn die Instanz direkt unter dem Hauptfilm liegt, genügt der Instanzname: |
Instanzname.
2. | Nun folgt das Ereignis. Es setzt sich aus on und dem Ereignisnamen zusammen, beispielsweise onRelease (Ereignisprozedur)onRelease: |
Instanzname.onRelease
3. | Diesem Ereignis weisen Sie eine Funktion zu, die ausgeführt wird. Beachten Sie, dass die runden Klammern weggelassen werden: |
Instanzname.onRelease = Funktionsname;
4. | Oftmals wird keine Funktion aufgerufen, sondern direkt eine Funktion ohne Funktionsnamen1 definiert: |
Instanzname.onRelease = function () { Anweisungen; };
Beachten Sie, dass sich bei Ereignisprozeduren nicht der Ort ändert, an dem das Ereignis auftritt, nur Ihren Code schreiben Sie an eine andere Stelle.
Ereignisprozeduren gibt es erst ab Flash MX, also nicht in Flash 5. Hier ist ActionScript 1 eben nicht gleich ActionScript 1.
Ein Beispiel zeigt, wie Ihnen Ereignisprozeduren helfen. Öffnen Sie die Datei ereignisprozeduren_AS2.fla aus dem Ordner Flash8 oder FlashMX2004 bzw. auf der CD-ROM. Für Flash MX befindet sich die Datei im Ordner FlashMX und trägt den Namen ereignisprozeduren_AS1.fla. Sie sehen drei MovieClips mit Leuchtdioden. Über drei Schaltflächen sollen die Dioden der Reihe nach eingefärbt werden – mit der aus dem letzten Abschnitt »MovieClips« gezeigten Technik. Die Schaltflächen sind in einen eigenen MovieClip eingefügt und färben von oben nach unten gelb, rot und grün.
Abbildung 5.12 Die Ausgangssituation besteht aus drei Schaltflächen in einem MovieClip und drei Dioden.
Stellen Sie sich vor, welchen Aufwand es bedeuten würde, den Code zum Einfärben in die Buttons einzutragen. Da nacheinander drei verschiedene Dioden eingefärbt werden sollen, müssten Sie mit drei Schlüsselbildern arbeiten und drei verschiedene Codes für jeden der Buttons anlegen. Insgesamt bedeutet das, neunmal eine Schaltfläche zu aktivieren und den Code in folgender Form abzulegen:
on (release) { diodeEins_mc.gotoAndStop(2); }
Abbildung 5.13 Der Film in der Übersicht
Mit Ereignisprozeduren geht das einfacher: Sie haben drei Schlüsselbilder in der ActionScript-Ebene. Dort steht der Code, der für Schlüsselbild 1 so aussieht:
stop(); //Film anhalten buttonGruppe_mc.gelb_btn.onRelease = function() { diodeEins_mc.gotoAndStop(2); gotoAndStop(20); }; ...
Zuerst wird der Hauptfilm angehalten. Dann definieren Sie die Ereignisprozedur für die oberste Schaltfläche: Wenn der Nutzer die Maustaste loslässt (onRelease), springt der MovieClip diodeEins_mc auf Bild 2. Dieses Bild enthält die Diode mit gelbem Verlauf, sie ist also gelb eingefärbt. Anschließend geht der Hauptfilm weiter zu Bild 20, wo die zweite Diode gefärbt wird.
Analog zu diesem Code sieht auch der Code für die anderen zwei Schaltflächen aus. Hier wird nur der Button-Instanzname von gelb_btn in rot_btn beziehungsweise gruen_btn geändert und der MovieClip für die erste Diode springt auf Bild 3 beziehungsweise 4.
In der Praxis |
Ob Sie mit Ereignisprozeduren arbeiten oder nicht, ist Geschmacksache. Gerade bei vielen Schaltflächen und umfangreichen Navigationen verringern sie den Arbeitsaufwand, da der Code an zentraler Stelle gesammelt ist. Deswegen verwenden wir in diesem Buch häufig Ereignisprozeduren. Allerdings müssen Sie ein wenig Vorsicht walten lassen, da Sie bei Ereignisprozeduren schnell übersehen können, wo ein Ereignis auftritt. |
Der Code in Schlüsselbild 20 und 40 funktioniert wiederum analog. Allerdings wird jetzt die Diode 2 beziehungsweise 3 umgefärbt. Der MovieClip, in dem navigiert wird, heißt im einen Fall diodeZwei_mc, im anderen diodeDrei_mc. Folgende Zeilen zeigen Ihnen den Code für Schlüsselbild 20 und den gelben Button:
stop(); //Film anhalten buttonGruppe_mc.gelb_btn.onRelease = function() { diodeZwei_mc.gotoAndStop(2); gotoAndStop(40); }; ...
Die neu definierten Ereignisprozeduren überschreiben die alten, die im Schlüsselbild 1 definiert wurden. Sie sehen daran die Flexibilität von Ereignisprozeduren: Sie können jederzeit eine Prozedur mit einer anderen überschreiben. Damit lässt sich an zentraler Stelle direkt in der Hauptzeitleiste das Verhalten von Schaltflächen und MovieClips steuern.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.