2011-01-12 64 views
0

我想做一个Xml图像菜单,按钮点击去特定的框架标签。Actionscript 3与For循环的XML菜单

循环工作,图像和文本加载没有问题。

我的问题:

  • 项目没有在舞台(仅 最后一个XML项)中心;

  • 按钮点击所有按钮去 到相同的标签(在最后一个xml项目上的标签 );

我的代码:

变量:

//CREATE VARIABLES FOR XML 
var columns:Number; 
var my_total:Number; 
var my_menu:XMLList; 
var item_label:String; 
var x_counter:Number = 0; 
var y_counter:Number = 0; 

加载XML,我解释意见万物的作品或不:

//LOAD XML 
var myXMLLoader:URLLoader = new URLLoader(); 
myXMLLoader.load(new URLRequest("xml.xml")); 
myXMLLoader.addEventListener(Event.COMPLETE, processXML); 

function processXML(e:Event):void 
{ 
    var myXML:XML = new XML(e.target.data); 

    //DEFINE THE LENGTH OF THE MENU ITEMS (WORKS WELL) 
    my_menu = myXML.ITEM; 
    my_total = my_menu.length(); 
    columns = myXML. @ COLUMNS; 

    for (var i:Number = 0; i < my_total; i++) 
    { 
     //CREATE THE LOOP FOR MOVIE CLIP THAT I HAVE IN LIBRARY WITH THE CLASS "menu_item" 
     var MC:MovieClip = new menu_item(); 
     var loadIMG:Loader = new Loader; 
     // trace(MC); GIVE ME ALL THE XML ITEMS SO WORKS GOOD 
     addChild(MC); 

     //To CENTER ALL OBJECTS IN MC (NOT WORKS- ONLY CENTERS THE LAST ITEM OF THE XML) 
     function resizeHandler(e:Event):void 
     { 
      MC.x = (MC.stage.stageWidth/2) - (MC.width/2); 
      MC.y = (MC.stage.stageHeight/2) - (MC.height/2); 
     } 
     stage.addEventListener(Event.RESIZE, resizeHandler); 
     stage.dispatchEvent(new Event(Event.RESIZE)); 

     //DISPLAY MENU ITEMS IN A GRID WITH COLUMNS (WORKS WELL) 
     MC.x = (MC.width+10)*x_counter; 
     MC.y = (MC.height+100)*y_counter; 

     if (x_counter + 1 < columns) 
     { 
      x_counter++; 
     } 
     else 
     { 
      x_counter = 0; 
      y_counter++; 
     } 

     //TO LOAD IMAGES AND TEXT FOR THE MENU (WORKS WELL) 
     loadIMG.load(new URLRequest (my_menu[i][email protected])); 
     MC.container_mc.img_mc.addChild(loadIMG); 
     MC.container_mc.title_mc.text = my_menu[i]. @ TITLE; 

     //TEST 
     MC.name = "mc" + i; 
     loadIMG.name = "image" + i; 

     //ON BUTTON CLICK GO TO LABEL NAME IN XML (NOT WORKS, ALL ITEMS GOES TO THE SAME AND LAST LABEL IN XML) 
     MC.addEventListener(MouseEvent.CLICK, callFull); 

     //var test = my_menu[i.target.name][email protected]; //(FAILED TEST TO TARGET THE LABELS) 
     var go_labels = my_menu[i]. @ LABEL; 

     function callFull(e:MouseEvent):void 
     { 
      labels_mc.gotoAndStop(go_labels); 

     } 


    } 
} 

XML:

<MENU COLUMNS="2"> 
    <ITEM IMAGE="img/1.jpg" TITLE="title 1" LABEL="label 1"></ITEM> 
    <ITEM IMAGE="img/2.jpg" TITLE="title 2" LABEL="label 2"></ITEM> 
    <ITEM IMAGE="img/3.png" TITLE="title 3" LABEL="label 3"></ITEM> 
    <ITEM IMAGE="img/4.png" TITLE="title 4" LABEL="label 4"></ITEM>       
</MENU> 

感谢

+0

您应该从for循环中删除函数。 – robertp 2011-01-12 11:50:24

回答

1

我发现一对夫妇的错误在你的代码,试图迅速解决这些问题,请参见下面,让我知道它是如何工作了。

//CREATE VARIABLES FOR XML 
var columns:Number; 
var my_total:Number; 
var my_menu:XMLList; 
var item_label:String; 
var x_counter:Number = 0; 
var y_counter:Number = 0; 

//LOAD XML 
var myXMLLoader:URLLoader = new URLLoader(); 
myXMLLoader.load(new URLRequest("xml.xml")); 
myXMLLoader.addEventListener(Event.COMPLETE, processXML); 

function processXML(e:Event):void 
{ 
    var myXML:XML = new XML(e.target.data); 

    //DEFINE THE LENGTH OF THE MENU ITEMS (WORKS WELL) 
    my_menu = myXML.ITEM; 
    my_total = my_menu.length(); 
    columns = myXML. @ COLUMNS; 

    for (var i:Number = 0; i < my_total; i++) 
    { 
     //CREATE THE LOOP FOR MOVIE CLIP THAT I HAVE IN LIBRARY WITH THE CLASS "menu_item" 
     var MC:MovieClip = new menu_item(); 
     MC.id = i; 
     MC.label = my_menu[i]. @ LABEL; 
     MC.name = "mc" + i; 

     //DISPLAY MENU ITEMS IN A GRID WITH COLUMNS (WORKS WELL) 
     MC.x = (MC.width+10)*x_counter; 
     MC.y = (MC.height+100)*y_counter; 

     if (x_counter + 1 < columns) 
     { 
      x_counter++; 
     } 
     else 
     { 
      x_counter = 0; 
      y_counter++; 
     } 

     var loadIMG:Loader = new Loader; 
     loadIMG.name = "image" + i; 

     MC.container_mc.img_mc.addChild(loadIMG); 
     MC.container_mc.title_mc.text = my_menu[i]. @ TITLE; 

     addChild(MC); 

     //ON BUTTON CLICK GO TO LABEL NAME IN XML (NOT WORKS, ALL ITEMS GOES TO THE SAME AND LAST LABEL IN XML) 
     MC.addEventListener(MouseEvent.CLICK, callFull); 
     //TO LOAD IMAGES AND TEXT FOR THE MENU (WORKS WELL) 
     loadIMG.load(new URLRequest (my_menu[i][email protected])); 

    } 

    stage.addEventListener(Event.RESIZE, resizeHandler); 
    stage.dispatchEvent(new Event(Event.RESIZE)); 
} 

    function callFull(e:MouseEvent):void 
    { 
     //e.currentTarget should return the MC instance you clicked 
     e.currentTarget.labels_mc.gotoAndStop(e.currentTarget.label); 

    } 

    //To CENTER ALL OBJECTS IN MC (NOT WORKS- ONLY CENTERS THE LAST ITEM OF THE XML) 
    function resizeHandler(e:Event):void 
    { 
     var i:uint = 0; 
     for (; i < my_total; i++) 
     { 
      this["mc" + i].x = stage.stageWidth/2 - this["mc" + i].width/2; 
      this["mc" + i].y = stage.stageHeight/2 - this["mc" + i].height/2; 
     } 
    } 
+0

我在这一行有一个错误:(this [“mc”+ i] .x = stage.stageWidth/2) - (this [“mc”+ i] .width/2); – Sbml 2011-01-12 12:19:47