• home
  • forum
  • my
  • kt
  • download
  • Advanced XML Menu with Actionscript 3

    Author: 2009-05-10 13:46:05 From:

    In this tutorial I will teach you how to create an advanced XML menu. We will first set up everything ready in Flash, then create the XML file and finally add some ActionScript 3 for the functionality. Hope you enjoy the tut!

    Note: You need TweenMax

    Setting up the environment

    1. Create a new document of size 400×350.

    2. First, let’s create a menu item. Draw a rectangle of size 40×40. Convert it into a movie clip named “menuItem”. Set the registration point to the bottom left corner. I used a 4 pixels wide white stroke and for the fill #ff8800.

    3. Inside the menu item movie clip, create a new layer and add a dynamic text field in the center of the menu item. Set the text-align to center. Type some number in the text field, e.g. “1″. I used a font size of 16 for my textfield.

    Menu Item

    4. Embed the numberals in the text field.

    Embedding numerals in Flash

    5. Give the text field an instance name of “menuText“.

    6. Linkage the menu item movie clip to a class named “MenuItem“. If you don’t know how to linkage movie clips, please see step 4 from the External Classes tutorial.

    7. Delete the menu item from the stage. We will create all the items dynamically with XML and ActionScript 3.

    Creating the XML

    8. Create a new text file and type the following.

    <?xml version="1.0" encoding="utf-8"?>
     
    <menus>
     
    	<menu id="1">
    		<item>1.1</item>
    		<item>1.2</item>
    	</menu>
     
    	<menu id="2">
    		<item>2.1</item>
    		<item>2.2</item>
    		<item>2.3</item>
    		<item>2.4</item>
    	</menu>
     
    	<menu id="3">
    		<item>3.1</item>
    		<item>3.2</item>
    		<item>3.3</item>
    		<item>3.4</item>
    	</menu>
     
    	<menu id="4">
    		<item>4.1</item>
    		<item>4.2</item>
    		<item>4.3</item>
    	</menu>
     
    </menus>

    9. Save the file as “flash_menu.xml“.

    Moving to ActionScript 3

    10. Type the following in the first frame of your Flash movie. Feel free to change the XML filepath to match your settings!

    //Import TweenMax for animation
    import gs.*;
    import gs.easing.*;
    import gs.plugins.*;
    TweenPlugin.activate([GlowFilterPlugin]);
     
    //Save menu item's height to a constant variable
    const ITEM_HEIGHT:Number = 50;
     
    //Save the path to the XML file
    var xmlPath:String = "http://flashmymind.com/xml/flash_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 - 20;
     
    //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 = floor;
    			menuItems[i].x = -30 + menuCounter * 80;
     
    			//Add the item to stage
    			addChild(menuItems[i]);
    		}
    	}
    }
     
    //This function creates a single menu (= one vertical menu).
    //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 menuItems:Array = new Array();
     
    	//Loop through the items found in the menu
    	for each (var item:XML in menu.item) {
     
    		//Create a new menu item
    		var menuItem:MenuItem = new MenuItem();
     
    		//Set the item text
    		menuItem.menuText.text = item.toString();
     
    		//Set the menuItem to have no mouseChildres
    		menuItem.mouseChildren = false;
     
    		//Add the item to the menuArray
    		menuItems.push(menuItem);
    	}
     
    	//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
    	menuItems.push(mainItem);
     
    	//Save the array to which this mainItem belongs to.
    	//We need this in the animation later on.
    	mainItem.belongsToMenu = menuItems;
     
    	//Set the "id" attribute to be the main item's text
    	mainItem.menuText.text = menu. @ id;
     
    	//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 menuItems;
    }
     
    //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++) {
    			TweenMax.to(selectedMenu[i], 0.5 , {y:floor, glowFilter:{color:0x324df, alpha:0, blurX:0, blurY:0}});
    		}
    	}
     
    	//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
    	for (var j =0; j<  selectedMenu.length-1; j++) {
     
    		//Save the item to a local variable
    		var item = selectedMenu[j];
     
    		//Calcute the target y coordinate for the item.
    		var targetY:Number = floor - ITEM_HEIGHT*1.2*(1 + j);
     
    		//Tween an item up.
    		TweenMax.to(item, 0.5 , {y:targetY, glowFilter:{color:0xffffff, alpha:1, blurX:20, blurY:20}});
    	}
    }

    11. You are done, test your movie! Remember, if you have any questions, feel free to visit the forum.

    discuss this topic to forum

    relation tutorial

    No information

    Category

      3D (36)
      Math Physics (18)
      3rd Party (10)
      Navigation (70)
      Actionscripting (213)
      Optimization (17)
      Animation (158)
      Projector (11)
      Audio (54)
      Special Effects (170)
      Backend (26)
      Text Effects (89)
      Drawing (34)
      Tips and Techniques (51)
      Dynamic Content (34)
      Tricks (8)
      Games (105)
      Utilities (23)
      Getting Started (96)
      Video (59)
      Interactivity (46)
      Web Design (35)

    New

    Hot