Просмотр полной версии : 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? Не хотелось бы это делать, плохая практика кодирования, а меня это беспокоит в разработке флеш-приложений (я только начал в нем разбираться, но исследую возможность создания серьезных вещей, которые легко тестить и модифицировать).
Заранее благодарен за ответ.
Nox Noctis
23.07.2002, 14:58
можно например снаружи написать
btnStop.onRollOver = function () {
createTextField("txtHint",1, this._x+10, this._y+10, 0, 0);
txtHint.autoSize = true;
txtHint.text = " Press to Stop ";
}
тогда роллОверная функция будет методом и this будет указывать куда надо...
DeliMIter
23.07.2002, 15:06
Noooooooox!!!!!
Я даже запостить не успел.
Спасибо обоим, огромное :)
А "снаружи" - это где? Мне надо еще время, чтобы въехать в структуру кода. Вариант, который кажется наиболее вероятным - "Actions for Frame 1 of Layer Name Layer 1". Так?
Update: Попробовал, заработало!!! Действительно так и надо? В данном случае у меня одна сцена, один лейер и один кадр (вся жизнь происходит за счет программной анимации ходячего человечка вправо и влево). В более сложных случаях обработчики событий надо навешивать в первом кадре той сцены и того лейера, в который эти объекты положены (или, если создаются динамически, то в том же коде, где они и создаются), да?
Nox Noctis
23.07.2002, 15:16
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);
}
Nox Noctis
23.07.2002, 15:46
> А кадр - это один лейер или все видимые в данный момент лейеры?
есть таймлайн. (цепочка кадров)
слои в таймлайне нужны по большому счету только для удобства редактирования.
все слои одного таймлайна проигрываются синхронно.
> btnLeft.onRollOver = showHint("Go left");
> btnRight.onRollOver = showHint("Go right");
получается, что ты свойствам onRollOver и onRollOver объекта btnRight присваиваешь результат выполнения функций, а НЕ ссылки на функции
...а с классом попробуй :) может быть будет удобнее :)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.