EreignisseAS2

Möchte man einen Flash-Film interaktiv werden lassen muss man festlegen können, zu welchem Zeitpunkt bestimmte Anweisungen ausgeführt werden - dazu benutzt man Ereignisse (events). Man unterscheidet zwischen selbstauslösenden Ereignissen - z.B. wenn ein MovieClip geladen wurde (onLoad) oder wenn der Bildschirm neu gezeichnet wird (onEnterFrame) - und benutzerdefinierten Ereignissen - z.B. wenn die Maus bewegt wird oder wenn der Benutzer eine Taste drückt. Interaktivität wird also erreicht, indem man festlegt welcher Code ausgeführt werden soll, wenn/sobald ein bestimmtes Ereignis eintritt. Ein Ereignis kann nur einer Objekt-Instanz auf der Bühne zugewiesen, nicht einem Symbol in der Bibliothek. Anstatt den Code für die Events auf die betroffenen Instanzen zu verteilen ist es oft einfacher/übersichtlicher, sie in der Hauptzeitleiste zu definieren. Auch die Hauptzeitleiste gehört zu einer MovieClip-Instanz (_root in AS2, stage in AS3), alle enthaltenen Objekte können mit Punktsyntax angesprochen werden. Es gibt mehrer Arten Events zu definieren und zu organisieren. Die einfachste Lösung (AS2) sind Ereignisprozeduren, die saubere und bessere Lösung geht über Event-Methoden, die umständlichste, aber flexibelste Lösung benutzt explizite Event-Handler.

Ereignisprozedur
Eine einfache Möglichkeit ist über die Ereignisprozedur (z.B. **on**). Ereignisprozeduren werden direkt im zu verwendenden Objekt definiert, wenn beispielsweise ein Button auf einen Klick reagieren soll, so wird der entsprechende Code direkt im Button platziert. code format="actionscript" //ActionScript von Button on(click) { trace('Du hast mich geklickt'); } code Hinweis: In //AS3// wurde die Ergeinisprozedur stark eingeschränkt, wer neu mit ActionScript anfängt sollte diese Methode daher eher vermeiden.

Event-Methode
code format="actionscript" // ActionScript in "_root"; einKnopf ist eine existierende Instanz eines Objects in der Bühne einKnopf.onPress = function { trace('Du hast mich geklickt'); } code Oftmals ist es praktisch, die Funktion separat und mit Namen zu definieren, so kann sie von verschiedenen Ereignissen (Event-Methoden) benutzt werden: code format="actionscript" // ActionScript in "_root"; knopf1 und knopf2 sind existierende Instanzen in der Bühne knopf1.onPress = pressHandler; //einfach die Funktion über ihren Namen aufrufen knopf2.onPress = pressHandler; //so kann die Funktion auch von anderen Knöpfen benutzt werden function pressHandler { trace('Du hast mich geklickt'); } code AS2 stellt eine ganze Menge vordefinierter Event-Methoden zur Verfügung, die man benutzen kann um auf unterschiedlichste Benutzer-Interaktionen zu reagieren. Die vollständige Liste der verfügbaren Event-Methoden schaut man sich am besten in der Flash-Dokumentation an, z.B. hier für AS2 MovieClips. Eine kurze Zusammenfassung der wichtigsten Events finden sie unten.
 * Event-Methode** werden als Funktionen in der _level0 bzw. _root Ebene definiert, somit haben alle Events dieselben Pfade und der gesamte Code findet sich an einer zentralen Stelle, nämlich der Hauptzeitleiste.

//Event-Handler//
Event-Methoden kann man nur benutzen, wenn diese für das entsprechende Objekt definiert sind - z.B. gibt es für Buttons einige Ereignisse, die für MovieClips nicht definiert sind. Allerdings kann man auch selbst definieren, wer wie auf welches Ereignis reagieren soll - in AS3 geht es fast nur noch auf diese Weise. Die Idee ist diese: Man definiert eine allgemeine Funktion in der steht was passieren soll, wenn/sobald das Ereignis eintritt - dieser Funktion gibt man häufig einen Namen der auf //Handler// endet. Dann benutzt man die Methode addEventListener um dem Objekt zu sagen, auf welches Ereignis es achten soll (1. Argument) und wie die Funktion heisst, die dann aufgerufen werden soll (2. Argument). code format="actionscript" // ActionScript in "_root"; einKnopf ist eine existierende Instanz eines Objects in der Bühne function pressHandler // eine Funktion mit Namen, hier habe ich pressHandler gewählt { trace('Du hast mich geklickt'); } einKnopf.addEventListener("click", pressHandler); /*Zuordnung von Ereignis und Handler zu einer bestimmten Objekt-Instanz, hier einKnopf*/ code
 * Weitere Beispiele und (englische) Erklärungen zu AS2-Events: flash-creations.com/notes/actionscript_eventhandlers.php

