Источник: http://tutorials.flashmymind.com/2009/02/c...a-menu-via-xml/
В этом уроке Я расскажу вам о простом XML приёме, который вы можете использовать для того, чтобы создавать своё меню. С помощью XML вы можете легко и быстро изменять своё меню так, как вам больше нравится.
Настройка элементов
1. Сначала нужно создать XML файл. Напишите в блокноте следующий код и сохраните файл под именем "menu.xml".
Code
<site>
<links>
<link name="Home"/>
<link name="Works"/>
<link name="About"/>
<link name="Contact"/>
</links>
</site>
4. Внутри мувиклипа создайте еще один слой с текстовым полем. В свойствах текстового поля сделайте его динамическим и пропишите instance name как "menuLabel". Нажмите кнопку Embed и встройте все символы в текстовое поле.
5.Удалите мувиклип menuItem со сцены (он останется в библиотеке). И прилинкуйте мувиклип к классу "MenuItem".
Пишем код
6. В таймлайне *.fla документа, в первом кадре пишем код.
Сначала создадим переменную и попробуем загрузить *.xml файл.
Code
//Импорт необходимых классов.
import fl.transitions.Tween;
import fl.transitions.easing.*;
//Путь до XML файла.
//Вы можете прописать любой путь.
var xmlPath:String = "menu.xml";
//Данные из XML будут помещены в эту переменную после загрузки.
var settingsXML:XML;
//Массив для твин анимаций нужен для того,
//чтобы сборщик мусора не удалял анимации в самое неподходящее время.
var tweensArray:Array = new Array();
//Твин анимации кнопки.
var buttonTween:Tween;
// Загружаем XML файл
var loader = new URLLoader();
loader.addEventListener(Event.COMPLETE, xmlLoaded);
loader.load(new URLRequest(xmlPath));
Если всё понятно, то пишем дальше. Теперь напишем функцию загрузки:
Code
//Эта функция вызывается, когда XML файл загружен.
function xmlLoaded(e:Event):void
{
//Проверяем, не равен ли наш загружчик null.
if ((e.target as URLLoader) != null )
{
//Помещаем данные XML файла в переменную.
settingsXML = new XML(loader.data);
settingsXML.ignoreWhitespace = true;
//Вызываем функцию создания меню.
createMenu();
}
}
Теперь напишем функцию создания меню:
Code
function createMenu():void
{
//Локальная переменная для экземпляра класса MenuItem.
var menuItem:MenuItem;
//Счетчик.
var i:uint = 0;
//Цикл по пунктам links, найденых в XML файле.
for each (var link:XML in settingsXML.links.link)
{
menuItem = new MenuItem();
//Вставка названия кнопки меню. (link.@name читает атребут "name" в элементе link)
menuItem.menuLabel.text = link. @ name;
//Если текст больше, чем текстовое поле, то выравниваем размер.
menuItem.menuLabel.autoSize = TextFieldAutoSize.LEFT;
//Помещаем кнопку меню на сцену.
menuItem.x = 20;
menuItem.y = 30 + i * 40;
//Активируем крсор над кнопкой. Отключаем у текстового поля кнопки реакцию на мышь.
menuItem.buttonMode = true;
menuItem.mouseChildren = false;
//Назначаем слушатели событий.
menuItem.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
menuItem.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
addChild(menuItem);
//Считаем количество кнопок.
i++;
}
}
Теперь последний штрих - функции наведения и отведения мыши, которые будут анимировать кнопки:
Code
//Наведение мыши.
function mouseOverHandler (e:Event):void {
//Увеличение до двойной длины.
buttonTween = new Tween(e.target, "scaleX", Elastic.easeOut, 1, 2, 1, true);
}
//Отведение мыши.
function mouseOutHandler (e:Event):void {
//Возврат к нормальной длине.
buttonTween = new Tween(e.target, "scaleX", Elastic.easeOut, e.target.scaleX, 1, 1, true);
}
Готово. Тестируем ролик и наслаждаемся своим новым меню.
Весь код сразу:
Code
//Импорт необходимых классов.
import fl.transitions.Tween;
import fl.transitions.easing.*;
//Путь до XML файла.
//Вы можете прописать любой путь.
var xmlPath:String = "menu.xml";
//Данные из XML будут помещены в эту переменную после загрузки.
var settingsXML:XML;
//Массив для твин анимаций нужен для того,
//чтобы сборщик мусора не удалял анимации в самое неподходящее время.
var tweensArray:Array = new Array();
//Твин анимации кнопки.
var buttonTween:Tween;
// Загружаем XML файл
var loader = new URLLoader();
loader.addEventListener(Event.COMPLETE, xmlLoaded);
loader.load(new URLRequest(xmlPath));
//Эта функция вызывается, когда XML файл загружен.;
function xmlLoaded(e:Event):void
{
//Проверяем, не равен ли наш загружчик null.
if ((e.target as URLLoader) != null )
{
//Помещаем данные XML файла в переменную.
settingsXML = new XML(loader.data);
settingsXML.ignoreWhitespace = true;
//Вызываем функцию создания меню.
createMenu();
}
}
function createMenu():void
{
//Локальная переменная для экземпляра класса MenuItem.
var menuItem:MenuItem;
//Счетчик.
var i:uint = 0;
//Цикл по пунктам links, найденых в XML файле.
for each (var link:XML in settingsXML.links.link)
{
menuItem = new MenuItem();
//Вставка названия кнопки меню. (link.@name читает атребут "name" в элементе link)
menuItem.menuLabel.text = link. @ name;
//Если текст больше, чем текстовое поле, то выравниваем размер.
menuItem.menuLabel.autoSize = TextFieldAutoSize.LEFT;
//Помещаем кнопку меню на сцену.
menuItem.x = 20;
menuItem.y = 30 + i * 40;
//Активируем крсор над кнопкой. Отключаем у текстового поля кнопки реакцию на мышь.
menuItem.buttonMode = true;
menuItem.mouseChildren = false;
//Назначаем слушатели событий.
menuItem.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
menuItem.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
addChild(menuItem);
//Считаем количество кнопок.
i++;
}
}
//Наведение мыши.
function mouseOverHandler (e:Event):void {
//Увеличение до двойной длины.
buttonTween = new Tween(e.target, "scaleX", Elastic.easeOut, 1, 2, 1, true);
}
//Отведение мыши.
function mouseOutHandler (e:Event):void {
//Возврат к нормальной длине.
buttonTween = new Tween(e.target, "scaleX", Elastic.easeOut, e.target.scaleX, 1, 1, true);
}