![]() |
|
||||||||||
|
|||||
|
Насколько я понял у объекта Button отсуствует метод addListener(), а так хочется,
чтобы мой клип ловил скажем onRollOver от кнопок!!!. Именно от действующих кнопок на сцене. Есть выход? MovieClip тоже умеет генерить onRollOver, но это же не кнопка!!!.
__________________
Art & HighTech must live together. |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
хм.
btn.onRollOver = function() {
trace(this);
this.broadcastMessage("btnRollOver");
};
mc.btnRollOver = function() {
trace(this);
};
ASBroadcaster.initialize(btn);
btn.addListener(mc);
'btn' - это имя твоей кнопки 'mc' - это имя клипа, который ловит событие 'btnRollOver' |
|
|||||
|
Читал твой урок тут. Респект, респект. :-) Теперь по делу. Все что ты написал не лишено смысла, но не подходит для моего случае. А случай тяжелый. Пишу мышиный компонент. Вот кусок кода:
#initclip
....................
function mouseClass() {
this.init();
}
mouseClass.prototype.init = function() {
theTarget = this._parent[this._targetInstanceName];
Mouse.hide();
theTarget.gotoAndStop("Out");
startDrag(theTarget, true);
ASBroadcaster.initialize(this);
};
Button.prototype.onRollOver = function() {
theTarget.gotoAndStop("Over");
};
...................
__________________
Art & HighTech must live together. |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
ну, начнем с того, что Button.prototype.onRollOver тут не годится...
ведь тогда если определить у кнопки событие onRollOver - то онРоллОвер из прототипа вызываться не будет - а значит и твоя конструкция работать не будет... и addListener тут НЕ ПРИ ЧЕМ =) потому что онРоллОвер - это индивидуальное события каждой кнопки, а не что-то вроде онЕнтерФрейм или онМаусДаун, сообщения о которых рассылаются одновременно всем слушающим объектам... все хитрее - тебе нужно сделать так, чтобы кроме (КРОМЕ, а не ВМЕСТО) присвоенного онРоллОвера срабатывала еще и твоя функция настраивающая курсор... от того, как ты решишь эту, более сложную проблему - зависит где и как определить theTarget... мне счас лениво изобретать, спать пора =) Последний раз редактировалось Nox Noctis; 25.10.2002 в 21:34. |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
так, очередной велосипед был успешно разработан и запущен =)))
// функция настройки курсора. вставишь все нужные тебе действия.
Button.prototype.rollOverCursor = function() {
trace("Cursor Adjust");
};
// сеттер (порода собак такая)
Button.prototype.setRollOver = function(newFunction) {
this.rollOver = newFunction;
};
// геттер (тоже что сеттер, только наоборот)
Button.prototype.getRollOver = function() {
return function () {
this.rollOverCursor();
this.rollOver();
};
};
// прячем лишнее, создаем геттер/сеттер свойство
ASSetpropflags(Button.prototype, ["getRollOver", "setRollOver"], 7);
Button.prototype.addProperty("onRollOver", Button.prototype.getRollOver, Button.prototype.setRollOver);
если где-нить в скриптах будет определена функция onRollOver, то она будет выполняться после настройки курсора. теперь остается в тело функции rollOverCursor внести действия с представителем твоего класса mouseClass... |
|
|||||
|
Гм.. интересную фишку выяснил. Если написать функцию для онРоллОвер и привязать ее к
кнопке, расположив код в фрэйме, как ты написал в предыдушем фржйме, то моя конструкция действительно не работает. НО(!!) если привязать код обработчика событии прямо к кнопке используя on(rollOver) { ... }, то все прекрасно пашет. Получается, что есть разница между этими двумя подходами к привязывания обработчика событии. Но это так, к слову, щас пойду пробовать то, что ты написал щас. А вообще ты брат молодец, не потому, что ты много чего знаешь, а потому что ленишься этим делится людям. Респект.! Если не влом поделись литературкой о недокументированых вохможностей. :-) Можно на мыло, если хочешь. groovesonic@vida.ru Спасибо за все.
__________________
Art & HighTech must live together. |
|
|||||
|
Осознал -> Здорово.
Ключевым моментом является то, что каждый раз когда возникает какое либо событие, то автоматический вызывается его геттер, так? Это справедливо для всех событии? Главный глюк исправен, теперь надо подумать, как быть с theTarget, но это я пожалуй сам :-)
__________________
Art & HighTech must live together. |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
Цитата:
Цитата:
открою страшную тайну... только никому ни слова... ЛЮБОЕ событие определенное в onClipEvent или on работает автономно относительно соответствующих событий определенных при помощи присвоения функций =) (например, если обработчик определен и так и так - то событие будет обрабатываться дважды =) ) Цитата:
в качестве с"войства" в данном случае метод onRollOver... запуск функции - тоже операция чтения. потому сначала вызывается геттер, от него получается ссылка на вызываемую функцию, происходит вызов полученной ссылки... |
|
|||||
|
Цитата:
окэй, базара нет, унесу с собой в могилу. Кстати, как я выяснил, сначало вызывается код из on(), а потом уже тот, что привязан к onRollOver.кстати раскрой секрет строчки кода Что с ней, что без нее все равно работает А это не порядок брат, все должно быть четко.
__________________
Art & HighTech must live together. Последний раз редактировалось GrooveSonic; 27.10.2002 в 12:14. |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
ASSetPropFlags(Button.prototype, ["getRollOver", "setRollOver"], 7);
делает новые методы класса Button - getRollOver и setRollOver - неизменяемыми (рид онли), - нестираемыми, - невидимыми, - несгораемыми, - ударопрочными, - водонепроницаемыми, - несодержащими искусственных красителей и консервантов =) естессно без этой строчки все работает - но делать все нужно надежно и как можно более дуракоустойчиво, служебные методы нужно прятать =) |
![]() |
Часовой пояс GMT +4, время: 08:24. |
|
|
« Предыдущая тема | Следующая тема » |
|
|