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? :)