Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: muu kieli: ActionScript (flash): preloader-ongelma

Sivun loppuun

punppis [11.12.2008 09:40:06]

#

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?

Lebe80 [11.12.2008 10:40:42]

#

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.

punppis [11.12.2008 11:37:29]

#

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.

punppis [11.12.2008 12:49:48]

#

Laitetaan tähän nyt vielä, että getBytesTotal ja getBytesLoaded menee undefinediksi kun tullaan tohon kakkosframelle uudestaan.

Lebe80 [11.12.2008 14:35:57]

#

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.

punppis [11.12.2008 20:37:56]

#

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ää.

Lebe80 [11.12.2008 22:34:03]

#

Laitapa trace("kuva1: "+kuva1)
jos kuva1 -muuttujaa/movieClippiä ei ole/löydy, niin pitäisi tulostaa kuva1: undefined.

punppis [12.12.2008 11:41:08]

#

kuva1: _level0.kuva1

Antaa tollasta. Eli siellä se näyttää olevan.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta