Avatar billede thulstrup Nybegynder
26. marts 2003 - 10:37 Der er 7 kommentarer og
1 løsning

Start funktion med array

Jeg har en funktion til at preloade billeder med. Den bruges ved at angive billedstien samt hvilket movieclip billedet skal loades ind i:

preloadJPG("pics/billede01.jpg", "billedeHolder0");

Jeg har alle mine billedstier i en array. Hvordan bruger jeg arrayet til min preloader funktion?

Følgende virker ikke:
for (i=0; i<=billedeSti.length; i++) {
  createEmptyMovieClip("billedeHolder"+i, i);
  preloadJPG(billedeSti[i], "billedeHolder"+i);
}
Avatar billede nikolajdu Nybegynder
26. marts 2003 - 11:17 #1
hvordan ser resten ud?
Avatar billede thulstrup Nybegynder
26. marts 2003 - 11:51 #2
Hvad tænker du på nikolajdu? Preloader funktionen, eller hvad?
Avatar billede nikolajdu Nybegynder
26. marts 2003 - 12:35 #3
Umiddelbart er der intet her der ikke skulle virke efter hensigten. Ergo så må det enten være sammenhængen eller en fejl andetsteds ;-)
Avatar billede thulstrup Nybegynder
26. marts 2003 - 12:49 #4
Ok, du får lige hele svineriet. Strengen fra PHP ser f.eks sådan her ud:
&billedeSti=pics/pic01.jpg+pics/pic02.jpg+pics/pic03.jpg+

//
// tekstformat normal
normal = new TextFormat();
normal.font = "standard";
normal.size = 8;
normal.color = 0x666666;
//
// tekstformat fed
fed = new TextFormat();
fed.font = "standard_bold";
fed.size = 8;
fed.color = 0x666666;
//
// preload jpg prototype
MovieClip.prototype.preloadJPG = function(jpg, target) {
    _global.preloaderCount++;
    this.createEmptyMovieClip("preloader"+_global.preloaderCount, 100+_global.preloaderCount);
    var mc = this["preloader"+_global.preloaderCount];
    targetX = target._x+target._width/2-40;
    targetY = target._y+target._height/2-20;
    mc.createTextField("statusText"+_global.preloaderCount, 100, targetX, targetY, 150, 40);
    var tf = mc["statusText"+_global.preloaderCount];
    tf.type = "dynamic";
    tf.selectable = false;
    tf.embedFonts = true;
    tf.setNewTextFormat(fed);
    target.loadMovie(jpg);
    mc.onEnterFrame = function() {
        this.procent = Math.floor((target.getBytesLoaded()/target.getBytesTotal())*100);
        if (!isNan(this.procent) && target.getBytesTotal()>50) {
            tf.text = this.procent+"% loaded";
            this.clear();
            with (this) {
                lineStyle(1, 0x666666, 100);
                moveTo(targetX-3, targetY+17);
                lineTo(targetX+103, targetY+17);
                lineTo(targetX+103, targetY+26);
                lineTo(targetX-3, targetY+26);
                lineTo(targetX-3, targetY+17);
                endFill();
            }
            with (this) {
                beginFill(0x666666, this.procent);
                lineStyle(1, 0x666666, this.procent);
                moveTo(targetX, targetY+20);
                lineTo(targetX+procent, targetY+20);
                lineTo(targetX+procent, targetY+23);
                lineTo(targetX, targetY+23);
                lineTo(targetX, targetY+20);
                endFill();
            }
        } else {
            tf.text = "0% loaded";
        }
        if (this.procent == 100 && target.getBytesTotal()>50) {
            mc.removeMovieClip();
            delete this.onEnterFrame;
        }
    };
};
//
//
function loadBillede(katagori, valg) {
    loadBillede = new loadVars();
    loadBillede.load("billeder.php?katagori="+katagori+"&valg="+valg);
    loadBillede.onLoad = function(success) {
        if (success) {
            minVar = loadBillede.billedeSti;
            var arrVar = new Array();
            arrVar = minVar.split("+");
            for (i=0; i<=arrVar.length; i++) {
                createEmptyMovieClip("billedeHolder"+i, i);
                _root["billedeHolder"+i]._x = 200*i;
                // virker hvis jeg bruger loadMovie istedet for preloader funktionen
                //loadMovie(arrVar[i], "billedeHolder"+i);
                preloadJPG(arrVar[i], "billedeHolder"+i);
            }
        } else {
            trace("kan ikke loade billederne");
        }
    };
}
loadBillede('web', 'tidensmoebler');
Avatar billede petemc Nybegynder
26. marts 2003 - 13:53 #5
OK, jeg har prøvet denne kode.
Erstatte "+" med "," eller en anden delimiter. "+" can nemt blive til " " afhængig om text encoding.
"target" er en reserveret navn, kalde den "maal" isted for.
Den her virke, (billederne komme frem i hvert fald)

