Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 14-07-2010, 14:24   #1 (permalink)
Neuer User
 
Registriert seit: Mar 2002
Beiträge: 71
Question SWF entladen

Hallo Zusammen,

ich dacht der Code wäre fast fertig. Jetzt habe ich aus den zusammen gesuchten Threads über das Thema removeChild heraus gelesen, daß ich wohl mit dem Rücken zur Wand stehe.

Ich lade externe SWFs ein, aber werde sie nicht mehr los. Kann mir einer einen Gedankenanstoß geben wo ich falsch abgebogen bin?

PHP-Code:
import flash.display.*;
import flash.net.URLRequest;
import flash.events.Event;

var 
vr:MovieClip = new MovieClip;
var 
loader:Loader = new Loader();

function 
initHandler(event:Event):void {
    
trace("initHandler: " event);
    
vr MovieClip(loader.content); // cast 'DisplayObject' to 'MovieClip'
    
vr.isFlash10=false// Disable Flash 10 rendering if the container is Flash 9
}

function 
initPanorama(e:Event) {
    
trace ("echo");
    if ((
vr!=null) && (vr.pano!=null)) {
        
trace ("echo 2");
        
vr.pano.setWindowSize(200,100); // resize the window
        
vr.pano.setWindowPos(50,0); // reposition
        
removeEventListenerEvent.ENTER_FRAME initPanorama);
    }
}

function 
load_swf(evt:MouseEvent) {
    
addEventListenerEvent.ENTER_FRAME initPanorama);
    
loader.contentLoaderInfo.addEventListener(Event.INITinitHandler);
    
loader.load(new URLRequest("VR/pano1-a.swf"));
    
addChild(loader);
}

btn1.addEventListener(MouseEvent.CLICK,load_swf);

function 
unload_swf(evt:MouseEvent) {
    
vr.cleanup();
    
trace(numChildren); 
    
removeChild(loader);
    
trace(numChildren); 
}

btn2.addEventListener(MouseEvent.CLICK,unload_swf); 

Geändert von skaddii (14-07-2010 um 14:32 Uhr)
skaddii ist offline   Mit Zitat antworten
Alt 14-07-2010, 22:57   #2 (permalink)
Neuer User
 
Registriert seit: May 2010
Beiträge: 87
es gibt zwar die Methode Loader.unload() aber ich bin mir nicht ganz sicher ob es das ist was du meinst.

Die Frage ist was macht dein "VR/pano1-a.swf"? Je nach dem wie das aufgebaut ist kann es natürlich sein das nicht alles weg ist wenn du den loader mit removeChild entfernst.

Mal am Rande bemerkt: du fügst bei jedem mouse-klick einen neuen initHandler zur contentLoaderInfo hinzu, ist das denn beabsichtigt? Ausserdem finde ich die Methode mit dem ENTER_FRAME zur Initialisierung deines Panoramas auch sehr merkwürdig.
NilsK ist offline   Mit Zitat antworten
Alt 15-07-2010, 10:18   #3 (permalink)
Neuer User
 
Registriert seit: Mar 2002
Beiträge: 71
Hallo NilsK,

wopala, den initHandler entferne ich eigentlich mit dem zweiten Button. Hatte den Code ein bischen aufgeärumt bevor ich ihn hier gepostet habe, da ist die Zeile mit weg gekommen..

Ich geb dir völlig recht die ENTER_FRAME function ist recht grausam hier, leider sträubt sich das SWF (ein 360° panorama). Ich kann zb mit dem setPan command den Pan der Sicht im Panorama steuern, allerdings erst wenn es initialisiert ist. Die geschiet aber nicht im ersten Frame der geladenen SWF, somit muss ich warten bis vr.pano!=null ist.

Was deine zweite Frage ist, ja im geladenen SWf gibt es auch noch "pano" was ich an "vr" anhänge. Zumindest verstehe ich das so, rein schauen kann ich in die geladene SWf leider nicht.

Geändert von skaddii (15-07-2010 um 10:52 Uhr)
skaddii ist offline   Mit Zitat antworten
Alt 15-07-2010, 11:11   #4 (permalink)
Neuer User
 
Registriert seit: May 2010
Beiträge: 87
Hi skaddii,

