Как создавать свои Flash-игры, подобные Angry Birds и World of Goo?
Box2D - это библиотека, которая моделирует физическое поведение твердых тел в двумерном пространстве. Программисты могут использовать...
В этом уроке Я расскажу вам о простом XML приёме, который вы можете использовать для того, чтобы создавать своё меню. С помощью XML вы можете легко и быстро изменять своё меню так, как вам больше нравится.
Настройка элементов
1. Сначала нужно создать XML файл. Напишите в блокноте следующий код и сохраните файл под именем "menu.xml".
2. Создайте новый *.fla документ и сохраните его рядом с XML файлом.
3. Теперь создадим кнопку меню. Нарисуйте прямоугольник 100х30 и сконвертируйте его в мувиклип с именем "menuItem" и точкой регистрации в левом верхнем углу.
4. Внутри мувиклипа создайте еще один слой с текстовым полем. В свойствах текстового поля сделайте его динамическим и пропишите instance name как "menuLabel". Нажмите кнопку Embed и встройте все символы в текстовое поле.
5.Удалите мувиклип menuItem со сцены (он останется в библиотеке). И прилинкуйте мувиклип к классу "MenuItem".
Пишем код
6. В таймлайне *.fla документа, в первом кадре пишем код.
Сначала создадим переменную и попробуем загрузить *.xml файл.
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));
Если всё понятно, то пишем дальше. :) Теперь напишем функцию загрузки:
function xmlLoaded(e:Event):void
{
//Проверяем, не равен ли наш загружчик null.
if ((e.target as URLLoader) != null )
{
//Помещаем данные XML файла в переменную.
settingsXML = new XML(loader.data);
settingsXML.ignoreWhitespace = true;
//Вызываем функцию создания меню.
createMenu();
}
}
Теперь напишем функцию создания меню:
{
//Локальная переменная для экземпляра класса 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);
}
Готово. Тестируем ролик и наслаждаемся своим новым меню.
Весь код сразу:
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);
}
Впервые!
Если у вас было хоть раз желание сделать что-то новое и необычное, то этот видеокурс для вас! Знания ActionScript 3.0 вдохнут в ваши проекты новую жизнь, позволив тем самым поднять их на новый уровень
С помощью этого видеокурса вы пройдёте путь от новичка до Объектно-Ориентированного Программирования, сможете работать со многими популярными библиотеками и научитесь создавать сайты во flash! + Видеокурс по PaperVision3D в подарок!
Видеокурс содержит 119 видеоуроков в 12 главах. На сегодняшний день это единственный видеокурс, таких масштабов
Комментарии
Класс! Мне нравится!
прикольно.. я когдато делал чтото подобное)
https://www.weblancer.net/users/SarGun/portfolio/529963.html#item
Только там где код объясняется по частям, упущено определение функции на over
Думаю, в скором будущем ошибку исправят. :) Благодарю.
True Love
Всем добрый день!
Много интересного на этом сайте, однако, есть вопросы, на которые не смог найти нормальных туториалов...Быть может кто-то из присутствующих сможет создать нужную интересную и подробную темку? Думаю, что она была бы интересна не только мне
Меня интересует слудующее:
- Принцип изготовления flash pop-up и richmedia баннеров
- Нюансы изготовления
- Процесс кодирования (ибо с кодами пока мало знаком)
- Как делать подобные баннеры без фона, необычной формы (треугольники, сложные формы и прочее), с кнопкой закрытия
- Прочая полезная информация по данному типу баннеров (сложности, работа с весом баннера, интересные возможности воплащения и т.п.)
Буду очень благодарен всем за помощь в черпании знаний (очень нуждаюсь в данной информации).
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at _fla::MainTimeline/createMenu()
at _fla::MainTimeline/xmlLoaded()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()
Где то грабли нашел.
Грабли найдены. Работает!
выводит такое сообщение
Error: Error #2136: SWF-файл file:///C|/Documents and Settings/RadioN/Рабочий стол/menuXML/MenuXML.swf содержит недопустимые данные.
at MenuItem/createMenu()
at MenuItem/xmlLoaded()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()
почему подскажите
>> И прилинкуйте мувиклип к классу "MenuItem".
Каку это ? не понятно.
И второй вопрос: если меню встраевается в обычный сайт, как указать ссылки для кнопок на конкретные контенты?
Flash для сайтов уже не катит))
это легко можно сделать с помощью jQuery-библиотеки для JS.
но всё равно урок хороший)
класно
Где-то автор недоперемудрил.
Если всё верно, то при создании меню по описанию всё должно пройти гладко и без ошибок.
У меня программа ругнулаась на 4 ошибки в коде и вывела сообщения:
Не удалось загрузить класс или интерфейс "fl.transitions.Tween".
Не удалось загрузить класс или интерфейс "Event".
Ожидается ")"
Обнаружен непредвиденный "}"
Может я что-то делаю не так, но как может отобразится меню в слое, в котором ничего нет по сути? Мы же всё удалили, правда сделав какую-то нелепую привязку, а сама сцена осталась пуста на практике.
меню должно находиться в библиотеке, как я понял
1) Админ всегда прав
2) Если админ не прав, смотри пункт 1
Мы в контакте -
меню должно находиться в библиотеке, как я понял
Внутри флеши? Как-то не естественно для этого типа.
Меню должно быть динамичным, т.е. изменяемым, а иначе к чему такие сложности?
Может автор снизайдет до начинающих и обяснит на пальцах и желательно для русифицированной версии тоже.
Как же правильно всё сделать?
Прыгать с бубном не хочется, после рабочего дня подвижность совсем не та...