Avatar billede slammer12 Nybegynder
09. januar 2004 - 22:43 Der er 15 kommentarer

simpel preloader til .jpg

Jeg forsøger at lave en simpel preloader til et slideshow. Det skal ende med at alle billeder i slideshowet bliver preloaded inden start. Jeg fik et tip om at hente alle billeder ind i hvert sit MovieClip. Det har jeg gjort i nedenstående script.

Hvordan får jeg et movieclip til at blive usynligt, når det er oprettet med createEmptyMovieClip ? Således at brugeren ikke kan se billederne før det går i gang.

Hvordan får jeg en %-tæller eller en loading-bar på ? (variabel: ToBeLoaded ?)

Hvorfor viser trace ToBeLoaded altid 0 ?

----------------------------------------------------------------------------------------

toBeLoaded=pic1_mc.getBytesTotal()+pic2_mc.getBytesTotal()+pic3_mc.getBytesTotal()+pic4_mc.getBytesTotal();

this.createEmptyMovieclip(pic1_mc), 1;
this.createEmptyMovieclip(pic2_mc), 1;
this.createEmptyMovieclip(pic3_mc), 1;
this.createEmptyMovieclip(pic4_mc), 1;
this.loadMovie("pic1.jpg", "pic1_mc");
this.loadMovie("pic2.jpg", "pic2_mc");
this.loadMovie("pic3.jpg", "pic3_mc");
this.loadMovie("pic4.jpg", "pic4_mc");
trace (toBeLoaded)

-----------
Hilsen
Slammer
Avatar billede slammer12 Nybegynder
09. januar 2004 - 22:44 #1
Mit script til slideshowet ser således ud:

antalpics = 4;
waiting = false;
currentAlpha = 100;
nextAlpha = 0;
interval = 3; //antal sek.
currentPic = 1;
//kan ændres til 1
step = 17;
//-------------------
for (i=1; i<=antalpics; i++) {
    _root.attachMovie("pic", "pic"+i, i);
    _root["pic"+i].loadMovie(i+".jpg");
    _root["pic"+i]._alpha = 0;
    _root["pic"+i]._x = 0;
    _root["pic"+i]._x = 0;
}
//pic1._alpha = 100;
_root.onEnterFrame = function() {
    if (currentAlpha>=100) {
        if (!waiting) {
            startTime = Math.round(getTimer()/1000);
            waiting = true;
        } else if (waiting && Math.round(getTimer()/1000)>=startTime+interval) {
            waiting = false;
            currentAlpha -= step;
            nextAlpha += step;
        }
    } else if (currentAlpha<=0) {
        currentPic++;
        if (currentPic>antalpics) {
            currentPic = 1;
        }
        currentAlpha = 100;
        nextAlpha = 0;
    } else {
        currentAlpha -= step;
        nextAlpha += step;
    }
    if (currentPic == antalpics) {
        _root["pic"+currentpic]._alpha = currentAlpha;
        _root.pic1._alpha = nextAlpha;
    } else {
        _root["pic"+currentPic]._alpha = currentAlpha;
        _root["pic"+(currentPic+1)]._alpha = nextAlpha;
    }
};
Avatar billede lokum Nybegynder
09. januar 2004 - 23:03 #2
Din toBeLoaded-variabel skal jo opdateres hele tiden (i onEnterFrame/frame-loop)...

Resten kunne sådan cirka være:

loadedSoFar =pic1_mc.getBytesLoaded()+pic2_mc.getBytesLoaded()+pic3_mc.getBytesLoaded()+pic4_mc.getBytesLoaded();

percent = toBeLoaded/(loadedSoFar/100);

this._yscale = percent; //hvor "this" er din loaderbar...
  if (loadedSoFar == toBeLoaded) {
      _root.play(); // hændelse når din loads er færdige
  }

Mht. de usynlige MC's med loadede JPG's, så har jeg selv valgt at smide MC'et væk (ditMC._x = -5000) og sætte det på sin rette plads (ditMC._x = ditMC_oprindelig_x_var). Det er fusket, men virker!

