for loop and xml - how to point the right content in a XML file with a dynamically created button?
Hi Everybody,
as my first experience in AS3 I'm bulding a photo multigallery. In that gallery I have some buttons, each one pointing to its respective set of images.
Each button is created with the for loop, that picks the information from a XML file. From this XML I get the text of the button, the position etc. What I did with some sucess. But there is a scary problem: I don't know how to make each button load the respective and unique set of images.
I've tryied several different methods, with no effect, to make each loop to give to each button an unique identity to load the respective set of images.
I imagine that the solution pass by the use of arrays. I wrote some code, and I guess that I'm almost there (but not sure). Here is my AS3 code until now:
// CREATE MENU CONTAINER // var menuContainer:MovieClip = new MovieClip(); menuContainer.x=10; menuContainer.y=300; addChild(menuContainer); // CREATE IMAGES CONTAINER // var imagesContainer:MovieClip = new MovieClip(); imagesContainer.x=10; imagesContainer.y=10; addChild(imagesContainer); //// LOAD XML //// var xmlLoader:URLLoader = new URLLoader(); xmlLoader.addEventListener(Event.COMPLETE, whenLoaded); xmlLoader.load(new URLRequest("XML/roiaXML.xml")); var xml:XML; function whenLoaded(evt:Event):void { xml=new XML(evt.target.data); var mySetsList:XMLList=xml.children(); //// MENU BUTTONS //// // CREATE ARRAYS // var totalArray:Array = new Array(); var setNodesArray:Array = new Array(); var setNamesArray:Array = new Array(); // POSITIONING BUTTONS INSIDE MENU CONTAINER// var rowsQuantity:Number=3; var columnsQuantity:Number=Math.ceil(mySetsList.length()/rowsQuantity); var cellWidth:Number=160; // CREATE BUTTONS // for (var i:int=0; i< mySetsList.length(); i++) { var newSetButtonMC:setButtonMC=new setButtonMC(); //what do I do here to make it works? To give each button created a unique id. setNodesArray.push(i); //trace(setNodesArray); var imageNodesArray:Array = new Array(); for (var j:int=0; j<mySetsList.IMAGE.length(); j++) {
imageNodesArray.push(mySetsList.IMAGE
.attribute("imageTitle")); } totalArray.push(imageNodesArray); // newSetButtonMC.setButtonText.text=mySetsList.attribute("galeriaTitle"); newSetButtonMC.setButtonText.autoSize=TextFieldAutoSize.LEFT; var cellX:Number=Math.floor(i/rowsQuantity); var cellY:Number=i%rowsQuantity; newSetButtonMC.x=cellX*cellWidth; newSetButtonMC.y=cellY*(newSetButtonMC.height+10); newSetButtonMC.addEventListener(MouseEvent.CLICK, onClick); menuContainer.addChild(newSetButtonMC); } totalArray.push(setNodesArray); //// MENU BUTTONS ACTIONS //// function onClick(mevt:MouseEvent):void { trace(totalArray [0][0]); trace(totalArray [0][0]); // in the line above I achieved some success loading a specific info from XML. // but I don't know what to do with it. //what do I do here? To make each button to load its own node from XML. } }
Here is my XML:
<GALERIA galeriaTitle="galeria 01">
<IMAGE imageTitle="imageTitle01">feio.jpg</IMAGE>
<IMAGE imageTitle="imageTitle02">muitofeio.jpg</IMAGE>
<IMAGE imageTitle="imageTitle03">aindamaisfeio.jpg</IMAGE>
</GALERIA>
<GALERIA galeriaTitle="galeria 02">
<IMAGE imageTitle="imageTitle01">estranho.jpg</IMAGE>
<IMAGE imageTitle="imageTitle02">maisestranho.jpg</IMAGE>
<IMAGE imageTitle="imageTitle03">aindamaisestranho.jpg</IMAGE>
</GALERIA>
Thanks everyone . ABSTRATO