Vielleicht solltest du es mal mit einem eigenen SWF versuchen und schauen ob dein Code damit funktioniert.

Wenn ja, dann wäre es evtl. möglich das das Panorama irgendetwas oberhalb seines Root-Objektes plaziert (z.B. auf der Stage oder so..) Liese sich dass herausfinden? (Debugger oder so)
NilsK ist offline   Mit Zitat antworten
Alt 15-07-2010, 11:56   #5 (permalink)
Neuer User
 
Registriert seit: Mar 2002
Beiträge: 71
Oh entschuldige, ich habe wohl ein bischen am Thema vorbei geredet.

Der Code funktioniert soweit. Ich lade die SWF und gebe ihr Parameter mit auf den Weg (pos,size,pan,etc...). Dann schmeiss ich das Child wieder raus und weg ist die SWF vom Bildschirm. Da aber der Inhalt von vr und vr.pano nicht null ist wird beim erneuten laden die IF-Abfrage von initPanorama sofort ausgeführt. Was wiederum zu früh ist und die Parameter die ich mitgeben möchte ins leere laufen..

Ich weiss nur leider nicht was ich alles entladen und removen muss damit der GC den ganzen mist entfernt.
skaddii ist offline   Mit Zitat antworten
Alt 15-07-2010, 14:18   #6 (permalink)
Neuer User
 
Registriert seit: May 2010
Beiträge: 87
hmm "normalerweise" kann man den gc nicht einfach so anstoßen (würde in deinem fall eh nichts bringen, mehr dazu gleich). Es gibt einen Trick den gc anzuwerfen, das würde ich aber nur für debug-zwecke machen

Zu deiner Lösung:
alles was du tun musst ist nach dem vr.cleanup() noch vr auf null zu setzen, also:

Code:
vr.cleanup();
vr = null;
Dann sollte dein Enter-Frame-Init-Ding wieder funzen. Deswegen hätte es auch nichts gebracht den GC anzuwerfen, da ja vr noch das Objekt beinhaltet und somit nicht entfernt werden würde.

Geändert von NilsK (15-07-2010 um 14:19 Uhr)
NilsK ist offline   Mit Zitat antworten
Alt 15-07-2010, 14:53   #7 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.496
Zitat:
Zitat von skaddii Beitrag anzeigen
Ich weiss nur leider nicht was ich alles entladen und removen muss damit der GC den ganzen mist entfernt.
generell musst du
... alle eventlistener entfernen. (removeEventListener)//aber da seh ich keine eventlistener
... das ding aus der displaylist nehmen (removeChild)//hast du
... jeden verweis (vr = null//hat nils ja schon gesagt
... loader entladen (unload)//das ebenso

die garbage collection springt aber nicht unbedingt sofort an. bei mir steigt der ram immer um etwa 10 mb an bevor er wieder abfällt. wenn das nicht passiert, solltest du wirklich nochmal genauer nachsehen.

was natürlich sein kann ist, dass in der geladenen swf noch sonstwelche listener aktiv sind.
wenn cleanup (ich vermute das ist dafür da) nicht ausreichen sollte (oder auch so) kann ich dir statt unload nur unloadAndStop() empfehlen. das räumt nach möglichkeit alles weg, was irgendwie geht, stoppt sounds, netstreams und und und
Zitat:
This feature is especially useful when unloading unknown 3rd party content.
mfg

sx
__________________

flintfabrik.de

Geändert von shin10 (15-07-2010 um 15:04 Uhr)
shin10 ist offline   Mit Zitat antworten
Alt 15-07-2010, 17:09   #8 (permalink)
Neuer User
 
Registriert seit: Mar 2002
Beiträge: 71
Oahh sauber, vielen lieben Dank euch beiden. Es fehlte schlicht und einfach vr = null;. Ich dachte wenn nichts mehr in vr drin ist, wäre es automatisch null...

Grüße
skaddi
skaddii 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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Flash CS4] swf entladen zwilland Flash Einsteiger 2 31-01-2010 12:27
[Flash CS3] MC Entladen wizzardking Flash Einsteiger 2 17-05-2009 19:23
MC entladen Barzy ActionScript 1 2 04-03-2004 17:14
entladen Mathias Flash 4 und Flash 5 1 22-09-2003 18:14


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

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


Copyright ©1999 – 2012 Marc Thiele