![]() |
Button, on() and this
Прошу прощения, если вопрос этот уже задавался и обсуждался, поиск я уже успел просмотреть, но прямого ответа не нашел.
В AS Reference написано, что когда для бутона вызывается on(), то this внутри вызова ссылается на текущую сцену. Можно ли как-то, без хардкодового обращения к названию инстанса кнопки, все таки обратиться к ее параметрам? Конкретней, я пытаюсь в кнопке btnStop сделать хинт на hover, и пишу такое: on(rollOver) { createTextField("txtHint",1, this._x+10, this._y+10, 0, 0); txtHint.autoSize = true; txtHint.text = " Press to Stop "; } Но вот this._x и this._y возвращают х и у для сцены, т.е. нули. Можно ли как-то добраться до х и у кнопки, без написания btnStop._x и btnStop._y? Не хотелось бы это делать, плохая практика кодирования, а меня это беспокоит в разработке флеш-приложений (я только начал в нем разбираться, но исследую возможность создания серьезных вещей, которые легко тестить и модифицировать). Заранее благодарен за ответ. |
можно например снаружи написать
btnStop.onRollOver = function () { createTextField("txtHint",1, this._x+10, this._y+10, 0, 0); txtHint.autoSize = true; txtHint.text = " Press to Stop "; } тогда роллОверная функция будет методом и this будет указывать куда надо... |
Noooooooox!!!!!
Я даже запостить не успел. |
Спасибо обоим, огромное :)
А "снаружи" - это где? Мне надо еще время, чтобы въехать в структуру кода. Вариант, который кажется наиболее вероятным - "Actions for Frame 1 of Layer Name Layer 1". Так? Update: Попробовал, заработало!!! Действительно так и надо? В данном случае у меня одна сцена, один лейер и один кадр (вся жизнь происходит за счет программной анимации ходячего человечка вправо и влево). В более сложных случаях обработчики событий надо навешивать в первом кадре той сцены и того лейера, в который эти объекты положены (или, если создаются динамически, то в том же коде, где они и создаются), да? |
DeliMIter, спокойно, все хорошо :) убери руку с затвора и верни предохранитель на место :)
2Notna "снаружи" - это в любом скрипте таймлайна, в котором у тебя лежит этот символ с кнопкой... ...номер кадра и название лэйера не имеют никакого значения - главное: — определить функцию ДО того, как она может быть использована — в кадре с этим скриптом кнопка для которой мы это пишем должна присутствовать :) |
А кадр - это один лейер или все видимые в данный момент лейеры?
И еще, расхрабрюсь почувствовав реальную помощь, можно ли объявить function showHint(txt) и hideHint(), а потом написать: btnLeft.onRollOver = showHint("Go left"); btnRight.onRollOver = showHint("Go right"); и т.п. (ну, и с onRollOut тоже)? Я сделал, но почему-то функции showHint и hideHint вызываются в момент назначения события (трейсом проверил), а по самим событиям не вызываются :( -- Вообще, чувствую, надо мне создать класс btnWithHint, в котором хранить текст хинта, и мувик картинки (бутоны не текстом разнятся, а видом), и самому по этому мувику двигаться по разным событиям, а потом создать каждую кнопку как объект этого класса. Надо попробовать. |
Получилось вот так:
function showHint(txt,btn) { ... } btnLeft.onRollOver = function() { showHint("Go left", this); } |
> А кадр - это один лейер или все видимые в данный момент лейеры?
есть таймлайн. (цепочка кадров) слои в таймлайне нужны по большому счету только для удобства редактирования. все слои одного таймлайна проигрываются синхронно. > btnLeft.onRollOver = showHint("Go left"); > btnRight.onRollOver = showHint("Go right"); получается, что ты свойствам onRollOver и onRollOver объекта btnRight присваиваешь результат выполнения функций, а НЕ ссылки на функции ...а с классом попробуй :) может быть будет удобнее :) |
| Часовой пояс GMT +4, время: 04:50. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.