[AS3] removeChild funktioniert irgendwie nicht

Skippy

Mitglied
Hallo Forum, ich bin grad so am Einsteigen mit Actionscript 3 und komm irgendwie mit dem removeChild nicht zurecht, hier der Quelltext.

Code:
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.events.MouseEvent;


// Button Funktionen
mechanik_btn.addEventListener(MouseEvent.CLICK,showMechanikLinks);

function showMechanikLinks(evt:MouseEvent):void {
	var container:Sprite = new Sprite();
	var mL:mechanikUntergruppe = new mechanikUntergruppe();
	container.addChild(mL);
	mL.x = 100;
	mL.y = 100;
	mL.name = "mL";
	addChild(container);
	
}
	
elektronik_btn.addEventListener(MouseEvent.CLICK,showElektronikLinks);

function showElektronikLinks(evt:MouseEvent):void {
	
	removeChild(container); 

}

Also wie ihr seht soll bei dem einen Knopf etwas auftauchen, und bei dem anderen wieder verschwinden, allerdings kommt nur die Meldung:

Code:
1120: Zugriff auf eine nicht definierte Eigenschaft container.        removeChild(container);

Ich habe jetzt seit mindestens 2 Stunden im Internet rumgesurft und hab hier ein dickes AS3 Buch von Galileo liegen, hat mir den wohl kleinen Denkfehler den ich nicht sehe nicht behoben =( ich hoffe ihr könnt mir helfen.

MfG und danke! Skippy

EDIT:
Achja, ich hab übrigends an allen möglichen Stelle in Zeile 24 versucht container, stage und this einzusetzen ohne erfolg....
 
Zuletzt bearbeitet:
Du deklarierst die container Instanz lokal innerhalb einer Funktion. Andere Funktionen können dieses objekt daher nicht sehen (scoping). Lösung: Definiere deinen container außerhalb der Funktion so das es für alle Funktionen sichtbar ist.
 
Juuuhuuuuu es funktioniert xD

vielen vielen Dank!

Ich würde gern an dieser Stelle noch eine kurze eine Frage dran hängen:

Ich habe vor eine Flashdatei mit relativ vielen MCs zu machen, die eben alle je nach Bedarf auf die Bühne geladen werden.
Früher hätte ich das so gemacht, dass ich alle MCs auf die Bühne ziehe und nur mit den Alpha Werten hantiere, dies hat sich allerdings als Performancelastig heraus gestellt.
Sehe ich das richtig, dass die Performance unter dieser addChild() geschichte nicht leidet, da eben durch removeChild() die nicht gebrauchten MCs wieder aus dem Speicher verschwinden?

MfG Skippy
 
Damit die Garbage Collection greift müssen alle Referenzen zu diesem Objekt , welches aus dem Speicher entfernt werden soll, vollständig entfernt werden. D.h mit einem removeChild wird dein Objekt nur von der DisplayList entfernt, die Referenz darauf gibt es troztdem noch. Du mußt daher das Objekt noch nullen, die GC erkennent dann im Mark & Sweep prozess das alle Verweise weg sind um löscht es so aus dem RAM.

PHP:
function showElektronikLinks(evt:MouseEvent):void {
	
	removeChild(container); 
container = null;
}
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück