webForumDet fria alternativet

Förladda alla ext.bilder ifrån mapp?

Flash

8 svar · 715 visningar · startad av krokodilen

Medlem sedan juni 200776 inlägg
Frågan#1

Tjena!

Håller på med en portfolio där jag i visningsdelen använder mig utav en komponent (flashnifties - XML Flash Gallery) som laddar in externa bilder (ifrån mappen "/images") via XML.

Och som det är nu så laddas bilderna in var för sig när man besöker just denna undersida. Men min önskan är att dessa bilders inladdning bakas in i min preloader som jag har i min main timeline, så att de lägger sig i cacheminnet och då minskar laddtiden just vid öppningssekvensen av denna undersida.

Vill alltså ladda in alla bilder som finns en viss mapp ("/images") på en och samma gång. Ska alltså inte visas eller dyl. bara förladdas för att sedan gå vidare till frame 4 där objekten för sidan finns. Bara så det hamnar i cachet kort och gott!

Finns det någon bra lösning på detta, och hur går jag isåfall tillväga?

Tacksam för alla svar!

Medlem sedan dec. 20002 526 inlägg
#2

det finns ju lite olika sätt man kan lösa detta på...
skulle nog kört att du laddar in bilderna i "holders" när man besöker sidan (dessa holders kanske du kan lägga i en array, så du lätt kan nå dom), och kör att dom inte visas när dom laddat (dvs att dom ligger bara på scenen å göttar till sig), samtidigt får du ju på nåt sätt informera besökaren att detta sker, kanske "bild 1/10" laddas.. eller något sånt. När allt sen laddats in, kör då igång din sajt, sen när man är på sektionen med bilderna så har du ju dom där, visa, fada in etc.. ? :)

Medlem sedan juni 200776 inlägg
#3

Ok, det låter ju som om det hade varit en mycket bra lösning. :) Nu är jag fortfarande ganska ny inom as, så man skulle inte kunna få en liten hint om hur denna kod skulle se ut? :OO

Kanske skulle kunna komplettera koden jag använder idag till preloadern som ligger på frame 1 i _root:

stop();
this.onEnterFrame = function() {
	var amount:Number = this.getBytesLoaded() / this.getBytesTotal() *100;
	this.preloader.pre_bar._xscale = amount;
	this.preloader.pre_num.text = Math.round(amount) + "%";
	if (amount == 100) {
		this.gotoAndPlay (2);
		delete this.onEnterFrame;
	}
}

Ha d gott och tack för svar!

Medlem sedan dec. 20002 526 inlägg
#4

okej. hm. lite åt detta håll då, vet ju inte riktigt var du läser in din xml?
men utgår från att du har den "infon".

1. ladda in xml, och din huvudflashfil.
2. när xml är laddat, påbörja inladdning för varje bild (som jag visar nedan typ)
3. kör på :)

stop();

var loaded:Number = 0;
var imgs:Array = new Array("img1.jpg", "img2.jpg", "img3.jpg"); //från xml:en då såklart, med sökvägar till bilderna.

this.onEnterFrame = function() {
	var amount:Number = this.getBytesLoaded() / this.getBytesTotal() *100;
	this.preloader.pre_bar._xscale = amount;
	this.preloader.pre_num.text = Math.round(amount) + "%";
	if (amount == 100)
	 {
		if(loaded == imgs.length)
		{
			this.gotoAndPlay (2);
			delete this.onEnterFrame;
		}
		else
		{
			this.preloader.pre_num.text = "Laddar bild " + loaded + " av totalt " + imgs.length;
		}
	}
}

var holderImages:MovieClip = _root.createEmptyMovieClip("imgsHolder", _root.getNextHighestDepth());

for(var i:Number = 0; i < imgs.length; i++)
{
	var imgHolder:MovieClip = holderImages.createEmptyMovieClip("holder_" + i, holderImages.getNextHighestDepth());
	imgHolder.loadMovie(imgs[i]);
	imgHolder.onEnterFrame = checkImgProgress;
}

function checkImgProgress():Void
{
	var loaded:Number = this.getBytesLoaded();
	var total:Number = this.getBytesTotal();
	var perc:Number = Math.round(loaded/total)*100);

	if(perc == 100 && this._width > 0)
	{
		delete this.onEnterFrame;
		loaded++;
	}
}
Medlem sedan juni 200776 inlägg
#5

Ok, ska testa :).
Hade sedan tänkt att bara uppdatera via xml-filen, men blir det så att jag måste ändra i denna kod då också? (tänkte på Array'en med sökvägarna till bilderna).

Tack, ha d!

Medlem sedan dec. 20002 526 inlägg
#6

nej, alltså den arrayen fylls ju med den information den får tag på via xml:en, och loopar igenom den för att göra rätt saker.

Medlem sedan juni 200776 inlägg
#7

aha, så det man då bara skriver är:

var imgs:Array = new Array();

har jag fattat det rätt då?

gott nytt! :birp

Medlem sedan juni 200776 inlägg
#8

Hej igen!

Får det att fungera till en viss grad, men problemet är att jag vill slippa länka till varje bild i Array'n nedan.

crisse6: Du pratade något om att den fylls med informationen ifrån xml:en, hur gör jag så att den gör det?

var imgs:Array = new Array("img1.jpg", "img2.jpg", "img3.jpg"); //från xml:en då såklart, med sökvägar till bilderna.
Medlem sedan juni 200776 inlägg
#9

Jag försöker en gång till :)
Har fortfarande inte fått ngt grepp om att det "fylls på" med info ifrån xml'en. Får bara just de bilderna jag anger i as att visas. Hade varit grymt om du crisse eller ngn annan kunde ryck in och ge mig en hjälpande hand återigen. :)

250 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)