Avatar billede everclear Praktikant
11. december 2009 - 16:24 Der er 4 kommentarer

Vent på event er færdig

Jeg sidder og er igang med et slideshow som kan vise nogle overlægnings-billeder. Dvs. at til hvert slide, kan der høre x antal billeder, som skal loades sammen med. Disse skal så positioneres med x, y, bredde og højde.

Dette opnår jeg på følgende måde:

// Loop overlay images
var img:XML;
for each(img in imgs)
{
    var imageUrl:String        = img.url;
    var imagex:int        = int(img.x);
    var imagey:int        = int(img.y);
    var imageheight:uint    = uint(img.height);
    var imagewidth:uint        = uint(img.width);
                   
    _loader = new Loader();
    _loader.load(new URLRequest(imageUrl));
   
    _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event){imageLoaded(imagex, imagey, imagewidth, imageheight);});               
}

// Billede loadet
private function imageLoaded(imagex:int, imagey:int, imagewidth:uint, imageheight:uint):void
{
    _tempImage = _loader.content as Bitmap;
    var overlayImage:OverlayImage = new OverlayImage(_tempImage, imagex, imagey, imagewidth, imageheight);
           
    slideItem.AddOverlayImage(overlayImage);
    _imagesLoaded++;
           
    if(_imagesLoaded == _totalImages)
    {
        initView();
    }
}

Mit problem ligger dog i, at hvis jeg f.eks. har 2 overlægningsbilleder, så fyrer mit imageLoaded-event godt nok 2 gange; men fordi mit for-each loop fortsætter med at køre MENS mine billeder loader, så får jeg de forkerte værdier med til billedet.

Har jeg f.eks.

<overlayImage>
    <url>Images/4.jpg</url>
    <x>245</x>
    <y>234</y>
    <height>400</height>
    <width>400</width>
</overlayImage>
<overlayImage>
    <url>Images/5.jpg</url>
    <x>390</x>
    <y>689</y>
    <height>200</height>
    <width>200</width>
</overlayImage>

og udskriver f.eks. x-værdien i mit loop, så får jeg de rigtige værdier. Udskriver jeg dem i mit imageLoaded-event, så får jeg værdierne fra de sidste billede 2 gange. Jeg er rimelig sikker på, at det er fordi min kode fortsætter med at eksekvere - og det tager jo noget tid at loade billederne; men jeg har ingen ide om hvordan jeg skal undgå det. Det optimale ville jo være, at mit loop stoppede indtil billedet var helt loaded færdig.

Nogen bud? :)
Avatar billede Slettet bruger
11. december 2009 - 18:43 #1
Ville det letteste ikke være, bare at preloade billederne?
Avatar billede everclear Praktikant
11. december 2009 - 19:56 #2
Er ikke lige helt sikker på hvordan det er nemmeste at implementere i denne sammenhæng?
Avatar billede Slettet bruger
11. december 2009 - 20:37 #3
Jeg er ikke særligt erfaren indenfor hverken Flash eller Actionscript, og derfor er det ikke rigtigt muligt for mig at forestille mig en implementering. Når jeg tænker over det igen virker det heller ikke rigtigt som en løsning på dit problem. Jeg er ked af at jeg har været for hurtigt ude med en kommentar, uden at have læst spørgsmålet ordentligt igennem.

Som tidligere nævnt er jeg ikke en haj til Actionscript, og forstår ikke rigtigt variablers scope der i, men måske kunne en mulighed være, at definere et globalt array (i hvilken form det nu er lettest i Actionscript), inkludere en tæller i loopet, gemme de forskellige data i det tidligere definerede array, og så hente dem ud fra imageLoaded i samme orden.

Med fare for at virke endnu mere forvirrende end jeg i forvejen er, vil prøve at illustrere med et stykke (pseudo)kode.

[div]var imgInfo:array, counterFor:int, counterLoad;
for each(img in imgs)
{
    (...)
    global imgInfo, counterFor;
    imgInfo[counterFor * 4] = imagex;
    imgInfo[counterFor * 4 + 1] = imagey;
    (...)
    counterFor++;
    (...)
}
(...)
private function imageLoaded():void
{
    (...)
    global imgInfo, counterLoad;
    imagex = imgInfo[counterLoad * 4];
    imagey = imgInfo[counterLoad * 4 + 1];
    (...)
    counterFor++;
    (...)
}
Avatar billede hmanback Nybegynder
12. december 2009 - 13:33 #4
Send mig filerne igen, så vil jeg kigge på det her weekenden.
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