Else one. How can I understand when the image is loaded or all images is loaded. To change some boolean, like : imageLoaded:boolean=true or imagesLoaded:boolean=true.
On 17 фев, 15:21, metSyS <[email protected]> wrote: > Thanks!=) ... really helps! Thanks a lot. Trying to create gallery. > Now learning XML/ and trying to create dynamic 3D gallery. And this > was last problem wich I have to solve. > > On 17 фев, 15:07, miroslav <[email protected]> wrote: > > > > > Hi, > > > You have problem with using elementCounter public property. > > In showXML event handler you increment the elementCounter in for loop > > and then using it as index for the materialArray in ImageLoaded. > > Problem is that the loading of images is asynchronous operation and > > when the ImageLoaded handler gets called the elementCounter will be > > equal to xmlList.length(). > > One quick solution for this would be to use one tempArray for holding > > the references to picLoader.contentLoaderInfo and when the ImageLoaded > > gets called you would use tempArray.indexOf( e.target ) as the index > > for the materialArray. > > > Example: > > > public var imageLoaders:Array = []; > > ... > > public function showXML(e:Event):void > > { > > xmlData=new XML(e.target.data); > > xmlList=xmlData.children(); > > xmlListLength=xmlList.length(); > > for (var i:int=0; i < xmlListLength; i++) > > { > > var picLoader:Loader=new Loader(); > > picLoader.load(new > > URLRequest(xmlList[i].attributes()[0])); > > > picLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, > > ImageLoaded); > > > imageLoaders.push( picLoader.contentLoaderInfo ); > > } > > } > > > private function ImageLoaded(e:Event):void > > { > > var planeMaterial:BitmapMaterial = new > > BitmapMaterial(Cast.bitmap(e.target.content)); > > > materialArray[imageLoaders.indexOf(e.target)]=planeMaterial; > > > // Removing event handlers is good practice > > > LoaderInfo(e.target).removeEventListener(Event.COMPLETE, ImageLoaded); > > > } > > > On Feb 17, 11:41 am, metSyS <[email protected]> wrote: > > > > I have some problem. I'm loading some *.xml, get from there some > > > attribute in wich I have URL to my pictures. It works correct. After > > > it I want to load pictures and write them into array. I think the > > > problem is that cycle works faster then images loading. I need to run > > > the cycle and complete the step only when image is loaded and have > > > wrote into array. Sorry for my bad english. Need help. > > > > public var elementCounter:int=0; > > > ... > > > public function showXML(e:Event):void > > > { > > > xmlData=new XML(e.target.data); > > > xmlList=xmlData.children(); > > > xmlListLength=xmlList.length(); > > > > for (var i:int=0; i < xmlList.length(); i++, > > > elementCounter++) > > > { > > > var picLoader:Loader=new Loader(); > > > picLoader.load(new > > > URLRequest(xmlList[i].attributes()[0])); > > > > > > picLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, > > > ImageLoaded); > > > } > > > } > > > > private function ImageLoaded(e:Event):void > > > { > > > var planeMaterial:BitmapMaterial = new > > > BitmapMaterial(Cast.bitmap(e.target.content)); > > > materialArray[elementCounter]=planeMaterial; > > > }
