Форум 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)
-   -   Movieclip'ы в роли кнопок. Если их много? (http://www.flasher.ru/forum/showthread.php?t=65856)

Дмитрий Шкаричев 21.06.2005 15:04

Movieclip'ы в роли кнопок. Если их много?
 
Есть около 20-30 movieclip'ов, выполняющих роль кнопки. Текст для них задается вот так
_root.clip1.textfield=text1;
А при наведении, клике и прочем делается что-то:
clip1.onRollOver=function(){clip1.gotoAndPlay(2);}
clip1.onPress=function(){getURL(...);}

Причем у всех одинаково за исключением ссылки, на которую эти кнопки ведут. Как избежать многократного повторения кода для всех этих клипов?

Nirth 21.06.2005 15:14

если кнопоки имеют похожие имена(clip1,clip2,clip3) то через цикл
Код:

for(i=1;i<21;i++) {
_root["clip"+i].textField.text=_root["text"+i];
_root["clip"+i].onRollOver = function .....
_root["clip"+i].onPress = functon ......

Если имена разные то есть еще два варианта, занести предварительно кнопки в массив
Код:

var but_array:Array = new Array(_root.but1,_root.menu.but2, ...и так далее);
после чего аналогичным способом через цикл for прогнать их, плюсы в том что нам даже всеравно где они находяться.

Третий способ, если кнопки находяться в одном мувике, и кроме них ничего там нету, то делаем через цикл for in
Код:

for(var but:String in menu_mc) {
menu_mc[but].onPress = function (){}
}


Дмитрий Шкаричев 21.06.2005 15:33

спасибо большое!

Captain Crocus 21.06.2005 15:39

Есть еще способ. Создай класс, где описан общий код, там же задай метод для принятия индивидуальных параметров и динамического создания ролловера и пресса, затем зарегистририруй через Object.registerClass, все создаваемые кнопки, будут иметь общий код, а потом передавай данные методам экземпляров, примерно как указал Nirth.

Nirth 21.06.2005 15:43

и в правду че это я забыл о классах =)

Дмитрий Шкаричев 22.06.2005 17:08

Цитата:

Сообщение от Nirth
если кнопоки имеют похожие имена(clip1,clip2,clip3) то через цикл
Код:

for(i=1;i<21;i++) {
_root["clip"+i].textField.text=_root["text"+i];
_root["clip"+i].onRollOver = function .....
_root["clip"+i].onPress = functon ......


странно. но работает только для последней кнопки. По видимому цикл проигрывается, и запоминает только последние указания.. Что делать?
Код стоит просто в root.

Greben 22.06.2005 17:13

Цитата:

по видимому цикл проигрывается, и запоминает только последние указания.
не могет такого быть!
может у тебя где-нибудь косяк с кнопками? ты их как создаешь?

Greben 22.06.2005 17:16

Цитата:

Причем у всех одинаково за исключением ссылки
а почему не воткнуть в сам клип this.onRollover и т.д.?

Captain Crocus 22.06.2005 17:17

проверь имена всех клипов на сцене. или положи код.

Дмитрий Шкаричев 22.06.2005 17:23

Цитата:

Сообщение от Greben
не могет такого быть!
может у тебя где-нибудь косяк с кнопками? ты их как создаешь?

Создаю так:
- клип с прямоугольником и сверху текстовое поле. имя ему clip1 и txt
- в роот.е пишу:

Код:

_root.clip1.txt=название кнопки;

clip1.onRollOver=function(){
        clip1.gotoAndPlay(2);
        }
clip1.onPress=function(){getURL(link1);}
clip1.onRollOut=function(){
        clip1.gotoAndPlay(11);
        }

И так повторяю до 20 кнопок, и работает. Почему то через цикл, как сказал Nirth не получается.


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

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