((o;
Avatar billede lokum Nybegynder
09. januar 2004 - 23:06 #3
Altså: "sætte det på sin rette plads... når JPG er færdigloadet."
Avatar billede slammer12 Nybegynder
09. januar 2004 - 23:08 #4
Helt præcist hvor skal toBeLoaded variablen stå?
Avatar billede slammer12 Nybegynder
09. januar 2004 - 23:11 #5
Jeg forstår (heller) ikke hvad jeg skal med mine MC's?
Måske har du allerede lugtet at jeg er nybegynder i Flash?!?
Avatar billede lokum Nybegynder
09. januar 2004 - 23:48 #6
Det er da lidt af et script du roder med som nybegynder. (o;

Ved ikke helt hvordan din film ser ud... Men du skal lave et MC med din "loaderbar" (fx bare en rød bjælke, til at starte med). Dette MC skal du placere i en frame FØR dit "slideshow"-script. På MC'et (altså IKKE i en frame) placerer du flg. script:

onClipEvent(enterFrame) {
  toBeLoaded=_root.pic1_mc.getBytesTotal()+_root.pic2_mc.getBytesTotal()+_root.pic3_mc.getBytesTotal()+_root.pic4_mc.getBytesTotal();
  loadedSoFar =_root.pic1_mc.getBytesLoaded()+_root.pic2_mc.getBytesLoaded()+_root.pic3_mc.getBytesLoaded()+_root.pic4_mc.getBytesLoaded();
  percent = toBeLoaded/(loadedSoFar/100);

  this._yscale = percent; //hvor "this" er din loaderbar...
  if (loadedSoFar == toBeLoaded) {
      _root.play();
  }
}

Bemærk at jeg har indsat "_root." på stierne til dine JPG-mc's, da jeg formoder de ligger i roden af din film. Og ligesådan "_root.play" til sidst...

Jeg har ikke afprøvet det, men det er ikke så kompliceret. (o;
Avatar billede lokum Nybegynder
09. januar 2004 - 23:58 #7
Selv om det umiddelbart er lidt fusket gjort, så kunne du på samme "loader MC" indsætte flg.:

onClipEvent(load) {
  for (i=1; i<=ditAntalPics; i++) {
      _root["pic"+i+"opr_x"] = _root["pic"+i]._x;
      _root["pic"+i]._x = -5000;
  }
}

Og erstatte if-sætningen i tidligere script, med denne:

if (loadedSoFar == toBeLoaded) {
  for (i=1; i<=ditAntalPics; i++) {
      _root["pic"+i]._x = _root["pic"+i+"opr_x"];
  }
  _root.play();
}

(Husk at erstatte "ditAntalPics" med antallet af pic MC'er begge steder).
Avatar billede slammer12 Nybegynder
10. januar 2004 - 00:07 #8
Hvad gør de to sidste scripts du sendte?
Avatar billede lokum Nybegynder
10. januar 2004 - 00:14 #9
Ja, de skulle gerne hhv. (når dit MC starter = "load") placere alle dine JPG MC'er/pic MC'er i -5000 på x-aksen.
Og dernæst, når alt er loadet (når loadedSoFar er lig med toBeLoaded) hive dem tilbage til deres oprindelig placering (på x-aksen).

Den oprindelige placering "gemmes" i variablerne _root["pic"+i+"opr_x"] - som altså er _root.pic1opr_x når det er _root.pic1_mc. Hovsa... du skal lige rette alle _root["pic"+i] til:
_root["pic"+i+"_mc"]
(3 steder i ovenstående script).
Avatar billede lokum Nybegynder
10. januar 2004 - 00:16 #10
Du må også gerne erstatte denne:
if (loadedSoFar == toBeLoaded)
med denne:
if (loadedSoFar == toBeLoaded && toBeLoaded > 100)
Avatar billede slammer12 Nybegynder
10. januar 2004 - 00:22 #11
Nu bliver det kompliceret!
Jeg har lagt min .fla og .swf fil på denne adresse
http://home1.stofanet.dk/boelarsen/

Mit script til selve slideshowet er øverst på denne side. Jeg bliver meget glad hvis du vil "kaste et blik" på dette :-)
Avatar billede lokum Nybegynder
10. januar 2004 - 00:27 #12
Kigger lige på det... (o;
Avatar billede slammer12 Nybegynder
10. januar 2004 - 00:32 #13
e-mail: boelarsen@stofanet.dk
Avatar billede lokum Nybegynder
10. januar 2004 - 14:54 #14
Jeg har mailet din fla med preloader og slideshow igår ved et-tiden. (o;
Avatar billede slammer12 Nybegynder
12. januar 2004 - 23:22 #15
Nu bliver det kompliceret (synes jeg ihvertfald). Jeg har udvidet slideshowet til at omfatte 48 billeder. Men der er et eller andet galt med preloaderen. Den går simpelthen i stå. Måske er der noget i vejen med den måde den tæller bytesloaded og total?

mn .fla og .swf ligger på http://home1.stofanet.dk/boelarsen/

///Boe
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