Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > ActionScript

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 25.10.2002, 14:47
GrooveSonic вне форума Посмотреть профиль Отправить личное сообщение для GrooveSonic Найти все сообщения от GrooveSonic
  № 1  
GrooveSonic

Регистрация: Jul 2001
Адрес: Россия, Москва
Сообщений: 36
Отправить сообщение для GrooveSonic с помощью ICQ
По умолчанию Как добавить Listener к Button?

Насколько я понял у объекта Button отсуствует метод addListener(), а так хочется,

чтобы мой клип ловил скажем onRollOver от кнопок!!!. Именно от действующих кнопок на сцене.

Есть выход?

MovieClip тоже умеет генерить onRollOver, но это же не кнопка!!!.
__________________
Art & HighTech must live together.

Старый 25.10.2002, 19:12
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 2  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: 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'

Старый 25.10.2002, 20:03
GrooveSonic вне форума Посмотреть профиль Отправить личное сообщение для GrooveSonic Найти все сообщения от GrooveSonic
  № 3  
GrooveSonic

Регистрация: Jul 2001
Адрес: Россия, Москва
Сообщений: 36
Отправить сообщение для GrooveSonic с помощью ICQ
По умолчанию Оо.. здарова Ноктис.

Читал твой урок тут. Респект, респект. :-) Теперь по делу. Все что ты написал не лишено смысла, но не подходит для моего случае. А случай тяжелый. Пишу мышиный компонент. Вот кусок кода:
Код:
#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");
};
...................
как видно theTarget объявлен в _root, что теоретически может вызвать конфликт, если юзер тоже определит в _root переменую с таким же названием. Если theTarget определить в обьекте, то из Button не будет его видно. Ну а определение в функции можно не обсуждать. Так как быть? Где определить этот не счастный theTarget, чтобы он был инкапсультирован в класс и в то же время чтобы Button видел. Выход нашел такой, что сделать mouseClass лисенером Button и писать код для onRollOver от mouseClass, а не от Button как приведено выше. Думал, что молодец, нашел выход, но батюшки. Макромедии опленились сделать addListener() для Button. That's suck. Вот собственно и всплыл вопрос. Как думаешь выйти из ситуации?
__________________
Art & HighTech must live together.

Старый 25.10.2002, 21:32
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 4  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
ну, начнем с того, что Button.prototype.onRollOver тут не годится...

ведь тогда если определить у кнопки событие onRollOver - то онРоллОвер из прототипа вызываться не будет - а значит и твоя конструкция работать не будет...

и addListener тут НЕ ПРИ ЧЕМ =)
потому что онРоллОвер - это индивидуальное события каждой кнопки,
а не что-то вроде онЕнтерФрейм или онМаусДаун, сообщения о которых рассылаются одновременно всем слушающим объектам...

все хитрее - тебе нужно сделать так, чтобы кроме (КРОМЕ, а не ВМЕСТО) присвоенного онРоллОвера срабатывала еще и твоя функция настраивающая курсор...

от того, как ты решишь эту, более сложную проблему - зависит где и как определить theTarget...

мне счас лениво изобретать, спать пора =)


Последний раз редактировалось Nox Noctis; 25.10.2002 в 21:34.
Старый 25.10.2002, 23:10
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 5  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: 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);
таким образом ДЛЯ ВСЕХ кнопок, всегда при роллОвере будет срабатывать rollOverCursor...
если где-нить в скриптах будет определена функция onRollOver, то она будет выполняться после настройки курсора.

теперь остается в тело функции rollOverCursor внести действия с представителем твоего класса mouseClass...

Старый 26.10.2002, 12:18
GrooveSonic вне форума Посмотреть профиль Отправить личное сообщение для GrooveSonic Найти все сообщения от GrooveSonic
  № 6  
GrooveSonic

Регистрация: Jul 2001
Адрес: Россия, Москва
Сообщений: 36
Отправить сообщение для GrooveSonic с помощью ICQ
Thumbs up Не поленился изобретать. За это спасибо. :-)

Гм.. интересную фишку выяснил. Если написать функцию для онРоллОвер и привязать ее к

