dynamisk slideshow bliver sløvere
Jeg har et dynamisk slideshow der er baseret på denne kode: http://actionscript.dk/artikler/?a=35Jeg har 10 billeder der bliver hentet ind via xml. Det kører egentlig fint nok i første runde, men når billederne vises forfra begynder sldeshowet at blive lidt mere trægt og hakkende. Jo færre billeder der er, jo bedre kører det. Men der skal være 10 og de fylder ca. 30 kb hver (514x500 px).
Kan man gøre noget for at "rense" hukommelsen i swf'en eller noget?
------------ Kode ---------------
// Variabler der kan ændres
var xmlSti:String = "slideshow.xml";
var alphaSkridt:Number = 5; // Værdi _alpha skal ændres med ved ind-/udtoning
// Variabel erklæringer
var xmlKilde:XML; // Holder XML-objektet
var billedeHenter:MovieClipLoader; // Holder MovieClipLoader-objektet
var billeder:Array; // Holder stierne til billederne
var nummerNu:Number; // Nummer billede der skal vises/bliver vist nu
var sidsteNummer:Number; // Nummer billede der sidst blev vist/skal udtones
var tonInd:Boolean = false; // Angiver om billedet skal tones ind
var tonUd:Boolean = false; // Angiver om sidste billede skal tones ud
var henter:Boolean = false; // Angiver om der hentes et billede
// Initialiserer slideshowet - indlæser variabler
function init() {
billeder = []; // Opretter et array til at holde stierne til billederne
billedeHenter = new MovieClipLoader(); // Objekt til at hente billeder
billedeHenter.addListener(this); // Bruger dette movieclip som Listener
xmlKilde = new XML(); // Opretter et nyt XML objekt
xmlKilde.ignoreWhite = true; // Skal ignorere blanktegn
// funktionen xmlLoadHandler skal kaldes når XML-filen er blevet hentet
xmlKilde.onLoad = xmlLoadHandler;
xmlKilde.load(xmlSti); // Henter xml-filen
// Kalder funktionen forigeBillede() når der klikkes på venstreKnap
venstrePil.onRelease = forigeBillede;
// Kalder funktionen naesteBillede() når hojreKnap klikkes
hojrePil.onRelease = naesteBillede;
_root.mc_slideshow.attachMovie("mc_overgang","ov1",999);
_root.mc_slideshow.ov1._x = 611;
_root.mc_slideshow.ov1._y = 119;
var mit_overganginterval = setInterval(overgang, 4000);
function overgang() {
_root.mc_slideshow.ov1.gotoAndPlay("go");
}
loadingBar._visible = false; // Skjuler loadingbaren
}
// Viser billedet med pågældende nummer
function visBillede(nummer:Number) {
// Hvis der tones ud, skal det billede der tones ud bare skjules helt
if(tonUd) {
this["img" + sidsteNummer]._alpha = 0;
}
// Hvis billedet er hentet så ton det frem
if (this["img" + nummer]) {
tonInd = true;
}
// Hvis der ikke er et billede hentet endnu så hent det
if (nummerNu == undefined) {
hentBillede(nummer);
} else {
// Ton ud og vent på at billedet bliver hentet
sidsteNummer = nummerNu;
tonUd = true;
}
nummerNu = nummer;
}
// Henter billede med pågældende nummer
function hentBillede(nummer:Number) {
// Hvis den allerede er i gang med at hente et billede, så
// annuller dette
if(henter){
billedeHenter.unloadClip(this["img" + nummerNu]);
this["img" + nummerNu].removeMovieClip();
}
// Opret et nyt movieclip til at hente billedet ind i
var mc = createEmptyMovieClip("img" + nummer, nummer);
// Hent billedet ind i movieclippet
billedeHenter.loadClip(billeder[nummer], mc);
henter = true;
loadingBar._visible = true; // Vis loadingbaren
loadingBar._xscale = 0;
}
// Viser næste billede
function naesteBillede() {
var num = nummerNu;
// Hvis nuværende billede er det sidste, start forfra
if(++num == billeder.length) {
num = 0;
}
visBillede(num);
}
// Viser forige billede
function forigeBillede() {
var num = nummerNu;
// Hvis nuværende billede er det første, spring til det sidste
if(--num < 0) {
num = billeder.length - 1;
}
visBillede(num);
}
// Funktion der kaldes i hvert frame
function onEnterFrame() {
// Hvis der skal tones ind
if (tonInd) {
// Toner nuværende billede ind
this["img" + nummerNu]._alpha += alphaSkridt;
if(this["img" + nummerNu]._alpha >= 100) {
this["img" + nummerNu]._alpha = 100;
tonInd = false;
}
}
// Hvis der skal tones ud
if (tonUd) {
// Toner sidste billede ud
this["img" + sidsteNummer]._alpha -= alphaSkridt;
if(this["img" + sidsteNummer]._alpha <= 0){
this["img" + sidsteNummer]._alpha = 0;
// Hvis næste billede ikke er hentet, så hent det
if (!this["img" + nummerNu]) {
hentBillede(nummerNu);
}
tonUd = false;
}
}
if (henter) {
var mc = this["img" + nummerNu];
var bytesLoaded = mc.getBytesLoaded();
var bytesTotal = mc.getBytesTotal();
// bytesTotal kan være 0 eller -1, hvis den ikke er begyndt at
// hente endnu, dette vil give fejl, og derfor skal percentLoaded
// bare sættes til 0
var percentLoaded = bytesTotal > 0 ? bytesLoaded/bytesTotal*100 : 0;
// Skalér loadingbaren mens der hentes
loadingBar._xscale = percentLoaded;
}
}
// Kaldes når XML-filen er hentet
function xmlLoadHandler(success) {
// Hvis filen blev hentet ordentligt
if (success) {
// Finder alle <image> tag'sene
var billedNodes:Array = this.firstChild.childNodes;
var i:Number;
// Finder alle stierne til billederne og lægger dem i 'billeder'
for (i=0; i<billedNodes.length; i++) {
billeder.push(billedNodes[i].attributes.src);
}
visBillede(0); // Viser første billede
}
}
// Kaldes når et billede er hentet
function onLoadInit(targetMC:MovieClip) {
targetMC._alpha = 0; // Skjuler billedet
tonInd = true; // Starter med at tone billedet ind
henter = false;
loadingBar._visible = false; // Skjuler loadingBaren
}
// Kalder initialiseringsfunktionen og starter slideshowet
init();
