Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 19-01-2008, 19:52   #16 (permalink)
kalt...
 
Registriert seit: Dec 2007
Beiträge: 115
@ omega psi :

danke dass du dich noch beteiligst aber irgendwie versteh ich deinen letzten satz nicht

"getChildAt liefert nur ein DisplayObject zurück. Du musst überprüfen, ob das child ein DisplayObject ist, und dann casten, sonst kriegst du einen TypeError."

getChildAt liefer ja definitiv NUR ein displayObject falls vorhanden oder? wieso muss ich dass dann noch mal casten?
icymonkey ist offline   Mit Zitat antworten
Alt 19-01-2008, 20:05   #17 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Ein DisplayObject kann keine children haben, DisplayObjectContainer aber schon. Nur wenn das child ein DisplayObjectContainer ist, kann es eine eigene DisplayList haben.

Mal anders formuliert: Jeder DisplayObjectContainer ist ein DisplayObject. Aber nicht jeder DisplayObject ist auch ein DisplayObjectContainer.

-> deswegen der Cast.
Omega Psi ist offline   Mit Zitat antworten
Alt 19-01-2008, 20:07   #18 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Thema uint vs int: das macht leider den falschen Unterschied

Link
Omega Psi ist offline   Mit Zitat antworten
Alt 19-01-2008, 20:29   #19 (permalink)
kalt...
 
Registriert seit: Dec 2007
Beiträge: 115
@ Omega Psi : danke nochmal, der Unterschied war mir schon bewusst, ich hab mich halt nur gewundert, warum adamtoons zuerst mit "is DisplayObjectContainer" prüft ob getChildAt(i) einer ist und dann nochmals dieses child, dass er mittels getChildAt(i) vorher schon auf den datentyp geprüft hat, casted...

ist das nicht doppelt gemoppelt?


und zu dem uint... eieiei... das hättst mir auch eher sagen können ich hab für mein aktuelles projekt ja fast NUR uint benutzt... OH GOTT!!!!!!!
icymonkey ist offline   Mit Zitat antworten
Alt 19-01-2008, 20:33   #20 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Ne, ist es nicht: Überprüfung auf Typ != Cast auf diesen Typ => zuerst prüfen, dann casten, sonst gibt's Ärger im Paradies.
Omega Psi ist offline   Mit Zitat antworten
Alt 19-01-2008, 20:40   #21 (permalink)
kalt...
 
Registriert seit: Dec 2007
Beiträge: 115
ok, danke! ich hab zwar noch immer keine 100%ige vorstellung davon, was der grund dafür ist, aber da hätt ich wohl mein informatikstudium nicht nachm ersten semster abbrechen sollen

aber ich werds mir merken und mich da mal informieren,

danke nochmal für deine Zeit!!!
icymonkey ist offline   Mit Zitat antworten
Alt 19-01-2008, 20:43   #22 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Das hängt damit Zusammen, dass Typecasts nicht implizit durchgeführt werden im strict Mode. Deswegen der explizite Typecast an der Stelle.
Omega Psi ist offline   Mit Zitat antworten
Alt 01-02-2012, 14:51   #23 (permalink)
Neuer User
 
Registriert seit: Feb 2009
Beiträge: 106
Hey ich habe die gleiche Problemstellung ... würde gerne alle children und unter children und alle unter unter children etc. eines movieclips entfernen. Bei den Beispielen hier bekomme ich irgendwie immer, dass der index außerhalb des Bereichs liegt ... ka ^^ ich hab dann das hier daraus gebastelt

Code:
private function removeAll(container:DisplayObjectContainer):void
{	
	for (var i:uint = 0; i < container.numChildren; i++)
	{
		if (container.getChildAt(0) is DisplayObjectContainer)
		{
			removeAll(DisplayObjectContainer(container.getChildAt(0)));
		}
		container.removeChildAt(0);
	}
}
das funktioniert aber leider nur halb. irgendwie bleiben reste bestehen ... kann mir jemand sagen wieso? ^^

vielen dank!

