Форум 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=81805)

chatlano 27.06.2006 22:23

Перехват клика
 
Господа, подскажите плиз как решить проблему.
Есть страница с набором кнопок. При клике на любую из них нужно проверить условие и если условие выполняется то дать возможность отработать on realese кнопки, если же не выполняется то код в on realese выполняться не должен. Я понимаю что можно в каждом on realese проверить условие, но этого хотелось бы избежать. Существует ли во флеше механизм с помощью которого можно написать такой обработчик?
Повторюсь еще раз что речь идет не о listener для мыши а именно о запрете / разрешении прохождения события on realese в кнопках одной функцией для всех кнопок.
Спасибо.

MyXus 27.06.2006 22:59

а как иначе? где собираешся писать условие?
А почему тогда не в онрилиз? :-)

Vertax 28.06.2006 13:57

Можешь попробовать провернуть такой фокус:

Код:

//Какое-то условие
var ACT = false;

//Условие меняется при нажатии на вторую кнопку
Button2.onRelease = function ()
{
        ACT = true;
        trace ("OLD");
}

//Здесь переписываем событие
Button1.onRelease = function ()
{
        if (ACT)
        {
                Button2.onRelease = function ()
                {
                        trace ("NEW");
                }
        }
}

Для всех прогоняешь в цикле через eval и Enjoy.

Vertax 28.06.2006 14:37

Кстати, так подумал - Если на каждой кнопке висит уникальный код, то его можно на время только прятать в какое нибудь не исполнимое событие, например:

Код:

//Опять же условие
var ACT = true;

//Кнопка которую мучаем
Button2.onRelease = function ()
{
        trace ("OLD");
}

//Кнопка при нажатии на которую меняем события
Button1.onRelease = function ()
{
        if (ACT)
        {
//Прячем событие
                Button2.onDragOut = Button2.onRelease;
                Button2.onRelease = function ()
                {
                        trace ("NEW");
                }
        }
        else
        {
//Возвращаем событие
                Button2.onRelease = Button2.onDragOut;
        }
        ACT = !ACT;
}


chatlano 28.06.2006 17:50

Цитата:

Сообщение от MyXus
а как иначе? где собираешся писать условие?
А почему тогда не в онрилиз? :-)

Наверное мне не удалось правильно сформулировать что я хочу или скорее всего это во flash не возможно. Я не знаю на данный момент объектную модель flash, но в DOM браузера есть такая штука как обьект Event. С помощью Event я могу определить какой объект был clicked и написать одну функцию для всех кнопок на странице.

chatlano 28.06.2006 17:55

Цитата:

Сообщение от Vertax
Кстати, так подумал - Если на каждой кнопке висит уникальный код, то его можно на время только прятать в какое нибудь не исполнимое событие, например:

Спасибо за идею, попробую. Вопрос встречный, можно ли получить список всех buttons которые есть на сцене? Имен или ссылок на объекты.

Vertax 28.06.2006 18:24

Если кнопки - это Movie Clip'ы, то:
Код:

for (i in _root)
{
        if (typeof(eval(i)) == "movieclip"){}
}

Если Button'ы, то:
Код:

for (i in _root)
{
        if (typeof(eval(i)) == "object"){}
}

Вместо _root'а укажи нужно тебе место.
Например: eval("_root.SuperKnopka")

chatlano 28.06.2006 21:10

Спасибо, никак не привыкну что к объекты можно как массивы использовать :)


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

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