Objekte durch Mausklick auf der Bühne erzeugen
Wenn Sie in der nachstehenden swf-Datei mit der Maus an einer beliebigen Stelle klicken, wird ein gelber Stern erzeugt.
Dazu liegt in der Bibliothek ein Movieclip GelberStern für den die Option Export für ActionScript aktiviert ist.
Im ersten Frame des Mainmovies ist folgendes Skript platziert:
this.stage.addEventListener(MouseEvent.MOUSE_DOWN,erzeugeStern);
function erzeugeStern(e:MouseEvent):void {
var stern:MovieClip = new GelberStern();
this.addChild(stern);
stern.x = e.stageX;
stern.y = e.stageY;
}
Erläuterungen zum Script:
Die Bühne this.stage registriert sich mit dem Eventlistener erzeugeStern beim Mausereignis MOUSE_DOWN.
this.stage.addEventListener(MouseEvent.MOUSE_DOWN,erzeugeStern);
Jedesmal, wenn der Eventlistener erzeugeStern durch einen Mausklick auf der Bühne aufgerufen wird, wird eine neue Instanz des Movieclips GelberStern erstellt, in der Variablen stern gespeichert und der Displayliste der Maintimeline (wird über this angesprochen) hinzugefügt.
var stern:MovieClip = new GelberStern();
Abschließend wird der Stern genau an der Stelle des Mausklicks platziert. Die Eigenschaften stageX und stageY des MouseEvents e liefern die Koordinaten des Mauszeigers zum Zeitpunkt des Ereignisses (siehe auch voriges Kapitel). Die Variable stern kann auch vom Typ Sprite sein.
stern.x = e.stageX;
stern.y = e.stageY;
Problem:
Beim Testen dieses Beispiels werden Sie festgestellt haben, dass auch ein Stern erzeugt wird, wenn man einen bereits erzeugten Stern anklickt.
Wenn man nun möchte, dass nur bei einem "echten" Klick auf den blauen Hintergrund ein neuer Stern erzeugt wird, muss man den Ereugnislauf des MOUSE_DOWN-Ereignisses beachten und target bzw. currentTarget unterscheiden (siehe vertiefende Information zu den Eventphasen).
Klickt man auf einen Stern, so ist dieser das Zielobjekt (target). Da der Stern ibeim MOUSE_DOWN-Ereignis nicht registriert ist. wird in der Zielphase kein Eventlistener ausgeführt. In der anschließenden Aufstiegsphase gelangt das Ereignis zur Bühne (currentTarget), und es wird der Eventlistener der Bühne ausgeführt und ein Stern erzeugt.
Nur wenn target und currentTarget identisch sind, hat man wirklich auf die freie blaue Bühnenfläche geklickt.
Man muss daher im Eventlistener durch eine if-Anweisung diese Gleichheit abfragen.
function erzeugeStern(e:MouseEvent):void {
if (e.target == e.currentTarget) {
var stern:MovieClip = new GelberStern();
this.addChild(stern);
stern.x = e.stageX;
stern.y = e.stageY;
}
}
Zum besseren Verständnis können Sie nachfolgende trace-Anweisung in den Eventlistener vor der if-Anweisung einfügen.
trace("target: " + e.target + " currentTarget: " + e.currentTarget);
Abschließend zum Ausprobieren die veränderte swf-Datei:
Quellcode in der beigefügten zip-Datei:
createObjectsClick.fla
createObjectsClick1.fla