Yritän tehdä preloaderia fläshille, joka lataa kuvia jpeg-tiedostoista. Preloader toimii ihan hyvin, jos se kerkee lataamaan kuvat ennen ensimmäistä looppia.
1 frame:
// lataa pikkukuvat loadMovie("omaprojekti_kuvat/image001_thumb.jpg", kuva1); loadMovie("omaprojekti_kuvat/image002_thumb.jpg", kuva2); loadMovie("omaprojekti_kuvat/image003_thumb.jpg", kuva3); loadMovie("omaprojekti_kuvat/image004_thumb.jpg", kuva4); loadMovie("omaprojekti_kuvat/image005_thumb.jpg", kuva5); loadMovie("omaprojekti_kuvat/image006_thumb.jpg", kuva6); loadMovie("omaprojekti_kuvat/image007_thumb.jpg", kuva7); loadMovie("omaprojekti_kuvat/image008_thumb.jpg", kuva8); loadMovie("omaprojekti_kuvat/image009_thumb.jpg", kuva9); loadMovie("omaprojekti_kuvat/image010_thumb.jpg", kuva10); loadMovie("omaprojekti_kuvat/image011_thumb.jpg", kuva11); loadMovie("omaprojekti_kuvat/image012_thumb.jpg", kuva12);
2 frame:
onEnterFrame = function() { frame.text = _currentframe; total = 0; total += kuva1.getBytesTotal(); total += kuva2.getBytesTotal(); total += kuva3.getBytesTotal(); total += kuva4.getBytesTotal(); total += kuva5.getBytesTotal(); total += kuva6.getBytesTotal(); total += kuva7.getBytesTotal(); total += kuva8.getBytesTotal(); total += kuva9.getBytesTotal(); total += kuva10.getBytesTotal(); total += kuva11.getBytesTotal(); total += kuva12.getBytesTotal(); valmiina = 0; valmiina += kuva1.getBytesLoaded(); valmiina += kuva2.getBytesLoaded(); valmiina += kuva3.getBytesLoaded(); valmiina += kuva4.getBytesLoaded(); valmiina += kuva5.getBytesLoaded(); valmiina += kuva6.getBytesLoaded(); valmiina += kuva7.getBytesLoaded(); valmiina += kuva8.getBytesLoaded(); valmiina += kuva9.getBytesLoaded(); valmiina += kuva10.getBytesLoaded(); valmiina += kuva11.getBytesLoaded(); valmiina += kuva12.getBytesLoaded(); pros = valmiina/total*100; valmis.text = Math.floor(pros)+"%"; ifFrameLoaded(41) { if(pros == 100) { gotoAndStop(41); } } }
40. frame:
gotoAndPlay(2);
Keyframet siis frameilla 1, 2, 40 ja 41 (joka siis itse "elokuva"). Preloader toimii oikein, kunnes päästään framelle 40. Tämän jälkeen prosenttitekstiin tulee lukemaan NaN%, ja se looppaa sitä preloaderia loputtomiin. Jos kuitenkin laitan fps:n niin pieneksi, että se kerkiää lataamaan kuvat ennen framelle 40 pääsyä, niin homma toimii oikein.
Miten tällänen tulisi korjata?
Kannattaa tarkistaa, että getBytesTotal() on suurempi kuin 0. Selainten erilaisten ominaisuuksien takia, voi olla, ettei latausta ole edes aloitettu.
Myös tuo "ifFrameLoaded(41) {" rivi on hieman outo, luulisi että puuttuva sulku aiheuttaisi virheilmoituksen.
Lebe80 kirjoitti:
Kannattaa tarkistaa, että getBytesTotal() on suurempi kuin 0. Selainten erilaisten ominaisuuksien takia, voi olla, ettei latausta ole edes aloitettu.
Myös tuo "ifFrameLoaded(41) {" rivi on hieman outo, luulisi että puuttuva sulku aiheuttaisi virheilmoituksen.
Koodi toimii ihan oikein, mutta kun mennään kakkosframelle uudestaan, niin sen jälkeen se ei toimi. Nuo luvut on ihan oikein siihen asti.
Minun mielestäni tuo ifFrameLoaded on joku flashin ihan oma lauseke. Kysessä ei siis ole normi if-lauseke. Näin flash-opettaja ainakin opetti.
Jos laitan kakkosframeen ykkösframen sisällön, eli nuo loadmoviet, niin se vaan jää looppaamaan jotain tiettyä lukua, esim. 0-13% jos simuloin jollain tietyllä latausnopeudella. Tämä sen takia, että se aloittaa joka kerta lataamaan kuvia uudestaan. Tuo loadMovie-hässäkkä on kuitenkin ykkösframella, eikä flashi näytä muistavan ensimmäisen kierroksen jälkeen, että kuvia edes olisi aloitettu lataamaan.
Laitetaan tähän nyt vielä, että getBytesTotal ja getBytesLoaded menee undefinediksi kun tullaan tohon kakkosframelle uudestaan.
Ehkei sun movieClippejä löydy enää silloin, kun tullaan uudelleen kakkosframeen.
Tosiaankin, ifFrameLoaded(framenumber) oli kuin olikin oma funktio, joskin poistunut Flash 5 -versiossa ja sitä uudemmissa.
Lebe80 kirjoitti:
Ehkei sun movieClippejä löydy enää silloin, kun tullaan uudelleen kakkosframeen.
Tosiaankin, ifFrameLoaded(framenumber) oli kuin olikin oma funktio, joskin poistunut Flash 5 -versiossa ja sitä uudemmissa.
Ihan hyvin kyllä on pelittänyt CS3-versiossa.
Nuo movie clipit on eri layerillä, ja ne luodaan framella 1. Toinen keyframe tällä layerillä on tuolla 41.
Preloader looppaa siis kokoajan frameja 2 - 40. Kun toisen kerran framelle 2, niin mihin ne movieClipit sieltä nyt mystisesti häviäisi? Tätä olen yrittänyt oikeastaan selvittää.
Laitapa trace("kuva1: "+kuva1)
jos kuva1 -muuttujaa/movieClippiä ei ole/löydy, niin pitäisi tulostaa kuva1: undefined.
kuva1: _level0.kuva1
Antaa tollasta. Eli siellä se näyttää olevan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.