Flash memoryproblem
Hej eksperter.Jeg har et åndssvagt problem med Flash as3. Min SWF-fil bliver gradvist større og jeg fatter ikke, hvad årsagen er.
Projektet går ud på, at en række videoklip indlæses i serie vha. en XML-fil, der regelmæssigt indlæses og overskriver den forrige.
Eksempel:
<?xml version="1.0" encoding="utf-8"?>
<dataliste>
<budskab aktiv="ja">Dette er budskabet</budskab>
<flashfilm aktiv="ja" filmurl="spot09release.swf" visrulletekster="ja" />
<flashfilm aktiv="ja" filmurl="trailer.swf" visrulletekster="ja" />
<reklameblok aktiv="ja" filmurl="reklame.swf" visrulletekster="nej" />
</dataliste>
Det er de to "flashfilm"-tags, der i dette tilfælde skiftes til at køre.
Klippene er 3-5 MB store og interessant nok er det ca. størrelsen, det brugte hukommelsesområde forøges med ved hvert gennemløb.
2 metoder: naestefilm() og startLoad(filnavn) sørger for at indlæse filmene. Ved hvert gennemløb bliver et movieclip oprettet og fjernet igen - men tilsyneladende uden effekt.
De vigtigste dele af koden ser sådan ud - og jo, i øvrigt: Konstruktøren kalder metoden "opstart", der initialiserer variabler m.m. Her bliver også alle loaderklasser sat for at forsøge at finde årsagen til memoryproblemet.
private function opstart() {
rulletekst_mc.visible = false; // Start i udgangspunktet med at gøre budskabet usynligt
// Intervalmæssigt skal XML-listen genindlæses for at checke for ændringer
genindlaesningstimer = new Timer(100000);
genindlaesningstimer.addEventListener("timer", genindlaesXMLfil);
genindlaesningstimer.start();
sammenligner = new URLLoader();
sammenligner.addEventListener(Event.COMPLETE, sammenlignNu);
sammenligner.addEventListener(IOErrorEvent.IO_ERROR, sammenligningsfejl);
dataloader = new URLLoader();
dataloader.addEventListener(Event.COMPLETE, listeIndlaest);
dataloader.addEventListener(IOErrorEvent.IO_ERROR, indlaesningsfejl);
mLoader = new Loader();
mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
mLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, fejl);
scroller = new Timer(hastighed);
scroller.addEventListener("timer", modvenstre);
scroller.start();
reklametimer = new Timer(reklameinterval);
reklametimer.addEventListener("timer", indsaetReklame);
filmplaceholder_mc = new Filmplaceholder();
indlaesDataliste(dataliste);
}
public function naestefilm() {
removeChild(filmplaceholder_mc);
trace("Vis næste film");
if (filmpegepind < listen.flashfilm.length()-1) {
//trace("Vis næste film nu!");
filmpegepind++;
} else {
filmpegepind = 0;
}
//trace("Aktuel liste: "+listen);
startLoad(listen.flashfilm[filmpegepind].@filmurl);
}
private function startLoad(filnavn) {
// INDLÆS EN EKSTERN FILM
filmplaceholder_mc.x = 400;
filmplaceholder_mc.y = 400;
addChild(filmplaceholder_mc);
swapChildren(rulletekst_mc, filmplaceholder_mc);
if (listen.flashfilm[filmpegepind].@aktiv == "ja") {
// Hvis den aktuelle film skal vises...
mRequest = null;
mRequest = new URLRequest(filnavn);
mLoader.load(mRequest);
} else {
// Hvis den aktuelle film ikke er aktiv, skal funktionen kalde naestefilm, der igen kalder denne funktion - men forhåbentlig med nyt filnavn
naestefilm();
}
}
Kan nogen hjælpe?
