xml menu cu submenu

Intrebari despre Actionscript 3.0

xml menu cu submenu

Mesajde kem » Mar Iul 13, 2010 8:47 am

Salut,

am un menu cu submenu care arata asa:

Cod: Selectaţi tot
import caurina.transitions.Tweener;

//Save menu item's height to a constant variable
const ITEM_HEIGHT:Number = -25;

//Save the path to the XML file
var xmlPath:String = "menu.xml";

//The XML data will be inserted into this variable
var xml:XML;

//Set the floor (= y coordinate) for the menu items
//var floor:Number = stage.stageHeight - 35;
var igrec:Number = 15;

//We want to know which menu array is currently selected
var selectedMenu:Array;

//We want to keep track how many menus have been created
var menuCounter:uint = 0;

// Load the XML file
var loader = new URLLoader();
loader.load(new URLRequest(xmlPath));
loader.addEventListener(Event.COMPLETE, xmlLoaded);


//This function is called when the XML file is loaded
function xmlLoaded(e:Event):void {

    //Make sure we're not working with a null loader
    if ((e.target as URLLoader) != null ) {

        //Insert the loaded data to our XML variable
        xml = new XML(loader.data);

        //Ignore white space
        xml.ignoreWhitespace = true;

        //Call the function that creates the whole menu
        createMenus();
    }
}

//This function creates the menus
function createMenus():void {

    //Loop through the menus found in the XML file
    for each (var menu:XML in xml.menu) {

        //We create a menu for each menu found in the xml.
        //We pass the "menu" xml data as a parameter to the function.
        var menuItems:Array = createMenu(menu);
       

        //Position the menu items that are in the menuItems
        for (var i= 0; i< menuItems.length; i++) {

            //Set the x and y coordinates
            menuItems[i].y = igrec;
            menuItems[i].x = (menuCounter * 131) - 130;
           
            //Add the item to stage
            addChild(menuItems[i]);
        }
    }
}

//It returns all the menu items which belong to the created menu.
function createMenu(menu:XML):Array {

    //Create an array which contains all the items in this menu
    var menuArray:Array = new Array();

    //Loop through the items found in the menu
    for each (var subNume:XML in menu.subNume) {
       
        //Create a new menu item
        var menuItem:MenuItem = new MenuItem();

        //Set the item text
        menuItem.menuText.text = subNume.toString();
       
        //Add a link variable (the URL where this item should link to)
        menuItem.link = subNume.@link;
   
        //Add a mouse listener for each submenu
        menuItem.addEventListener(MouseEvent.CLICK, submenuClicked);
        menuItem.addEventListener(MouseEvent.MOUSE_OVER, submenuOver);
        menuItem.addEventListener(MouseEvent.MOUSE_OUT, submenuOut);

        //Set the menuItem to have no mouseChildres
        menuItem.mouseChildren = false;

        //Add the item to the menuArray
        menuArray.push(menuItem);
    } // END for
       
    //We also need to create the main MenuItem for the menu
    var mainItem:MenuItem = new MenuItem();

    //Set the mainItem to have no mouseChildren
    mainItem.mouseChildren = false;

    //Add the main item to menuArray
    menuArray.push(mainItem);

    //Save the array to which this mainItem belongs to.
    //We need this in the animation later on.
    mainItem.belongsToMenu = menuArray;

    //Set the "id" attribute to be the main item's text
    mainItem.menuText.text = menu. @ nume;
    mainItem.buttonMode = true;
   
    //Add CLICK listener for the mainItem
    mainItem.addEventListener(MouseEvent.CLICK, mainItemClicked);

   
    //Update the menuCounter since we just created a new menu
    menuCounter++;

    //Return the menuArray that contains all the items in this menu
    return menuArray;
} // END function CreateMenu

//////////////////////////////////////////////////////////////////////
function submenuClicked(e:Event):void {
trace(" apas submenu " + MenuItem);
//Get the item that dispatched the event
var item:MenuItem = e.target as MenuItem;
//Navigate to the URL that's assigned to the menu item
var urlRequest:URLRequest = new URLRequest(item.link);
navigateToURL(urlRequest);
}

function submenuOver(e:Event):void {
//Get the item that dispatched the event
var item:MenuItem = e.target as MenuItem;
Tweener.addTween(item.bg,{ _color:0x99CC00,  time:0.5 ,  transition:"easeOutSine"});
}

function submenuOut(e:Event):void {
//Get the item that dispatched the event
var item:MenuItem = e.target as MenuItem;
Tweener.addTween(item.bg,{ _color:0x333333, time:0.5 ,  transition:"easeOutSine"});
}
//////////////////////////////////////////////////////////////////////


//This function is called when a menu's mainItem is clicked
function mainItemClicked(e:Event):void {
    //Animate the previous menu down if there is one
    if (selectedMenu) {
        for (var i =0; i<  selectedMenu.length-1; i++) {
            Tweener.addTween(selectedMenu[i],{ alpha:0, x:stage.stageWidth,  time:1 ,  transition:"easeOutSine"});
        }
    } //END if

    //Get the menu where the mainItem is located
    var clickedMenu:Array = e.target.belongsToMenu;
       
    //Set the clickedMenu to be our selectedMenu
    selectedMenu = clickedMenu;

    //Loop through the items except for the last one which is the mainItem.
    //We don't animate the mainItem
    if (selectedMenu) {
    for (var j =0; j<  selectedMenu.length-1; j++) {

        //Save the item to a local variable
        var item = selectedMenu[j];
        selectedMenu[j].alpha = 0;
        selectedMenu[j].buttonMode = true; // activate the submenu HandMouse
        selectedMenu[j].x = -200;  // where the submenu start to fade in
        selectedMenu[j].y = 45;

        //Calcute the target y coordinate for the item.
        var targetX:Number = 1 + 131 * (1 + j );  // distance beatween submenu

        //Tween an item up.
        Tweener.addTween(item,{ alpha:1, x:targetX, time:0.5 , transition:"easeOutSine"});
        }
    }
} //END if




xml-ul arata asa:

Cod: Selectaţi tot
<menus>

<menu nume="HOME">
<subNume="http://google.com>Google</subNume>
</menu>

<menu nume="ABOUT US">
<subNume link="http://google.com">google</subNume>
<subNume link="http://yahoo.com">yahoo</subNume>

</menu>
</menus>


Daca doresc ca pentru butonul home sa nu mai am submenu cu un xml de forma :

Cod: Selectaţi tot
<menus>
<menu nume="HOME">
<url link="http://yahoo.com"/>
</menu>
<menu nume="ABOUT US">
<subNume link="http://google.com">google</subNume>
<subNume link="http://yahoo.com">yahoo</subNume>
</menu>
</menus>


in as3 care ar trebui sa fie abordarea ?, sincer sunt blocat total...orice sugestie este bine venita.

Multumesc frumos anticipat.
kem
 
Mesaje: 13
Membru din: Joi Apr 02, 2009 12:40 pm

Re: xml menu cu submenu

Mesajde alexxcz » Mar Iul 13, 2010 12:45 pm

Adica atunci cand dai click pe butonul Home sa te duca direct la pagina care o pui tu la URL? Daca da incearca sa modifici in xml asa:
Cod: Selectaţi tot
<menus>
<menu nume="HOME" link="http://yahoo.com" />

<menu nume="ABOUT US">
<subNume link="http://google.com">google</subNume>
<subNume link="http://yahoo.com">yahoo</subNume>
</menu>
</menus>

Ma gandesc ca poti avea atributul "link" si intr-un nod de tip menu, dar nu m-am uitat peste partea de cod inca. Incearca si spune-mi ce rezultat ai.
“First, solve the problem. Then, write the code.”
(John Johnson)
Avatar utilizator
alexxcz
 
Mesaje: 620
Membru din: Lun Iul 21, 2008 9:12 pm
Localitate: Braila

Re: xml menu cu submenu

Mesajde kem » Mar Iul 13, 2010 6:04 pm

Multumesc de raspuns dar nu tine numai de xml...

function mainItemClicked(e:Event):void {

eu zic ca in functia asta trebuie declarat ceva dar nu mai am nici o idee, mi-am epuizat toate "if"-urile si "for"-urile, desigur prost gandite si ele...

}

Cu xml-ul propus de tine acelasi rezultat, nici o eroare ( chiar daca nu ai inchis </menu> ) dar nu merge.

Multumesc de raspuns,
kem
 
Mesaje: 13
Membru din: Joi Apr 02, 2009 12:40 pm

Re: xml menu cu submenu

Mesajde alexxcz » Mar Iul 13, 2010 8:14 pm

Ba am inchis nodul, uita-te mai atent, doar ca nu am folosit <menu> </menu> ci am folosit <menu ... />
Cat despre cod, daca modifici in functia aia o sa se aplice tuturor butoanelor din meniu. Oricum, codul e cam greu de inteles mai ales ca nu stiu cum arata rezultatul final. Dar de unde ai luat/gasit sau cine ti-a facut meniul, nu ai si o documentatie?
“First, solve the problem. Then, write the code.”
(John Johnson)
Avatar utilizator
alexxcz
 
Mesaje: 620
Membru din: Lun Iul 21, 2008 9:12 pm
Localitate: Braila

Re: xml menu cu submenu

Mesajde kem » Mie Iul 14, 2010 7:25 am

Pai ai un mc cu Class MenuItem si in el un text field cu instance name "menuText" + menu.xml

asa ai rezultatul final.
kem
 
Mesaje: 13
Membru din: Joi Apr 02, 2009 12:40 pm

Re: xml menu cu submenu

Mesajde Barna Biro » Mar Iul 20, 2010 5:51 pm

Vad ca nu ai prea multa experienta cu treburile astea. Nu ar fi mai OK daca ai uploada sursele ca sa putem sa vedem cu ochii nostri cum sta treaba? Cred ca ar progresa treaba mult mai repede daca am avea acces la toate sursele. In cazul in care nu vrei/nu poti sa uploadezi sursele, atunci sau incearca sa dai mai multe detalii sau lasa un ID de Skype, Yahoo, MSN, etc. ... poate ia cineva legatura cu tine si rezolvati problema repede.
Imagine
Avatar utilizator
Barna Biro
Administrator
 
Mesaje: 2037
Membru din: Vin Iul 25, 2008 1:06 am
Localitate: Lucerne, Switzerland


Înapoi la ActionScript 3.0

Cine este conectat

Utilizatorii ce navighează pe acest forum: Niciun utilizator înregistrat şi 2 vizitatori

cron