Geändert von le_unam (01-02-2012 um 14:52 Uhr)
le_unam ist offline   Mit Zitat antworten
Alt 01-02-2012, 15:10   #24 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Zitat:
Zitat von le_unam Beitrag anzeigen
das funktioniert aber leider nur halb. irgendwie bleiben reste bestehen ... kann mir jemand sagen wieso?
Bei Deine for-Schleife wird i immer größer und numChildren immer kleiner. Und das führt dazu, dass numChildren kleiner als i ist, sobald die Hälfte der Objekte entfernt wurde, was die Schleife beendet und die Hälte der Objekte zurücklässt.

Du solltest das so aufbauen, um zu verhindern, dass Du mit Deinem Index außerhalb des Bereichs landest:
ActionScript:
  1. import flash.display.DisplayObjectContainer;
  2.  
  3. private function removeAll(container:DisplayObjectContainer):void {
  4.     var subContainer:DisplayObjectContainer;
  5.     while (container.numChildren) {
  6.         subContainer = container.getChildAt(0) as DisplayObjectContainer;
  7.         if (subContainer) removeAll(subContainer);
  8.         container.removeChildAt(0);  
  9.     }
  10. }
Ich verstehe aber ehrlich gesagt nicht so ganz den Sinn dieser Rekursion! Wenn die Kinder weg sind, nehmen sie doch ihre Kinder mit. Was für einen Sinn macht es da noch die Enkel von den Kinden, die Urenkel von den Enkeln, usw. zu trennen

Eigentlich genügt es vollkommen die direkten Nachkommen zu entfernen. Und dafür reicht dieser Code:
ActionScript:
  1. private function removeAll(container:DisplayObjectContainer):void {
  2.     while (container.numChildren) container.removeChildAt(0);
  3. }
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!

