12.5 Listener
In der Tabelle »Listener und unterstützte Flash-Version« auf Seite 326 finden Sie alle von Flash unterstützten »Listener« und die zugehörigen Objekte. Die Anwendung unterscheidet sich nur wenig von den Ereignismethoden. Sollte Ihr Programm auf eines der Ereignisse reagieren, dann reicht es aus, wenn Sie dafür ein beliebiges Objekt mit einer Listener-Methode erstellen. Dabei ist es völlig unerheblich, um was für eine Art Objekt es sich handelt und ob dieses Objekt eventuell eine gleichnamige Ereignismethode bereits kennt oder nicht:
meinObjekt = new Object();
addListener.fla
meinObjekt.onMouseDown = function() {
trace("Maus gedrückt!");
};
addListener
Im nächsten Schritt melden Sie das Objekt durch die Methode addListener als Zuhörer bei dem zugehörigen Objekt an:
Mouse.addListener(meinObjekt);
Natürlich darf ein Objekt wieder von der Liste der Zuhörer gestrichen werden. Dafür verwenden Sie die Methode removeListener mit dem zu entfernenden Objekt als Parameter. Die Methode gibt bei erfolgreicher Durchführung true und sonst false zurück.
meinObjekt = new Object();
removeListener.fla
meinObjekt.onMouseDown = function() {
trace("Maus gedrückt!");
};
// Füge Listener hinzu
Mouse.addListener(meinObjekt);
// Entferne Listener
erfolgreich = Mouse.removeListener(meinObjekt);
trace(erfolgreich);
An mehreren Stellen als Listener
Um ein Objekt an mehreren Stellen als Listener zu verwenden, melden Sie es bei allen beteiligten Objekten an. Die erforderlichen Methoden weisen Sie dem Objekt wie normale Methoden zu:
meinObjekt = new Object();
mehrere Listenermethoden.fla
meinObjekt.onMouseDown = function() {
trace("Maus gedrückt!");
};
meinObjekt.onMouseUp = function() {
trace("Maus losgelassen!");
};
meinObjekt.onKeyDown = function() {
trace("Taste gedrückt!");
};
meinObjekt.onKeyUp = function() {
trace("Taste losgelassen!");
};
Mouse.addListener(meinObjekt);
Key.addListener(meinObjekt);
Tabelle 12.8
Listener und unterstützte Flash-Version
Listener
|
Stage
|
Selection
|
Key
|
Mouse
|
MovieClipLoader
|
Textfield
|
onChanged
|
|
|
|
|
|
6
|
onKeyDown
|
|
|
6
|
|
|
|
onKeyUp
|
|
|
6
|
|
|
|
onLoadComplete
|
|
|
|
|
7
|
|
onLoadError
|
|
|
|
|
7
|
|
onLoadInit
|
|
|
|
|
7
|
|
onLoadProgress
|
|
|
|
|
7
|
|
onLoadStart
|
|
|
|
|
7
|
|
onMouseDown
|
|
|
|
6
|
|
|
onMouseMove
|
|
|
|
6
|
|
|
onMouseUp
|
|
|
|
6
|
|
|
onMouseWheel
|
|
|
|
7
|
|
|
onResize
|
6
|
|
|
|
|
|
onScroller
|
|
|
|
|
|
6
|
onSetFocus
|
|
6
|
|
|
|
|
12.5.1 Listener simulieren
Ein selbst programmiertes Objekt mit Listener-Unterstützung verbessert das Verständnis für diese Technik. Denn grundsätzlich ist die Arbeitsweise ganz einfach.
Angenommen Sie haben eine Freundin, die gerne tratscht, dann erzeugen Sie in Flash zum Beispiel das folgende Objekt:
meineFreundin = new Object();
selsterstellter Listener.fla
Damit die Freundin den Tratsch effektiv an alle Interessenten verteilt, benötigt sie eine Liste mit den Zuhörern – also den Kern jedes Objektes, das Listener versteht:
// Erstelle Eigenschaft, die alle Zuhörer als Liste verwaltet
meineFreundin._listeners = new Array();
// Definiere Methode zum Hinzufügen von Zuhörern
meineFreundin.addListener = function(obj) {
this._listeners.push(obj);
};
broadcasting
Jetzt benötigt unsere Freundin nur noch die Fähigkeit, Nachrichten an alle Interessenten zu verteilen (broadcasting):
// Verteile Nachrichten an alle Interessenten
meineFreundin.broadcastMessage = function(msg, parameter) {
for (var i in this._listeners) {
this._listeners[i][msg](parameter);
}
};
Jetzt ist die Freundin auf Zuhörer vorbereitet, sofern das passende Ereignis eintritt. In diesem Fall ist der Auslöser, dass sie eine neue Nachricht erhält:
// Auslöser
meineFreundin.erzaehleNeuigkeit = function(neuigkeit) {
this.broadcastMessage("onTratsch", neuigkeit);
};
Alle Objekte, die sich wie im Folgenden bei der Freundin als Interessent anmelden, erhalten ab jetzt die Nachricht onTratsch:
// Definiere Zuhörer
eineBekannte = new Object();
eineBekannte.onTratsch = function(neuigkeit) {
trace(neuigkeit);
};
meineFreundin.addListener(eineBekannte);
Zum Testen des selbst programmierten Listeners rufen Sie die Methode meineFreundin.erzaehleNeuigkeit("Frank hat eine neue Freundin!"); auf, die zum Verteilen der Neuigkeiten bei allen angemeldeten Listenern führt.
Anhand dieses Beispiels erkennen Sie, dass bei Listenern im Wesentlichen nichts anderes passiert als die Verwaltung einer Liste mit Objekten, die vordefinierte Ereignismethoden besitzen, die in einer Schleife aufgerufen werden.
12.5.2 AsBroadcaster
Sollten die vordefinierten Listener nicht ausreichen und Ihnen die Simulation von Listenern zu aufwändig sein, bietet Flash glücklicherweise seit Version 6 die undokumentierte Klasse AsBroadcaster. Diese Anweisung erzeugt den notwendigen Code für selbst definierte Listener automatisch:
meineFreundin = new Object();
// Selbst erstellte Listener-Verwaltung
AsBroadcaster.initialize(meineFreundin);
// Auslöser
meineFreundin.erzaehleNeuigkeit = function(neuigkeit) {
this.broadcastMessage("onTratsch", neuigkeit);
};
// Definiere Zuhörer
eineBekannte = new Object();
eineBekannte.onTratsch = function(neuigkeit) {
trace(neuigkeit);
};
meineFreundin.addListener(eineBekannte);
// Teste Listener
meineFreundin.erzaehleNeuigkeit(
"Frank hat eine neue Freundin!");
onEnterFrame für Nicht-Movieclips
Häufig wird das Ereignis onEnterFrame auch für Nicht-Movieclips gewünscht. Mit Hilfe des AsBroadcasters ist es nun möglich, zumindest einen entsprechenden Listener zu erzeugen:
onEnterFrame.fla
// Erweitere Movieclip-Objekt für Listener
AsBroadcaster.initialize(MovieClip);
// Erzeuge Instanz für das Broadcasting
this.createEmptyMovieClip("mcBroadcaster", -Math.pow(2,31));
trace(mcBroadcaster.getDepth());
this.mcBroadcaster.onEnterFrame = function() {
MovieClip.broadcastMessage("onEnterFrame");
};
// Erzeuge beliebiges Objekt als Listener
myObject = new Object();
// Erzeuge Listener-Methode
myObject.onEnterFrame = function() {
trace("Bildwechsel");
};
// Melde Listener bei MovieClip an
MovieClip.addListener(myObject);
12.5.3 onChanged
Das Ereignis onChanged wird immer dann ausgelöst, wenn sich der Inhalt eines Textfeldes verändert. Dies können Sie zum Beispiel für die Überprüfung einer Formulareingabe verwenden (siehe TextField, Seite 653).
|
Bemerkung: |
|
Diese Listener-Methode steht seit dem Flash Player 6 für Textfield-Instanzen zur Verfügung. |
|
|
|
Syntax: |
textfieldInstanz.addListener(beliebigeInstanz);
|
Parameter: |
|
beliebigeInstanz: Bei diesem Parameter handelt es sich um ein Objekt, das eine Methode namens onChanged besitzt. |
|
|
|
Beispiel: |
meinObjekt = new Object();
meinObject.onChanged=function () {
trace("meinTextfeld wurde verändert!");
}
meinTextfeld.addListener(meinObjekt);
12.5.4 onKeyDown
Das Ereignis onKeyDown wird immer dann ausgelöst, wenn der Anwender eine Taste drückt (siehe Key, Seite 621).
|
Bemerkung: |
|
Diese Listener-Methode steht seit dem Flash Player 6 für das globale Key-Objekt zur Verfügung. |
|
|
|
Syntax: |
Key.addListener(beliebigeInstanz);
|
Parameter: |
|
beliebigeInstanz: Bei diesem Parameter handelt es sich um ein Objekt, das eine Methode namens onKeyDown besitzt. |
|
|
|
Beispiel: |
onKeyDown (Listener).fla
x = 0;
y = 0;
stepx = 5;
stepy = 0;
this.lineStyle(5, 0x66FF66, 100);
this.onEnterFrame = function() {
x = x+stepx;
y = y+stepy;
this.lineTo(x, y);
};
this.onKeyDown = function() {
switch (Key.getCode()) {
case Key.DOWN :
stepx = 0;
stepy = 5;
break;
case Key.UP :
stepx = 0;
stepy = -5;
break;
case Key.LEFT :
stepx = -5;
stepy = 0;
break;
case Key.RIGHT :
stepx = 5;
stepy = 0;
break;
}
};
Key.addListener(this);
12.5.5 onKeyUp
Das Ereignis onKeyUp wird immer dann ausgelöst, wenn der Anwender eine Taste loslässt (siehe Key, Seite 621).
|
Bemerkung: |
|
Diese Listener-Methode steht seit dem Flash Player 6 für das globale Key-Objekt zur Verfügung. |
|
|
|
Syntax: |
Key.addListener(beliebigeInstanz);
|
Parameter: |
|
beliebigeInstanz: Bei diesem Parameter handelt es sich um ein Objekt, das eine Methode namens onKeyUp besitzt. |
|
|
|
Beispiel: |
x = 0;
onKeyUp (Listener).fla
y = 0;
this.lineStyle(5, 0x66FF66, 100);
this.onEnterFrame = function() {
x = x+stepx;
y = y+stepy;
this.lineTo(x, y);
};
this.onKeyDown = function() {
switch (Key.getCode()) {
case Key.DOWN :
stepx = 0;
stepy = 5;
break;
case Key.UP :
stepx = 0;
stepy = -5;
break;
case Key.LEFT :
stepx = -5;
stepy = 0;
break;
case Key.RIGHT :
stepx = 5;
stepy = 0;
break;
}
};
this.onKeyUp = function() {
stepx = 0;
stepy = 0;
};
Key.addListener(this);
12.5.6 onMouseDown
Das Ereignis onMouseDown wird immer dann ausgelöst, wenn der Anwender die Maustaste drückt (siehe Mouse, Seite 625).
|
Bemerkung: |
|
Diese Listener-Methode steht seit dem Flash Player 6 für das globale Mouse-Objekt zur Verfügung. |
|
|
|
Syntax: |
Mouse.addListener(beliebigeInstanz);
|
Parameter: |
|
beliebigeInstanz: Bei diesem Parameter handelt es sich um ein Objekt, das eine Methode namens onMouseDown besitzt. |
|
|
|
Beispiel: |
meinObjekt = new Object();
onMouseDown (Listener).fla
meinObjekt.onMouseDown = function() {
trace("Maus gedrückt!");
};
Mouse.addListener(meinObjekt);
12.5.7 onMouseMove
Das Ereignis onMouseMove wird immer dann ausgelöst, wenn der Anwender die Maus bewegt (siehe Mouse, Seite 625).
|
Bemerkung: |
|
Diese Listener-Methode steht seit dem Flash Player 6 für das globale Mouse-Objekt zur Verfügung. |
|
|
|
Syntax: |
Mouse.addListener(beliebigeInstanz);
|
Parameter: |
|
beliebigeInstanz: Bei diesem Parameter handelt es sich um ein Objekt, das eine Methode namens onMouseMove besitzt. |
|
|
|
Beispiel: |
meinObjekt = new Object();
onMouseMove (Listener).fla
meinObjekt.onMouseMove = function() {
trace("Maus bewegt!");
};
Mouse.addListener(meinObjekt);
12.5.8 onMouseUp
Das Ereignis onMouseUp wird immer dann ausgelöst, wenn der Anwender die Maustaste loslässt (siehe Mouse, Seite 625).
|
Bemerkung: |
|
Diese Listener-Methode steht seit dem Flash Player 6 für das globale Mouse-Objekt zur Verfügung. |
|
|
|
Syntax: |
Mouse.addListener(beliebigeInstanz);
|
Parameter: |
|
beliebigeInstanz: Bei diesem Parameter handelt es sich um ein Objekt, das eine Methode namens onMouseUp besitzt. |
|
|
|
Beispiel: |
meinObjekt = new Object();
onMouseUp (Listener).fla
meinObjekt.onMouseUp = function() {
trace("Maus losgelassen!");
};
Mouse.addListener(meinObjekt);
12.5.9 onMouseWheel
Das Ereignis onMouseUp wird immer dann ausgelöst, wenn der Anwender das Mausrad betätigt (siehe Mouse, Seite 625).
|
Bemerkung: |
|
Diese Listener-Methode steht seit dem Flash Player 7 für das globale Mouse-Objekt zur Verfügung). |
|
|
|
Syntax: |
Mouse.addListener(beliebigeInstanz);
|
Parameter: |
|
beliebigeInstanz: Bei diesem Parameter handelt es sich um ein Objekt, das eine Methode namens onMouseWheel besitzt, die als ersten Parameter die Stärke der Drehung (-3 bis -1 für abwärts, 1 bis 3 für aufwärts) und als zweiten Parameter das unter dem Mauszeiger liegende Objekt erhält. |
|
|
|
Beispiel: |
meinObjekt = new Object();
meinObjekt.onMouseWheel = function(delta, ziel) {
trace("Mausrad auf " + String(ziel) "gerollt!");
trace("Rollgeschwindigkeit ist " + String(delta));
};
Mouse.addListener(meinObjekt);
12.5.10 onResize (Stage)
Das Ereignis onResize wird immer dann ausgelöst, wenn sich die Größe der Bühne zur Laufzeit verändert. Dies können Sie zum Beispiel für die Positionierung von Elementen verwenden (siehe Stage, Seite 633).
|
Bemerkung: |
|
Diese Listener-Methode steht seit dem Flash Player 6 für das globale Stage-Objekt zur Verfügung. |
|
|
|
Dieser Listener funktioniert nur, wenn die Bühne nicht skaliert wird, da sich in diesem Fall nicht die Größe in Pixel, sondern nur die Skalierung verändert. |
|
|
|
Syntax: |
Stage.addListener(beliebigeInstanz);
|
Parameter: |
|
beliebigeInstanz: Bei diesem Parameter handelt es sich um ein Objekt, das eine Methode namens onResize besitzt. |
|
|
|
Beispiel: |
Stage.scaleMode = "noScale";
onResize (Listener).fla
meinObjekt = new Object();
meinObjekt.onResize = function() {
trace("Bühnengröße verändert!");
};
Stage.addListener(meinObjekt);
12.5.11 onScroller(target)
Das Ereignis onScroller wird immer dann ausgelöst, wenn sich der Inhalt eines Textfeldes verändert. Dies können Sie zum Beispiel für die Überprüfung einer Formulareingabe verwenden (siehe Textfield, Seite 653).
|
Bemerkung: |
|
Diese Listener-Methode steht seit dem Flash Player 6 für Textfield-Instanzen zur Verfügung. |
|
|
|
Syntax: |
textfieldInstanz.addListener(beliebigeInstanz);
|
Parameter: |
|
beliebigeInstanz: Bei diesem Parameter handelt es sich um ein Objekt, das eine Methode namens onScroller besitzt. |
|
|
|
Beispiel: |
meinObjekt = new Object();
onScroller (Listener).fla
meinObjekt.onScroller = function() {
trace("Der Inhalt des Textfeldes wurde bewegt.");
};
meinTextfeld.addListener(meinObjekt);
// oder mit Parameter
meinObjekt = new Object();
meinObjekt.onScroller = function(target) {
trace("Der Inhalt des Textfeldes " + target + " wurde bewegt.");
};
meinTextfeld.addListener(meinObjekt);
12.5.12 onSetFocus (Selection)
Das Ereignis onSetFocus wird immer dann ausgelöst, wenn der Fokus verändert wird. Dies können Sie zum Beispiel für die Steuerung von Benutzereingaben in Formularen verwenden (siehe Selection, Seite 631).
|
Bemerkung: |
|
Diese Listener-Methode steht seit dem Flash Player 6 für das globale Selection-Objekt zur Verfügung. |
|
|
|
Syntax: |
Selection.addListener(beliebigeInstanz);
|
Parameter: |
|
beliebigeInstanz: Bei diesem Parameter handelt es sich um ein Objekt, das eine Methode namens onSetFocus besitzt. Diese Methode erhält als ersten Parameter eine Referenz auf das Objekt mit dem vorherigen Fokus und als zweiten Parameter eine Referenz auf das Objekt mit dem neuen Fokus. |
|
|
|
Beispiel: |
meinObjekt = new
onSetFocus (Listener).fla
meinObjekt.onSetFocus = function(alterFokus, neuerFokus) {
trace("Textfeld "+neuerFokus+" hat den Fokus von
"+alterFokus+" erhalten!");
};
Selection.addListener(meinObjekt);
|