Форум 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)
-   -   Как сократить (универсализировать) код? (http://www.flasher.ru/forum/showthread.php?t=83174)

xenOnn 28.07.2006 21:45

Как сократить (универсализировать) код?
 
есть такой код:

Код:

item1.onRelease = function () {
        story.load("item1.xml");
        state.text = "item1";
        _root.big.bpic.loadMovie("item1-01.jpg");
        _root.spic.loadMovie("item1-02.jpg");
};

Объектов item (кнопок), при нажатии которых запускается данный код, около 8.

Как сделать, чтоб не повторять данный код 8 раз подряд ( только с разными item ессно - item1, item2 и т.д.), а написать код так, чтоб при нажатии item1 - подгружался item1.xml, при нажатии item2 - погружался item2.xml и т.д.?
вообщем как сделать универсально всё чотб код не увеличивался при увеличении количества item'ов? А-то если объектов будет штук 100, то код вообще километровый получится, да и редактировать его будет сложно...

xenOnn 29.07.2006 15:57

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

Что такое хорошо? 29.07.2006 16:06

Код:

for (i=0; i<10; i++) {
        this["item"+i].onRelease = function() {
                story.load("item"+i+".xml");
                state.text = "item1";
                _root.big.bpic.loadMovie("item"+i+"-01.jpg");
                _root.spic.loadMovie("item"+i+"-02.jpg");
        };
}

и, возможно, всегда, как только у тебя появляется мысль в стиле "если объектов будет штук 100", всмоминай о циклах FOR или WHILE - и перебирай себе свои сотни и тысячи. ))) Удачи!

xenOnn 29.07.2006 18:38

Сенкс, правда циклы же есть...;) вот я пень..

А как быть если имена инстансов не под номерами идут, а с произвольными именами?
Можно наверное как-то через промежуточную переменную
что писать не так:

this["item"+i].onRelease = function() ...

а что-то вроде этого:

this.X.onRelease = function() ...

где X приравнивался к имени инстанса на который в данный момент нажали

Как такое можно реализовать?


===================

И ещё один вопрос уже по другой теме: как можно ловить имена инстансов на которые нажимают иих координаты тоже?

xenOnn 29.07.2006 18:58

так, я поспешил
что-то не работает Ваш код

вот что у меня получается:
Код:

for (i=0; i<8; i++) {
        this["item"+i].onRelease = function() {
                state.text = "item"+i;

        };
}

при нажатии на любую кнопку - в текстовом поле появляется одна и таже надпись - item8
ну ессно... цикл проходит от начала до конца и i становится равной 8, всегда...

Как быть-то?

sergMX 29.07.2006 19:20

можно так:

Код:


for (i=0; i<8; i++) {
        this["item"+i].X = i;
        this["item"+i].onRelease = function() {
                state.text = "item"+this.X;
        };
}


iNils 29.07.2006 19:30

sergMX и xenOnn, вам устное предупрежедние за не использование тегов для кода. Если не исправите сами, то предупреждение будет не устным. Время пошло.

xenOnn 29.07.2006 19:45

о, сенкс э лот, всё работает
Х - промежуточная переменная так я понимаю, непонимаю почему без неё не работает?...

Вопрос второй (пока был без ответа):

а как быть если имена инстансов не item1, item2...
а что-то вроде этого: item1, button2, circlew
как в тамом случае быть? тут цикл-то не поможет...

xenOnn 29.07.2006 19:56

может наверное через массив то как-то сделать...
но хочется как-то проще
чтоб AS ловил имя нажатой кнопки
т.е., к примеру, если нажата кнопка с именем green - в текстовое поле вписывался текст "green" и подгружалась картинка с именем green.jpg;
если нажата кнопка с именем bigtman - в текстовое поле вписывался текст "bigman" и подгружалась картинка с именем bigman.jpg и т.д.

Так такое можно сделать?

Что такое хорошо? 29.07.2006 20:06

Код:

green.onRelease=function  () {
        trace(this._name);

}



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

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