Geändert von Martin Kraft (01-02-2012 um 15:17 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Alt 01-02-2012, 15:12   #25 (permalink)
Neuer User
 
Registriert seit: Feb 2009
Beiträge: 106
Zitat:
Zitat von Martin Kraft Beitrag anzeigen
Du solltest das so aufbauen, um zu verhindern, dass Du mit Deinem Index außerhalb des Bereichs landest:
ActionScript:
  1. import flash.display.DisplayObjectContainer;
  2.  
  3. private function removeAll(container:DisplayObjectContainer):void {
  4.     var subContainer:DisplayObjectContainer;
  5.     while (container.numChildren) {
  6.         subContainer = container.getChildAt(0) as DisplayObjectContainer;
  7.         if (subContainer) removeAll(subContainer);
  8.         container.removeChildAt(0);  
  9.     }
  10. }
Ich verstehe aber ehrlich gesagt nicht so ganz den Sinn dieser Rekursion! Wenn die Kinder weg sind, nehmen sie doch ihre Kinder mit. Was für einen Sinn macht es da noch die Enkel von den Kinden, die Urenkel von den Enkeln, usw. zu trennen
sprich wenn ich die ur-oma töte sind oma, mutter, tochter etc auch tot?

also sagen wir ich mache:

addChild(mc1);
mc1.addChild(mc2);
mc2.addChild(mc3);

dann reicht am ende ein:

removeChild(mc1);

um alles sauber zu entfernen?

Geändert von le_unam (01-02-2012 um 15:16 Uhr)
le_unam ist offline   Mit Zitat antworten
Alt 01-02-2012, 15:30   #26 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Zitat:
Zitat von le_unam Beitrag anzeigen
sprich wenn ich die ur-oma töte sind oma, mutter, tochter etc auch tot?
Quasi

Wobei diese Methapher hinkt. Erhellender finde ich es, sich die Anzeigeliste als Baum vorzustellen. Wenn Du da einen Ast absägst, hast Du gleichzeitig auch alle an diesem Ast hängenden Zweige und Blätter zum Baum getrennt.

Zitat:
Zitat von le_unam Beitrag anzeigen
dann reicht am ende ein:

removeChild(mc1);

um alles sauber zu entfernen?
Nach dieser Anweisung ist jedenfalls keines der Unterelemente mehr zu sehen.

Ob sie aber wirklich sauber entfernt (-> von der Garbage Collection gefressen) werden können, hängt nicht davon ab, wie oft man in welchen Tiefen removeChild ausführt, sondern davon, ob es noch irgendwelche Referenzen und Event-Listener gibt, die auf dieses Objekt zeigen.

mc1 z.B. ist so eine Referenz, die gelöscht werden sollte:
ActionScript:
  1. mc1 = null;
Und in den Unterobjekten registriert man am Besten einen Listener auf Event.REMOVE_FROME_STAGE, der dann seinerseits alle anderen lokal gesetzten Listener entfernt.
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!

Geändert von Martin Kraft (01-02-2012 um 15:31 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Alt 01-02-2012, 15:30   #27 (permalink)
+ Zimt & Zucker
 
Registriert seit: Mar 2006
Ort: hinterm Mond gleich links
Beiträge: 2.041
Zitat:
Zitat von le_unam Beitrag anzeigen
sprich wenn ich die ur-oma töte sind oma, mutter, tochter etc auch tot?
Es reicht die aktuelle Generation zu vernichten.
Ältere Generationen zu exhumieren, wieder zu beleben um sie zu töten wird von den meisten Racheklubs (zB "Vergissmeinnicht e.V." oder "Internationale Vergeltungsvermittlung GoiH") als übertrieben angesehen.

Es gibt da aber regionale Unterschiede.

Es reicht, das Gesamtpacket vom Diesseits abzunabeln um sie für den Sensenmann zu markieren.


Mehr zu dem Herrn mit schwarzer Kutte:
Understanding garbage collection in Flash Player 9 | Adobe Developer Connection
__________________
anbei Grüße vom milchreis: Viva la [Silb]
"Selbst wenn uns nur noch der Zynismus treibt, wir werden trotzdem einfach immer weiter gehen!"

[Von null auf Flash in einem Klick.] <<< klick
milchreis ist offline   Mit Zitat antworten
Alt 01-02-2012, 15:38   #28 (permalink)
Neuer User
 
Registriert seit: Feb 2009
Beiträge: 106
okay das gefällt mir alles sehr gut danke xD

reicht es das absolute familienoberhaupt zu "nullen"?

sind eventlistener auf die objekte das einzige was für den sensemann ausschlaggäbend ist?
sprich, sind keine eventlistener mehr vorhanden die auf das kind zeigen und die eltern tot, wird der leichnahm auf jeden fall entsorgt? oder gibt es noch mehr zu beachten?

kann man irgendwie prüfen ob der sensemann seinen job auch ordentlich erledigt hat?

danke für die antworten!



EDIT: Ah okay, hatte den link übersehen ... ich glaub ich verstehe es, danke fürs erste

Geändert von le_unam (01-02-2012 um 15:41 Uhr)
le_unam ist offline   Mit Zitat antworten
Alt 01-02-2012, 15:48   #29 (permalink)
Neuer User
 
Registriert seit: Feb 2009
Beiträge: 106
während des flash-films können mit hilfe verschiedener button verschiedene funktionen aufgerufen werden, die movieclips mit weiteren children etc erzeugen ... außerdem einige variablen erstellen und eventlistener erzeugen ... all das soll beim "schließen" dieser funktion wieder entfernt werden.

also remove ich den "master-movieclip".
würdet ihr sagen ich sollte die erstellten variablen und auch eventlistener in ein array packen und dann am ende mit hilfe einer schleife entfernen, oder wie glaubt ihr is der sinnvollste weg für sowas?

danke ;-)
le_unam ist offline   Mit Zitat antworten
Alt 01-02-2012, 16:02   #30 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
So lange Du außerhalb dieses Objekts keine Variablen, Arrays o.ä. hast, die in das Objekt zeigen, ist das nicht nötig. Es geht nur darum, alle Verbindungen zur »Außenwelt« zu kappen!
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!

Geändert von Martin Kraft (01-02-2012 um 16:03 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 16:24 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele