Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Объясните принцип построения динамического меню на FLASH (http://www.flasher.ru/forum/showthread.php?t=111069)

garold08 15.04.2008 12:07

Объясните принцип построения динамического меню на FLASH
 
Нужно сделать динамическое меню
кнопки располагаются вертикально
Название кнопки и 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[i].attributes.label);
      tempItem.setAction(menuXML.firstChild.childNodes[i].attributes.url);
      menuItems.push(tempItem);
}
}

Далее нужен символ MenuItem, его нужно создать во Flash IDE и происвоить его полю класс MenuItem. Добавить к нему динамическое текстовое поле и в панели своуйств в поле var написать tlabel, и затем собственно написать сам класс MenuItem

Код:


import mx.utils.Delegate;
 
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);
}

}



Вроде так будет работать :)

Ведьмак 15.04.2008 19:38

как-то делал такое меню с бесконечной вложенностью.. чуть не взбесился.. рекурсия в такой транс вгоняла ))

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

Вложений: 1
Что-то у мен все равно не работает... хм :(
никаких ошибок при компиляции...
вроде все проще простого, скорее всего где-то в настройках флеша косяк,
плиз, посмотрите ктонибудь исходник и .as
практически сделал copy-paste, должно работать....

Спасибо

Denis Davidov 14.05.2008 14:23

Хм, 5 просмотров и ни одного ответа :)))

iNils 14.05.2008 14:31

Да хоть тысяча, вам никто не обязан отвечать.
Плюс за сообщение без смысла.


Часовой пояс GMT +4, время: 05:30.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.