Aus-/Einblenden des Cursors, wenn die Maus die Bühne verlässt und wieder hinein fährt

Wie das nachfolgende Video zeigt, bleibt bis jetzt der individuelle Mauscursor am Bühnenrand stecken, wenn die Maus die Bühne verlässt. In diesem Kapitel wird gezeigt wie der selbst erstellte Mauscursor aus- und wieder eingeblendet werden kann.

Immer wenn die Maus die Bühne (das Flash Player-Fenster) verlässt, wird vom Bühnenobjekt automatisch das Ereignis MOUSE_LEAVE generiert. Die Bühneninstanz kann nun über einen Eventlistener dieses Ereignis abonnieren und mit dem Eventhandler hideCusor darauf reagieren.
 

this.stage.addEventListener(Event.MOUSE_LEAVE, hideCursor);
 
Im Eventhandler hideCursor wird der Stiftcursor durch stiftCursor.visible = false auf unsichtbar gesetzt. Anschließend aboniert die Bühne noch das Ereignis MOUSE_MOVE, das eintritt sobald die Maus wieder in die Bühne hinein bewegt wird und reagiert darauf mit dem Eventhandler showCursor.
 
function hideCursor(e:Event):void {
stiftCursor.visible = false;
this.stage.addEventListener(MouseEvent.MOUSE_MOVE, showCursor);
}

Im Eventhandler showCursor wird der Stiftcursor wieder sichtbar gemacht und anschließend deaktiviert sich der Eventhandler sofort selbst. Durch this.stage.removeEventListener(MouseEvent.MOUSE_MOVE, showCursor) wird der Eventlistener wieder entfernt.
Dadurch wird er nur einmal beim ersten MOUSE_MOVE-Ereignis nach dem Wiedereintritt auf der Bühne ausgeführt.
 
function showCursor(e:MouseEvent):void {
stiftCursor.visible = true;
this.stage.removeEventListener(MouseEvent.MOUSE_MOVE, showCursor);
}

Das komplette Skript zusammengefasst:
 

Mouse.hide();
var stiftCursor:MovieClip = new Stift();
this.stage.addChild(stiftCursor);
this.stage.addEventListener(MouseEvent.MOUSE_MOVE, meinCursor);
function meinCursor(e:MouseEvent):void {
stiftCursor.x = this.stage.mouseX;
stiftCursor.y = this.stage.mouseY;
}
this.stage.addEventListener(Event.MOUSE_LEAVE, hideCursor);
function hideCursor(e:Event):void {
stiftCursor.visible = false;
this.stage.addEventListener(MouseEvent.MOUSE_MOVE, showCursor);
}
function showCursor(e:MouseEvent):void {
stiftCursor.visible = true;
this.stage.removeEventListener(MouseEvent.MOUSE_MOVE, showCursor);
}