PDA

Просмотр полной версии : Код для нескольких кнопок


Icida
19.01.2007, 18:24
Можно ли написать код сразу для нескольких кнопок. В таком роде: если курсор не над одной из, например трёх, кнопок, то перейти к такому-то кадру? И где его писать. Дело вот в чем. Сделала выпадающее меню. Все уроки в сети и даже в книжке по сути одинаковы, т.е. чтобы менюшка скрывалась когда курсор не над ней, делаем фоновую кнопку и пишем в ней rollOver. Все работает прекрасно, не жалуюсь. Но когда ролик проигрывается, курсор определяет эту фоновую кнопку и становится рукой, что в моем случае очень нежелательно. Была мысль заменять в этой области курсор, но мне кажется это както неправильно, натянуто.
В общем, буду благодарна за любую помощь!

combo
19.01.2007, 20:19
var buttons:Array = [button_ok, button_go, button_reset];

function my_func() {
trace ("щелкнута " + this);
};
for (i in buttons) {
buttons[i].onPress = my_func;
}

пиши всё в одном слое.

Мыкыта
19.01.2007, 21:09
необязательно кнопку рисовать можно прям на мувик rollOver писать

Icida
19.01.2007, 21:37
Спасибо!
Вот только если именно для меню.. Когда с первой кнопки сходит курсор, сразу проигрывается первый кадр, т.е. не успевает понять что есть следующая кнопка и обработать её... Наверно по другому не получится.. А есть ещё способы?

Icida
19.01.2007, 21:44
Мыкыта, я как раз это и сделала. И все вроде хорошо) Но если с этого меню курсор увести резко, то нифига не срабатывает rollOver. Хотелось бы придумать чтото по красивше)

Мыкыта
20.01.2007, 00:16
поробуй еще воть такое:
on(releaseOutside, rollOut)

а воооще на каждой кнопке
прописывают

rollOver, releaseOutside, rollOut и release

Icida
20.01.2007, 01:00
Спасибо! Ща посмотрю, что пригодится)

Llex3D
20.01.2007, 01:19
Если надо что-бы меню не закрывалось при переходе на другую кнопку, то можно сделать через setInterval

Как писал combo, присваиваешь всем кнопкам функции на onRollOver onRollOut и onPress ( хотя лучше onRelease).

а вот в событии он onRollOver делаешь всё что тебе надо, и заодно ставишь переменную
_root.menuSelected = true;

в событии onRollOut опять же выполняешь все опперации что надо и заодно запускаешь

checkInterval = setInterval(function(){
if (!_root.menuSelected){
clearInterval(checkInterval) // но у меня иногда не срабатывает, может как всегда каряво вызываю
_root.menuSelected = false;
// закрываем меню
}, 100);

Данный код должен проверять, если menuSelected = false, значит мышка находится не на меню, и его можно смело закрывать, иначе, мышка находится на другой кнопке, и меню нам ещё пригодиться.
Вот, по идее так.. :)

Icida
20.01.2007, 14:59
Остановилась на таком решении:
четыре фунции

функция, выполняющаяся при наведении курсора мыши на кнопку

function rolling_check_in(){
_root.menuSelected = true;
}

Функция, выполняющаяся когда курсор уходит с кнопки

function rolling_check() {
_root.menuSelected = false;
checkInterval = setInterval(check1, 300);
_root.ch[i] = checkInterval; // массив содержащий Id всех интервалов.
i++;
}


Функция, проверяющая ушел ли курсор со всех кнопок или нет:

function check1(){

if (!_root.menuSelected){
stopAllInterval(_root.ch);
menuSelected = false;
gotoAndStop(1)// закрываем меню
}
}

Функция, останавливающая все интервалы(все SetInterval())

function stopAllInterval(arr:Array){

for (c in arr){
clearInterval(arr[c]);
}
}

Все работает правильно