Objekte erzeugen, nur wenn die Maus bei gedrückter linker Maustaste bewegt wird

Im diesem Kapitel wird das Beispiel aus dem Vorkapitel erweitert, indem man nur bei gedrückter Maustaste beim Bewegen der Maus die Kreise zeichnen kann.

Dieses Beispiel ist prototypisch für viele Skripts, bei denen durch die Ausführung eines Eventhandlers ein anderer Eventhandler aktiviert bzw. deaktiviert wird.

Zum Ausprobieren: Nur wenn Sie bei gedrückter Maustaste die Maus bewegen, werden Kreise gezeichnet. Es werden beim Bewegen der Maus keine Kreise generiert, wenn Sie die Maustaste nicht gedrückt halten.

 

 

Im Vorkapitel registriert sich die Bühne durch
 

this.stage.addEventListener(MouseEvent.MOUSE_MOVE, drawCircle);

beim Ereignis MOUSE_MOVE. Diese Registrierung wird nicht mehr durch removeEventListener aufgehoben und daher werden permanent beim Bewegen der Maus durch den Eventhandler drawCircle Kreise gezeichnet.

In diesem Beispiel soll aber die Registrierung beim Ereignis MOUSE_MOVE erst dann erfolgen, wenn die Maustaste niedergedrückt wird.
D.h. die Bühne registriert sich zuerst beim Ereignis MOUSE_DOWN mit einem Eventhandler startDrawing. Erst beim Ausführen dieses Eventhandlers abonniert die Bühne das MOUSE_MOVE-Ereignis. Dadurch wird erst beim Drücken der Maus der Eventhandler für MOUSE_MOVE aktiviert.
 

this.stage.addEventListener(MouseEvent.MOUSE_DOWN, startDrawing );
function startDrawing(e:MouseEvent):void {
this.stage.addEventListener(MouseEvent.MOUSE_MOVE, drawCircle);
}

Die Registrierung beim MOUSE_MOVE-Ereignis muss wieder aufgehoben werden, wenn die Maustaste losgelassen wird.
D.h. die Bühne muss sich auch beim Ereignis MOUSE_UP mit einem Eventhandler stopDrawing registrieren. Bei der Ausführung dieses Eventhandlers wird die Registrierung beim MOUSE_MOVE-Ereignis mit dem Eventhandler drawCircle durch removeEventListener wieder deaktiviert. Daher werden nach dem Loslassen der Maustaste beim Bewegen der Maus keine Kreise mehr gezeichnet.
 

this.stage.addEventListener(MouseEvent.MOUSE_UP, stopDrawing);
function stopDrawing(e:MouseEvent):void {
this.stage.removeEventListener(MouseEvent.MOUSE_MOVE, drawCircle);
}
 

Nachfolgend das vollständige Skript im ersten Frame der Maintimeline:
 

var kreis:MovieClip;
this.stage.addEventListener(MouseEvent.MOUSE_DOWN, startDrawing );
function startDrawing(e:MouseEvent):void {
this.stage.addEventListener(MouseEvent.MOUSE_MOVE, drawCircle);
}
function drawCircle(e:MouseEvent):void {
kreis = new Kreis();
this.addChild(kreis);
kreis.x = e.stageX;
kreis.y = e.stageY;
}
this.stage.addEventListener(MouseEvent.MOUSE_UP, stopDrawing);
function stopDrawing(e:MouseEvent):void {
this.stage.removeEventListener(MouseEvent.MOUSE_MOVE, drawCircle);
}
 
 
Quellcode in der beigefügten zip-Datei:
MouseEvent_Kreise_zeichnen1.fla

Ergänzende und vertiefende Module