кнопке, расположив код в фрэйме, как ты написал в предыдушем фржйме, то моя конструкция действительно не

работает. НО(!!) если привязать код обработчика событии прямо к кнопке используя on(rollOver)

{ ... }, то все прекрасно пашет. Получается, что есть разница между этими двумя подходами к

привязывания обработчика событии. Но это так, к слову, щас пойду пробовать то, что ты написал щас.
А вообще ты брат молодец, не потому, что ты много чего знаешь, а потому что ленишься этим делится людям. Респект.!

Если не влом поделись литературкой о недокументированых вохможностей. :-) Можно на мыло, если хочешь.

groovesonic@vida.ru

Спасибо за все.
__________________
Art & HighTech must live together.

Старый 26.10.2002, 12:47
GrooveSonic вне форума Посмотреть профиль Отправить личное сообщение для GrooveSonic Найти все сообщения от GrooveSonic
  № 7  
GrooveSonic

Регистрация: Jul 2001
Адрес: Россия, Москва
Сообщений: 36
Отправить сообщение для GrooveSonic с помощью ICQ
По умолчанию Только что прочел код...

Осознал -> Здорово.
Ключевым моментом является то, что каждый раз когда возникает какое либо событие, то автоматический вызывается его геттер, так? Это справедливо для всех событии?

Главный глюк исправен, теперь надо подумать, как быть с theTarget, но это я пожалуй сам :-)
__________________
Art & HighTech must live together.

Старый 27.10.2002, 02:38
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 8  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
По умолчанию Re: Не поленился изобретать. За это спасибо. :-)

Цитата:
Оригинал написал(а) GrooveSonic
Все что ты написал не лишено смысла
польщен, тронут

Цитата:
Оригинал написал(а) GrooveSonic
НО(!!) если привязать код обработчика событии прямо к кнопке используя on(rollOver)
гениально =))
открою страшную тайну... только никому ни слова... ЛЮБОЕ событие определенное в onClipEvent или on работает автономно относительно соответствующих событий определенных при помощи присвоения функций =)
(например, если обработчик определен и так и так - то событие будет обрабатываться дважды =) )

Цитата:
Оригинал написал(а) GrooveSonic
автоматически вызывается его геттер
геттер вызывается всякий раз, когда происходит обращение (чтение) к свойству, добавленного при помощи addProperty...
в качестве с"войства" в данном случае метод onRollOver...
запуск функции - тоже операция чтения.
потому сначала вызывается геттер, от него получается ссылка на вызываемую функцию, происходит вызов полученной ссылки...

Старый 27.10.2002, 12:09
GrooveSonic вне форума Посмотреть профиль Отправить личное сообщение для GrooveSonic Найти все сообщения от GrooveSonic
  № 9  
GrooveSonic

Регистрация: Jul 2001
Адрес: Россия, Москва
Сообщений: 36
Отправить сообщение для GrooveSonic с помощью ICQ
По умолчанию Не подводи иток пока, есть еще пару вопросов. :-)

Цитата:
открою страшную тайну... только никому ни слова...
окэй, базара нет, унесу с собой в могилу. Кстати, как я выяснил, сначало вызывается код из on(), а потом уже тот, что привязан к onRollOver.

кстати раскрой секрет строчки кода
Код:
ASSetpropflags(Button.prototype, ["getRollOver", "setRollOver"], 7);
Что с ней, что без нее все равно работает А это не порядок брат, все должно быть четко.
__________________
Art & HighTech must live together.


Последний раз редактировалось GrooveSonic; 27.10.2002 в 12:14.
Старый 28.10.2002, 02:29
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 10  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
ASSetPropFlags(Button.prototype, ["getRollOver", "setRollOver"], 7);

делает новые методы класса Button - getRollOver и setRollOver

- неизменяемыми (рид онли),
- нестираемыми,
- невидимыми,
- несгораемыми,
- ударопрочными,
- водонепроницаемыми,
- несодержащими искусственных красителей и консервантов =)

естессно без этой строчки все работает - но делать все нужно надежно и как можно более дуракоустойчиво,
служебные методы нужно прятать =)

Создать новую тему   Часовой пояс GMT +4, время: 08:24.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 08:24.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.