Hello everyone,
I wanted to build a simple UI using XMLLoader. I wasn't familiar with it, so I wanted to use
it for a project i'm working on, and I've run into a bit of an issue.
Basically, I have some nav items that i'm loading in from XML, and when you click on them
they load a window with a description in it that's stored in an XML attribute. My problem is when
I click on my nav item it loads the description but it doesn't target the correct desc and instead
loads all desc. attributes. How do I target the data correctly?
Thanks,
XML:
<?xml version="1.0" encoding="iso-8859-1"?>
AS3:
package {
import flash.display.*;
import flash.events.MouseEvent;
import flash.xml.*;
import com.greensock.*;
import com.greensock.easing.*;
import com.greensock.events.LoaderEvent;
import com.greensock.loading.ImageLoader;
import com.greensock.loading.LoaderMax;
import com.greensock.loading.XMLLoader;
public class Main extends MovieClip {
public var itemWin:MovieClip;
public var nbtns:MovieClip;
//public var navItems:Number = 5;
public var navCurrentY:Number;
public var navArry:Array = [];
public var navMc:MovieClip;
private var xmlLoader:XMLLoader;
private var xmlData:XML;
//private var loader:URLLoader;
private var navItems:Array = [];
//private var topPos:uint;
public function Main():void {
init();
}
public function init():void {
xmlLoader = new XMLLoader("../deploy/xml/data.xml", {onComplete:xmlCompleteHandler, onProgress:xmlProgressHandler, onError:errorHandler});
xmlLoader.load();
}
private function xmlCompleteHandler(evt:LoaderEvent):void {
xmlData = evt.target.content;
var imageData:XMLList = xmlData.image;
for each (var image:XML in imageData) {
trace("Image Name: " + image.@name);
navItems.push(image.@name);
nbtns = new navBtn();
nbtns.navTxt.text = image.@name;
nbtns.x = 115*navItems.length - (nbtns.width);
nbtns.alpha = 0;
navHolder.addChild(nbtns);
nbtns.desc = imageData.@desc;
//nbtns.image = imageData.@url;
//nbtns.name = imageData.@name;
navArry.push(nbtns);
nbtns.addEventListener(MouseEvent.CLICK, getItemWindow);
nbtns.addEventListener(MouseEvent.MOUSE_OVER, navBtnOver);
nbtns.addEventListener(MouseEvent.MOUSE_OUT, navBtnOut);
nbtns.buttonMode = true;
nbtns.mouseChildren = false;
animateButtons();
}
//trace("XML Content: " + evt.target.content);
}
private function xmlProgressHandler(evt:LoaderEvent):void {
trace("XML Progress: " + evt.target.progress);
}
private function errorHandler(evt:LoaderEvent):void {
trace("Error Handler: " + evt.target + ": " + evt.text);
}
public function animateButtons():void {
TweenMax.allTo(navArry, 1, {alpha:1}, 0.3);
}
public function navBtnOver(evt:MouseEvent):void {
navMc = MovieClip(evt.target);
TweenLite.to(navMc, 0.5, {alpha:0.2});
}
public function navBtnOut(evt:MouseEvent):void {
navMc = MovieClip(evt.target);
TweenLite.to(navMc, 0.5, {alpha:1});
}
public function getItemWindow(evt:MouseEvent):void {
navMc = MovieClip(evt.target);
itemWin = new ItemWindow();
itemWin.y = 140;
itemWin.x = stage.stageWidth/2 - (itemWin.width/2);
itemWin.alpha = 0;
itemWin.buttonMode = true;
addChild(itemWin);
TweenLite.to(itemWin, 1, {y:150, alpha:1});
//topPos = itemWin.numChildren - 1;
//itemWin.setChildIndex(itemWin.closeBtn, topPos);
itemWin.closeBtn.addEventListener(MouseEvent.CLICK, closeItemWin);
itemWin.closeBtn.buttonMode = true;
itemWin.closeBtn.mouseChildren = false;
TweenMax.allTo(navArry, 0.5, {alpha:0.2});
trace(evt.currentTarget.desc);
itemWin.thumbTxt.text = evt.currentTarget.desc;
/*switch(navMc.name) {
case "nbtns0":
trace("Nav Item 1 Clicked ");
//TweenLite.to(navMc, 0.5, {alpha:1});
itemWin.thumbTxt.text = windowDescs[0];
trace(itemWin.thumbTxt.text);
break;
case "nbtns1":
trace("Nav Item 2 Clicked ");
TweenLite.to(navMc, 0.5, {alpha:1});
break;
case "nbtns2":
trace("Nav Item 3 Clicked ");
TweenLite.to(navMc, 0.5, {alpha:1});
break;
case "nbtns3":
trace("Nav Item 4 Clicked ");
TweenLite.to(navMc, 0.5, {alpha:1});
break;
case "nbtns4":
trace("Nav Item 5 Clicked ");
TweenLite.to(navMc, 0.5, {alpha:1});
break;
}*/
//Disables all mouseEvents for nav items in navArry when itemWindow is added
trace("Nav Items Disabled");
for(var n in navArry) {
navArry[n].mouseEnabled = false;
}
}
public function closeItemWin(evt:MouseEvent):void {
TweenLite.to(itemWin, 1, {y:140, alpha:0, onComplete:removeItemWin});
TweenMax.allTo(navArry, 0.5, {alpha:1});
}
public function removeItemWin():void {
for(var p in navArry) {
navArry[p].mouseEnabled = true;
}
removeChild(itemWin);
itemWin = null;
}
}
}
thanks