Speicherproblem in Flash

Fragen und Antworten zu Pano2VR in deutscher Sprache
Post Reply
grafgarf
Posts: 17
Joined: Thu Apr 03, 2008 11:34 pm

Servus ...

ich habe ein Speicherproblem in Flash ... die Arbeitsspeicherauslastung wird mit jedem mal ein Panoramabild laden höher ...

ich benutze einen Container, in den ich die Panoramas lade... das ganze sieht so aus:

var PanoramaContainer:MovieClip = new MovieClip()
PanoramaContainer.name = "PanoramaContainer"
Hauptfilm.addChild(PanoramaContainer)

function PanoramaLaden(Panorama){
if (IstEinPanoramaAufDerBuehne == true){
PanoramaLoeschen() //falls ein Panorama auf der Bühne ist, wird dieses gelöscht (s.u.)
}
var loader:Loader = new Loader();
var url:String = Panopfad+Nullen(Panorama,3)+"_pano.swf";
var urlReq:URLRequest = new URLRequest(url);
var vr:MovieClip = new MovieClip()
function finished_loading (event:Event) {

}
function initHandler(event:Event):void {
IstEinPanoramaAufDerBuehne = true //Markierung, dass ein Panorama im Container ist
Hauptfilm.vr = MovieClip(loader.content);
Hauptfilm.vr.pano.setWindowSize(zielgroesse_x,zielgroesse_y);
}
loader.contentLoaderInfo.addEventListener(flash.events.Event.COMPLETE, finished_loading);
loader.contentLoaderInfo.addEventListener(Event.INIT, initHandler);
loader.x = 0
loader.y = 0
loader.load(urlReq);
var temp:MovieClip = MovieClip(Hauptfilm.getChildByName("PanoramaContainer"))
temp.addChild(loader);
}

function PanoramaLoeschen(){
Hauptfilm.vr.pano.cleanup(); //was passiert hier?
var temp:MovieClip = MovieClip(Hauptfilm.getChildByName("PanoramaContainer"))
Hauptfilm.removeChild(temp) //den Container löschen (dann müsste der Inhalt ja auch weg sein)
IstEinPanoramaAufDerBuehne = false //Markierung, dass der Container wieder leer ist
var PanoramaContainer:MovieClip = new MovieClip() //neuen Container erstellen
PanoramaContainer.name = "PanoramaContainer"
Hauptfilm.addChild(PanoramaContainer)
}

wie bekomme ich das Panorama aus dem Speicher ... ich vermute der BitmapData Fehler (ein paar Posts zurück) kommt auch daher ....
grafgarf
Posts: 17
Joined: Thu Apr 03, 2008 11:34 pm

habe mich mal in diversen foren rumgetrieben ... das ist ein generelles falsh (lustiger verschreiber) problem ... sobald noch irgendein listener oder verweis im bzw. zum geladenen objekt aktiv ist, bekommt man das objekt nicht aus dem speicher ... :roll: ... die cleanup-routine muss also richtig gut aufräumen, da man von aussen da nicht so gut dran kommt ...

ausserdem bekomme ich bei removChild(vr) immer eine Fehlermeldung :x
User avatar
thomas
Chief Gnome
Posts: 2611
Joined: Fri Sep 01, 2006 3:56 pm
Location: Vienna, Austria
Contact:

Ich werde mir das mit der genauer anschauen und ich hoffe ich schaffe es das dann die Cleanup Funktion wirklich alles erwischt.
MfG, Thomas
grafgarf
Posts: 17
Joined: Thu Apr 03, 2008 11:34 pm

vielleicht hilft dir das bei der lösungsfindung: (Tool zum finden von EnterFrame und Childs - und wer findet, kann auch löschen)

function allekinderauflisten(ziel){
var kinder:Array = new Array()
var enterFrameObjekte:Array = new Array()
function kinderschleife (ziel){
var i:int = 0;
try{
var n:int = ziel.numChildren
} catch (e:*){var n:int = 0}

while ( i < n) {
var temp = ziel.getChildAt(i)
kinder.push([temp.name, temp])
if (temp.hasEventListener(Event.ENTER_FRAME)){
enterFrameObjekte.push([temp.name, temp])
}
kinderschleife(temp)
i++
}
}
kinderschleife(ziel)
return "Childs:" + kinder+ " EnterFrameObjekte: " + enterFrameObjekte;
}

trace(allekinderauflisten(root))
Post Reply