//Events in AS3//
Die verschiedenen Methoden um in AS2 mit Ereignissen umzugehen sind verwirrend, deswegen wurde das ganze in AS3 vereinheitlicht: es funktioniert nur noch die letzte Methode mit den expliziten Event-Handlern, mit einer kleinen Erweiterung: code format="actionscript" /* ActionScript 3.0 in "_root"; button ist eine existierende Instanz eines Button Objects */ function pressHandler(e:MouseEvent)){ //das Event selbst wird der Handler-Funktion übergeben... { trace('Du hast mich geklickt');  trace(e.currentTarget.name);  /*... und kann dann benutzt werden, um an Informationen zu                                 genau diesem Ereignis zu gelangen und ggf. zu benutzen*/ } button.addEventListener(MouseEvent.CLICK, pressHandler); /*Das erste Argument sollte möglichst eine Konstante einer Ereignis-Klasse sein*/ code

Liste üblicher MovieClip Events

 * ~ Event ||~ Ereignisprozedur ||~ Event-Methode ||~ Beschreibung ||
 * enterFrame || onClipEvent(enterFrame) || onEnterFrame || Anweisungen werden wiederholt (framerate-mal/sekunde) ausgeführt, solange die Instanz auf der Bühne existiert. ||
 * press || on(press) || onPress || Anwender drückt Schaltfläche mit linker Maustaste. ||
 * release || on(release) || onRelease || Anwender lässt linke Maustaste innerhalb der Schaltfläche, in der sie gedrückt wurde, wieder los. ||
 * releaseOutside || on(releaseOutside) || onReleaseOutside || Anwender lässt linke Maustaste außerhalb der Schaltfläche, in der sie gedrückt wurde, wieder los. ||
 * rollOver || on(rollOver) || onRollOver || Anwender betritt mit Mauscursor die Schaltfläche. ||
 * rollOut || on(rollOut) || onRollOut || Anwender verlässt mit Mauscursor die Schaltfläche. ||
 * dragOver || on(dragOver) || onDragOver || Anwender zieht mit gedrückter linker Maustaste den Mauscursor in die Schaltfläche hinein. ||
 * dragOut || on(dragOut) || onDragOut || Anwender zieht mit gedrückter linker Maustaste. den Mauscursor aus der Schaltfläche heraus. ||
 * mouseDown || onClipEvent(mouseDown) || onMouseDown || Anweisung wird ausgeführt, wenn der Anwender die linke Maustaste drückt, solange die Instanz auf der Bühne existiert. ||
 * mouseUp || onClipEvent(mouseUp) || onMouseUp || Anweisung wird ausgeführt, wenn der Anwender die linke Maustaste loslässt, solange die Instanz auf der Bühne existiert. ||
 * mouseMove || onClipEvent(mouseMove) || onMouseMove || Anweisung wird ausgeführt, wenn der Anwender die Maus bewegt, solange die Instanz auf der Bühne existiert. ||
 * keyPress || on(keyPress "...") || onKeyDown / onKeyUp || Anwender drückt die festgelegte Taste auf der Tastatur. ||
 * keyDown || onClipEvent(keyDown) || onKeyDown || Anweisung wird ausgeführt, wenn der Anwender eine Taste auf der Tastatur drückt, solange die Instanz auf der Bühne existiert. ||
 * keyUp || onClipEvent(keyUp) || onKeyUp || Anweisung wird ausgeführt, wenn der Anwender eine Taste auf der Tastatur loslässt, solange die Instanz auf der Bühne existiert. ||
 * load || onClipEvent(load) || onLoad || Anweisungen werden ausgeführt, sobald die Instanz in den Speicher geladen wurde. ||
 * unload || onClipEvent(unload) || onUnload || Anweisungen werden ausgeführt, sobald die Instanz aufhört, auf der Bühne zu existieren. ||