![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jul 2011
Сообщений: 18
|
У меня есть 3 кнопки: Button1, Button2, Button3.
Нужно обрабатывать нажатие на каждую кнопку, но прикреплять к каждой кнопке сценарий неудобно. Хочу сделать один обработчик, который будет по-разному реагировать на кнопки. К первому кадру ролика я прикрепляю сценарий: Buttons=Array (Button1,Button2,Button3); for (I=0;I<3;I++) Buttons [ I ].onPress= function () {trace (I);} при нажатии на кнопку Button1 выведется 0, при нажатии на кнопку Button2 выведется 1, при нажатии на кнопку Button3 выведется 2. На самом деле: при нажатии на любую кнопку выводится 3. Почему так происходит? Потому что создание обработчика - это как бы отложенный вызов функции. Поэтому переменная I успевает стать равной 3, раньше чем запустится обработчик. Именно это значение и выводится. Можно изменить сценарий: Buttons=Array (Button1,Button2,Button3); for (I=0;I<3;I++) Buttons [ I ].onPress= function () {trace (I);} I=12345; Короче говоря, в обработчик попадает не значение переменной I, а сама переменная. Оператор trace (I) выводит последнее присвоенное переменной I значение. Вопрос - как у Чернышевского - что делать? Как заставить обработчик иметь дело со старыми значениями переменных?
__________________
Kiss my AS! Последний раз редактировалось brodotsky; 09.08.2011 в 19:06. |
|
|||||
|
Регистрация: Sep 2005
Сообщений: 950
|
как то так
|
|
|||||
|
Регистрация: Jul 2011
Сообщений: 18
|
Не работает.
Вообще, хотелось бы уметь делать один обработчик для многих кнопок. Для каждой кнопки обработчик должен выполняться по-разному, в зависимости от номера кнопки.
__________________
Kiss my AS! Последний раз редактировалось brodotsky; 13.12.2011 в 00:38. |
|
|||||
|
Модрон-ветеринар
|
Имеем на сцене кнопки btn1, btn2, btn3.
Тогда: for (i = 1; i <= 3; i++) { var btn:MovieClip = this['btn' + i]; //this - если код в кадре того же таймлайна, что и кнопки //если они в контейнере каком-то, то будет cont['btn' + i] trace(btn); //проверяем, правильно ли сформировали ссылку на кнопку btn.num = i; //"запоминаем" свой номер внутри самой кнопки btn.onRollOver = btnOver; } function btnOver() { var num:Number = this.num; //"вспоминаем" свой номер trace(num); //в з-ти от кнопки будет 1, 2, 3 this._alpha = 100 - num * 10; //теперь, например, по разному поменяем альфу кнопки } for (i = 1; i <= 3; i++) { var btn:MovieClip = this['btn' + i]; btn.num = i; btn.onRollOver = btnOver; btn.onRollOut = btn.onDragOut = btnOut; btn.onRelease = btnRelease; } function btnOver() { var num:Number = this.num; this._alpha = 100 - num * 10; } function btnOut() { this._alpha = 100; } function btnRelease() { var num:Number = this.num; //"вспоминаем" свой номер //по нажатию выполним разное действие в завис-ти от номера switch (num) { case 1: trace('Действие при нажатии btn1'); break ; case 2: trace('Действие при нажатии btn2'); break ; case 3: trace('Действие при нажатии btn3'); break ; } }
__________________
Идите первым! Последний раз редактировалось mooncar; 13.12.2011 в 15:53. |
|
|||||
|
Мункар.... однако ФАК писать надобно, я так думаю
))))))Эт какой-то однака типа ну вобщем теряем былую легкость ![]() |
|
|||||
|
Регистрация: Jul 2011
Сообщений: 18
|
А если именно кнопки, а не клипы?
__________________
Kiss my AS! |
|
|||||
|
Модрон-ветеринар
|
Будет работать.
А вообще отучайтесь использовать как кнопки Button, делайте кнопки все на основе MovieClip. Пригодится, будет меньше проблем, если AS использовать планируете. (У Button куча недостатков).
__________________
Идите первым! Последний раз редактировалось mooncar; 14.12.2011 в 03:48. |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:51. |
|
|
« Предыдущая тема | Следующая тема » |
|
|