Avatar billede breon Nybegynder
23. november 2006 - 22:37 Der er 1 løsning

dynamisk slideshow bliver sløvere

Jeg har et dynamisk slideshow der er baseret på denne kode: http://actionscript.dk/artikler/?a=35

Jeg 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();
Avatar billede breon Nybegynder
25. november 2006 - 19:30 #1
Jeg lukker igen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester