PDA

Просмотр полной версии : Перехват клика


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
а как иначе? где собираешся писать условие?
А почему тогда не в онрилиз? :-)
Наверное мне не удалось правильно сформулировать что я хочу или скорее всего это во flash не возможно. Я не знаю на данный момент объектную модель flash, но в DOM браузера есть такая штука как обьект Event. С помощью Event я могу определить какой объект был clicked и написать одну функцию для всех кнопок на странице.

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


Спасибо за идею, попробую. Вопрос встречный, можно ли получить список всех 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
Спасибо, никак не привыкну что к объекты можно как массивы использовать :)