Просмотр полной версии : Объясните принцип построения динамического меню на FLASH
garold08
15.04.2008, 12:07
Нужно сделать динамическое меню
кнопки располагаются вертикально
Название кнопки и id берется к примеру из XML
После нажатия на кнопку флэш составляет запрос, отправляет его на сервер и ждет ответа
Как реализовать? куда копать? От чего отталкиваться?
alekslitvinenk
15.04.2008, 15:53
Все зависит от конкретной структуры документа XML.
В самом общем виде задача сводиться к обходу этого самого xml в цикле.
Например, если xml будет вида:
<menu>
<item id="1" label="item 1" url="somepage1.html" />
<item id="2" label="item 2" url="somepage2.html" />
<item id="3" label="item 3" url="somepage3.html" />
</menu>
То код должен быть примерно таким:
import mx.utils.Delegate;
var menuXML:XML;
var menuItems: Array = new Array();
menuXML = new XML();
menuXML.ignoreWhite = true;
menuXML.onLoad = Delegate.create(this, menuIsLoaded);
menuXML.load("menu.xml");
function menuIsLoaded():Void {
for(var i = 0; i < menuXML.firstChild.childNodes.length; i++){
var tempItem: MenuItem = new MenuTem();
tempItem._x = 10;
tempItem._y = 10+i*20;
tempItem.setLabel(menuXML.firstChild.childNodes.attributes.label);
tempItem.setAction(menuXML.firstChild.childNodes[I].attributes.url);
menuItems.push(tempItem);
}
}
Далее нужен символ MenuItem, его нужно создать во Flash IDE и происвоить его полю класс MenuItem. Добавить к нему динамическое текстовое поле и в панели своуйств в поле var написать tlabel, и затем собственно написать сам класс MenuItem
import mx.utils.Delegate;
[I]class MenuItem extends MovieClip {
private var tlabel:String;
private var _action:String;
private function onLoad():Void{
this.onRollOver = Delegate.create(this, handleMouseOver);
this.onRollOut = Delegate.create(this, handleMouseOut);
this.onRelease= Delegate.create(this, handleMouseRelease);
}
public function MenuItem(){
}
public function setLabel(inlabel:String):Void{
tlabel = inlabel;
}
public function setAction(inaction:String):Void{
_action = inaction;
}
private function handleMouseOver():Void{
}
private function handleMouseOut():Void{
}
private function handleMouseRelease():Void{
getURL(_action);
}
}
Вроде так будет работать :)
как-то делал такое меню с бесконечной вложенностью.. чуть не взбесился.. рекурсия в такой транс вгоняла ))
Denis Davidov
11.05.2008, 04:11
у меня какой-то хитрый глюк, в отдельном фаиле .as прописал класс MenuItem,
но при компиляции выдает ошибку: Class may be only defined in external Action Script 2.0 script. В проекте стоит AS2 в Publish...
что это такое может быть??!!
Заранее спасибо за советы...
з.ы. у меня CS3
Denis Davidov
11.05.2008, 13:40
нашел косяк, я дополнитлено пыталса про-include'ить .as фаил.
з.ы. в коде есть пара опечаток: attrubutes -> attributes
а так-же вроде .x -> ._x
Psycho Tiger
11.05.2008, 15:08
Ну и всякие там
var tempItem: MenuItem = MenuItem();
Удивительно, что этот код был написан без компиляции... респект :)
alekslitvinenk
11.05.2008, 16:50
Сорри, за оЧепятки
Код действительно не проверял: просто побыстрому все описал, чтобы суть изложить :)
Denis Davidov
11.05.2008, 17:25
Что-то у мен все равно не работает... хм :(
никаких ошибок при компиляции...
вроде все проще простого, скорее всего где-то в настройках флеша косяк,
плиз, посмотрите ктонибудь исходник и .as
практически сделал copy-paste, должно работать....
Спасибо
Denis Davidov
14.05.2008, 14:23
Хм, 5 просмотров и ни одного ответа :)))
Да хоть тысяча, вам никто не обязан отвечать.
Плюс за сообщение без смысла.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.