![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Apr 2012
Сообщений: 80
|
Здравствуйте, дорогие модераторы и участники.
Подскажите, как можно создать кнопки посредством кода (точнее на сцене клипы есть, нужно прописать им действия). Есть 2 функции, мувиклипы на сцене ввиде картинок, и есть на "ручнике" созданные 25 действий для кнопок // Функция раз - подсвечивает этаж по наведению на кнопку function MykOnRollover(counter_et) { _root["cam2"]["e"+counter_et]._alpha = _root["cam2"]["l"+counter_et]._alpha = max_transparancy; } // Функция два - убирает подсветку function MykOnRollout(counter_et) { _root["cam2"]["e"+counter_et]._alpha = _root["cam2"]["l"+counter_et]._alpha=min_transparancy; } // Кнопка _root.cam2.e3.onRollOver=function() {MykOnRollover(3);} _root.cam2.e3.onRollOut=function() {MykOnRollout(3);} _root.cam2.e4.onRollOver=function() {MykOnRollover(4);} _root.cam2.e4.onRollOut=function() {MykOnRollout(4);} // и так далее до e=25 Пробовал в цикле присваивать, но не работает: В итоге присваеватся только последняя функция. |
|
|||||
|
Модрон-ветеринар
|
Да, так происходит, потому что в конце цикла с2 принимает последнее значение и оно же везде и будет использоваться.
Вот решение: for (var c2 = 2; c2 <= 25; c2++) { var btn:MovieClip = _root.cam2["e" + c2]; //ссылка на кнопку для удобства записи btn.num = c2; //"запоминаем" номер внутри кнопки //функции на события назначаем по ссылке на именованные функции: btn.onRollOver = mykOnRollover; btn.onRollOut = mykOnRollout; } function mykOnRollover() { var num:Number = this.num; //"вспоминаем" номер _root.cam2["e" + num]._alpha = _root["cam2"]["l" + num]._alpha = max_transparancy; } function mykOnRollout() { var num:Number = this.num; //"вспоминаем" номер _root.cam2["e" + num]._alpha = _root.cam2["l" + num]._alpha = min_transparancy; } Только читать и править код неудобно. Пользы никакой - компилятор потом все равно сделает как ему удобнее.2. Названия функций не делайте с заглавной, с заглавной обычно идут названия классов. И еще, если я верно определил, то внутри функции при задании действий на кнопку вы опять ссылаетесь на нее саму. Поэтому можно записать так, с использованием относительных путей: this._parent - в данном случае это ссылка на родительский мувик _root.cam2 из мувика _root.cam2["e" + num] Код функций станет гибче и не будет зависеть от имени.
__________________
Идите первым! Последний раз редактировалось mooncar; 21.06.2012 в 20:30. |
|
|||||
|
Регистрация: Apr 2012
Сообщений: 80
|
1) Есть!)
2) Есть! ) 3) Верно. Супер! Всё работает. Огромное спасибо. |
|
|||||
|
Регистрация: Apr 2012
Сообщений: 80
|
Кратко говоря, в строке
this можно еще чем то другим заменить (для лучшего понимания)? Длинно говоря, правильно ли понимаю, что в данном случае: Мы можем написать this потому что программа "думает" примерно следующим образом. Выделяем и концентрируемся на объекте btn при действии onRollOver или onRollOut и так как программа работает с объектом btn и сфокусирована на нём, мы применяем this и свойство this.num будет относится к btn. И другим близким по эффективности способом задачу по присвоению номера внутри функции mykOnRollover() не решить. |
|
|||||
|
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
|
this является ссылкой на текущий объект выполнения кода. Если просто в первом кадре основной временной шкалы написать trace(this), то this в данном случае будет указывать на _root. Если прописать this в обработчике события (в функции на onRollOver, например), то this будет указывать на объект, сгенерировавший событие.
__________________
hauts.ru |
|
|||||
|
Регистрация: Apr 2012
Сообщений: 80
|
Благодарю.
|
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
как вариант.
for (var i = 2; i <= 25; i++) { var btn:MovieClip = _root.cam2["e" + i]; //ссылка на кнопку для удобства записи btn.level = _root.cam2["l" + i] //"запоминаем" связанный этаж внутри кнопки //функции на события назначаем по ссылке на именованные функции: btn.onRollOver = mykOnRollover; btn.onRollOut = mykOnRollout; } function mykOnRollover() { this._alpha = this.level._alpha = max_transparancy; } function mykOnRollout() { this._alpha = this.level._alpha = min_transparancy; } class MyOkButton extends MovieClip{ public var level:LevelMovieClip; public var maxAlpha:Number = 100; public var minAlpha:Number = 50; public function onRollover():Void { this._alpha = this.level._alpha = maxAlpha ; } public function onRollout():Void { this._alpha = this.level._alpha = minAlpha; } } хотя бы так (): for (var i = 2; i <= 25; i++) { var btn:MyOkButton = _root.cam2["e" + i]; //ссылка на кнопку для удобства записи btn.level = _root.cam2["l" + i] //"запоминаем" связанный этаж внутри кнопки } На as2 тоже можно красиво писать.
__________________
Отряд Котовскага Последний раз редактировалось Котяра; 27.06.2012 в 13:28. |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:26. |
|
|
« Предыдущая тема | Следующая тема » |
|
|