// preload jpg prototype
MovieClip.prototype.preloadJPG = function(jpg, maal) {
  _global.preloaderCount++;
    this.createEmptyMovieClip("preloader"+_global.preloaderCount, 100+_global.preloaderCount);
    var mc = this["preloader"+_global.preloaderCount];
    targetX = maal._x+maal._width/2-40;
    targetY = maal._y+maal._height/2-20;
    mc.createTextField("statusText"+_global.preloaderCount, 100, targetX, targetY, 150, 40);
    var tf = mc["statusText"+_global.preloaderCount];
    tf.type = "dynamic";
    tf.selectable = false;
    tf.embedFonts = true;
    tf.setNewTextFormat(fed);
    _root[maal].loadMovie(jpg);
    trace(maal+" loading "+jpg);
    mc.onEnterFrame = function() {
        this.procent = Math.floor((target.getBytesLoaded()/target.getBytesTotal())*100);
        if (!isNan(this.procent) && target.getBytesTotal()>50) {
            tf.text = this.procent+"% loaded";
            this.clear();
            with (this) {
                lineStyle(1, 0x666666, 100);
                moveTo(targetX-3, targetY+17);
                lineTo(targetX+103, targetY+17);
                lineTo(targetX+103, targetY+26);
                lineTo(targetX-3, targetY+26);
                lineTo(targetX-3, targetY+17);
                endFill();
            }
            with (this) {
                beginFill(0x666666, this.procent);
                lineStyle(1, 0x666666, this.procent);
                moveTo(targetX, targetY+20);
                lineTo(targetX+procent, targetY+20);
                lineTo(targetX+procent, targetY+23);
                lineTo(targetX, targetY+23);
                lineTo(targetX, targetY+20);
                endFill();
            }
        } else {
            tf.text = "0% loaded";
        }
        if (this.procent == 100 && target.getBytesTotal()>50) {
            mc.removeMovieClip();
            delete this.onEnterFrame;
        }
    };
};
//
//
function loadBillede(katagori, valg) {
    loadBillede = new loadVars();
    loadBillede.load("test.txt");
    loadBillede.onLoad = function(success) {
        if (success) {
            minVar = loadBillede.billedeSti;
            trace(minVar);
            var arrVar = new Array();
    arrVar = minVar.split(",");
            for (i=0; i<=arrVar.length; i++) {
                createEmptyMovieClip("billedeHolder"+i, i);
                _root["billedeHolder"+i]._x = 200*i;
                // virker hvis jeg bruger loadMovie istedet for preloader funktionen
                //loadMovie(arrVar[i], "billedeHolder"+i);
                preloadJPG(arrVar[i], "billedeHolder"+i);
            }
        } else {
            trace("kan ikke loade billederne");
        }
    };
}
loadBillede('web', 'tidensmoebler');
Avatar billede petemc Nybegynder
26. marts 2003 - 13:56 #6
her er "test.txt";

&billedeSti=pics/pic01.jpg,pics/pic02.jpg,pics/pic03.jpg


8)
Avatar billede thulstrup Nybegynder
26. marts 2003 - 17:01 #7
Så virker det. Jeg forstår bare ikke helt at det var det der gjorde udslaget, preloader funktionen virkede jo fint nok før hvis man skrev:

preloadJPG("pics/billede01.jpg", "billedeHolder0");

Tak for hjælpen!
Avatar billede petemc Nybegynder
26. marts 2003 - 17:10 #8
Det afgørende var
target.loadMovie(jpg);
fordi target er out of scope...
_root[target].loadMovie(jpg);
Det andre ting kan også give udoverskulig resulteter, men KUNNE virke.
Tak ;)
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