AS3 - removeChild() entfernt alles, was von der Bühne
Ich arbeite auf einem einfachen Flash-Spiel für die Schule. In einem level mehrere Gegner spawnen und der Spieler soll Sie Schießen. Ich verwendet, removeChild (), um loszuwerden, der Feind, der Sie erschossen, aber wenn ich auf (hit), ein Feind, alles auf meine Bühne wieder entfernt werden; es geht komplett leer.
Die Funktion zum füllen meine Bühne mit den Gegnern, ist die folgende:
private function Game2():void{
for (var i:uint=0; i<50; i++) {
var man:MovieClip = new man_mc();
man.x=Math.random()*750;
man.y=Math.floor(Math.random()*(70))+350;
addChild(man);
man.addEventListener(MouseEvent.CLICK, getroffen);
}
Funktion 'getroffen' prüft, wenn ein Feind getroffen wurde:
public function getroffen(evt:MouseEvent):void{
trace("hit");
this.parent.removeChild(this);
}
Irgendwie verwirrt hier, warum es entfernt alles auf der Bühne entfernen, sondern nur den Feind ich auf. Keine Hilfe? Vielen Dank.
InformationsquelleAutor cabaret | 2011-03-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
je nachdem, wo
getroffen()
ist, Sie zu entfernen, die Klasse (this
verweist auf das aktuelle scope-Objekt), so dass ich vermute, es ist wahrscheinlich dieMain
Klasse.Müssen Sie etwas tun, wie in Ihrer Funktion remove:
Sie sind beide functionaly entspricht. Der einzige Unterschied ist, dass er verwendet die
currentTarget
param (wahrscheinlich besser) statt dertarget
param. Der Unterschied kommt, wie das Ereignis-Modell funktioniert und für wen Sie registrieren, wird der Ereignis-listener auf. Alles, was ich Tue ist, Gießen Sie das Ziel, eineMovieClip
(man könnte hinzufügen, ein überprüfen, um zu sehen, ob es null ist, dann zurück, wenn Sie möchten), und dann ruft esparent
um es zu entfernen. Wenn Sie hinzufügen, eineDisplayObject
zu einem anderen, es wird ein Kind, das Objekt und hat esparent
param set. Dabeiobj.parent.removeChild( obj )
ist eine einfache Möglichkeit, um es zu entfernenFür die
target
undcurrentTarget
Unterschied, derEvent
Modell in der Blitz hat 3 Stufen: die Aufnahmephase, die event-phase, und die bubbling-phase. Wenn ein Objekt in der Anzeigeliste löst ein Ereignis aus, es gehtStage->parent->parent->parent->child
wochild
ist das Objekt, das das Ereignis wird ausgelöst, undparent
ist jeder ElternteilDisplayObject
den ganzen Weg bis zu denstage
. Bis in die letztenparent
wir sind in der capture-phase. Wenn wir erreichen diechild
sind wir in der Ereignis-phase. Nach, dass das Ereignis Blasen zurück bis zu denStage
wieder. Dies ist die bubbling-phaseSo, in Bezug auf
target
undcurrentTarget
,target
ist das Objekt, das das Ereignis wird ausgelöst, währendcurrentTarget
ist das aktuelle Objekt in derStage->parent->parent->child->parent->parent->Stage
Ereignis route.Der beste Weg, um zu verstehen, was vor sich geht, ist so etwas ähnliches einrichten
Stage->Sprite->Sprite
wo der Letzte sprite hat einige Grafiken. Ereignis-Listener hinzufügen, alle Objekte, die für so etwas wieMouseEvent.CLICK
(d.h. auf die Bühne, die Eltern sprite und sprite mit der Grafik). Stellen Sie sicher, und fügen Sie für beide Phasen (dieuseCapture
bool). In jedem listener-Funktion trace dietarget
, diecurrentTarget
und dieeventPhase
. Du wirst sehen, die um die Dinge genannt, und es ist viel einfacher zu verstehen, dass das Lesen dieser Kommentare 😀InformationsquelleAutor divillysausages
Statt
this.parent.removeChild(this)
versuchen:Sollte den trick tun!
Falle (mouseEvent) ist ein "Kind" von einem Ihrer Feinde, so entfernen Sie das Ziel Ihrer mouseEvent wird, entfernen Sie den Feind.
Meine Entschuldigung, ich habe nicht geantwortet zuvor. Die "currentTarget" der MouseEvent ist das Objekt, das Sie zugewiesen die EventListener. Weil ich möchte, dass dieses Objekt gelöscht werden, muss ich zuerst den Zugriff auf Ihren Eltern zu machen, löschen Sie seine Kinder.
InformationsquelleAutor Tim S.