Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Flash > Динамическое меню и списки.


Автор: PROCESSOR 12.8.2005, 06:44
Какой есть самый быстрый и короткий способ создать динамическое меню или вообще просто список ? через скрипт.

- дан массив с пунктами меню ( или списка ) "1,2,3,4,5"
- функция ( обьект ) должон создать меню из них т.е. при наведении и нажатии возвращается имя пункта . Причем как у вас организован возрат значения - вызов внешней функции или...

Конечно это элементарно и легко, но интересно, может у кого-нибудь есть изощренный методы ( главное - короткость кода, а не скорость. )


Автор: aksyos 12.8.2005, 11:06
new XmlMenu("menu.xml", this);
- Увсе.

Автор: PROCESSOR 12.8.2005, 15:10
6 кб. на меню это не серьёзно. Всякие вложенности не нужны.

Автор: aksyos 12.8.2005, 18:31
Цитата(PROCESSOR @ 12.8.2005, 15:10)
6 кб. на меню это не серьёзно.  Всякие вложенности не нужны.

- Там в архиве fla с картинками для фона менюшки (так уж устроен flash, что их название и просто наличие актуальны для этой встроеной функции), а код - всего одна эта строка. Это самый короткий вариант для flash 2004!

Автор: PROCESSOR 13.8.2005, 04:18
Ой ёёё. Да там 47 кб. а не 7. smile

Вот мой вариант:

Код

q=new Array ("Page 1","Page 2","Page 3")

for (z in q) {
    createEmptyMovieClip (z,getNextHighestDepth())
    w=eval(z)
    w.createTextField("txt", 1, 0,z*18, 100, 18)
    w.txt.text=q[z];
    w.onPress=function () { trace (this.txt.text) }
    w.onRollOver=function () { this.txt.textColor=0xFF0000 }
    w.onRollOut=function () { this.txt.textColor=0x00000 }    
}


Выводиться любой список из массива, при наведении меняется цвет и при клике выдает текст.
Разнообразить можно подо всё.

Ксатати заметил, что почемуто в WITH нельзя вписать функции. Т.е. в в этом примере можно всё сделать с WITH (eval(z)), но функции не работают почемуто так.

Автор: AlDev 13.8.2005, 07:01
дык ты eval не так понимаешь смысл.
пример юзания eval:
Код

var str:String = 'Object';
var f:Function = eval(str);
var obj = new f();
trace (typeof(obj));

Автор: PROCESSOR 13.8.2005, 07:56
Чо тут понимать. eval компилирует строку в процессе выполнения программы. Это если на низком уровне понимать.

Уже пару лет им пользуюсь и в JS и в PHP , терь в AS. Обожаю этот штучку.

В данном случае w=только что созданному обьекту. А как можно подругому прировнять ?
w=createEmptyMovieClip (z,getNextHighestDepth()) вроде не работает , а жаль.

Значит если не пользовать eval , то функции можно присваивать в WITH ?

Автор: AlDev 13.8.2005, 08:49
Цитата(PROCESSOR @ 13.8.2005, 12:56)
w=createEmptyMovieClip (z,getNextHighestDepth()) вроде не работает , а жаль.

дык конечно, ты указывай, куда пути идут:
Код

var w:MovieClip = this.createEmptyMovieClip(z.toString(),this.getNextHighestDepth());


тогда:
Код

var q:Array = new Array ("Page 1","Page 2","Page 3")
var z:Number;
var w:MovieClip;
for (z=0;z<q.length;z++) 
{
    w = this.createEmptyMovieClip (z.toString(),this.getNextHighestDepth());
    w.createTextField("txt", 1, 0,z*18, 100, 18)
    w.txt.text=q[z];
    w.onPress=function () { trace (this.txt.text) }
    w.onRollOver=function () { this.txt.textColor=0xFF0000 }
    w.onRollOut=function () { this.txt.textColor=0x00000 }    
}


Цитата(PROCESSOR @ 13.8.2005, 12:56)
то функции можно присваивать в WITH

незнаю, попробуй.

Автор: PROCESSOR 13.8.2005, 14:06
var w:MovieClip = this.createEmptyMovieClip(z.toString(),this.getNextHighestDepth());

уау !!! Это круто. А я то думаю, чо он не работает как в других языках. Всегда ведь созданный обьект возвращаеться. Гыыыыы. Причем, пример который я написал, оказывается тоже работает. w=createEmptyMovieClip (z,getNextHighestDepth())

Вот тока не пойму смысл обьявлять переменные, если они и так локальные в цикле из 5 строк . (z & w ) т.е. запутаться в них невозможно и сами они обьявляються.

И с THIS заморочки - если же не указывать THIS , то по умолчанию оно само подставляется... но не всегда почемуто. { this.txt.textColor=0xFF0000 } -вот здесь если THIS не поставить, то небудет работать.

Автор: AlDev 14.8.2005, 05:01
просто у тебя видимо все исходники маленькие и компиллишь ты всё под Flash.
Если писать в fame, то требуется объявление всех переменных, если конечно к ним не обращаться как obj['var_name']. Ну и объявление их типов всегда не дурно включать, для читабельности и для отладки.
this тоже писать обязательно smile иначе он пытается всё понять, как локальную переменную, а не переменную у объекта класса.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)