![]() |
|
||||||||||
|
|||||
|
Регистрация: Jul 2008
Сообщений: 42
|
Доброе время суток. Есть ряд объектов, для которых динамически нужно привязать одну и ту же функцию. В AS3 есть addEventListener и removeEventListener. А как можно сделать то же самое в AS2. Заранее благодарю за помощь.
|
|
|||||
|
Модрон-ветеринар
|
Что это за объекты и что значит "привязать"? Расшифруйте...
У разных объектов есть разные события, к ним обработчики привязываются соответствующие. |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Вопрос не очень понятен..
Если нужны события как в AS3, можете попробовать воспользоваться моей библиотекой. Она не доделана в части Sprite, но листенеры работают нормально.
__________________
Отряд Котовскага Последний раз редактировалось Котяра; 30.04.2010 в 09:30. |
|
|||||
|
Регистрация: Aug 2008
Адрес: RUS, Viipuri
Сообщений: 44
|
1. Скелет класса "кнопккко" (в данном случае: что-то вроде класса вашего объекта из того самого ряда):
import mx.events.EventDispatcher; import mx.utils.Delegate; class butts.CButtton extends MovieClip { // событие, которое будем слушать public static var EVENT_RELEASE :String = "release_super_button"; // еще какое-то foo-событие public static var EVENT_FOO :String = "f00_event_bla_bla"; // диспетчер private var dispatcher :EventDispatcher; // слушатель private var listener :Object; // конструктор public function CButtton() { // заводим связочку диспетчер-слушатель dispatcher = new EventDispatcher(); listener = new Object(); } // цепляем слушателя public function addEventListener( $event_type:String, $listenerFunc:Function, $listenerObj:Object):Void { listener[$event_type] = Delegate.create($listenerObj, $listenerFunc); dispatcher.addEventListener($event_type, listener); } // удаляем слушателя public function removeEventListener($event_type:String):Void { dispatcher.removeEventListener($event_type, listener); delete listener[$event_type]; } // релизнули кнопку private function onRelease():Void { // ...окружающий код // диспатчим событие! dispatcher.dispatchEvent( { type:EVENT_RELEASE } ); // ...окружающий код } // еще что-то произошло :) private function fooSomeAction():Void { // ...окружающий код // диспатчим событие! dispatcher.dispatchEvent( { type:EVENT_FOO } ); // ...окружающий код } } import butts.CButtton; class CAppplication /*extends MovieClip*/ { private var aCButtton_01 :CButtton; private var aCButtton_02 :CButtton; private var aCButtton_0X :CButtton; private function forExampleMethod():Void { // цепляем aCButtton_01.addEventListener(CButtton.EVENT_RELEASE, doAction, this); aCButtton_02.addEventListener(CButtton.EVENT_RELEASE, doAction, this); aCButtton_0X.addEventListener(CButtton.EVENT_RELEASE, doAction, this); // еще цепляем aCButtton_01.addEventListener(CButtton.EVENT_FOO, doFooAction, this); // отцепляем aCButtton_01.removeEventListener(CButtton.EVENT_RELEASE, doAction); aCButtton_01.removeEventListener(CButtton.EVENT_FOO, doFooAction); // ну вощем, все как в AS3 теперь } public function doAction():Void { trace("<doAction> " + arguments); } public function doFooAction():Void { trace("<doFooAction> " + arguments); } }
__________________
لعبة الحياة Последний раз редактировалось taras_; 30.04.2010 в 17:12. |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
опять :
Цитата:
листенером может быть любой объект. в том числе и this (CButtton). в этой реализации нет target/currentTarget да и самого события(аргумент в ф-ции листенере), Поэтому в АС2 практически никто не использовал mx.events.EventDispatcher из-за его убогости..
__________________
Отряд Котовскага |
|
|||||
|
Регистрация: Aug 2008
Адрес: RUS, Viipuri
Сообщений: 44
|
Не спорю: чего нет - того нет, что можно - то можно. За estimate реализации - респект, бро! Только выводы обобщающие - это зло!
![]()
__________________
لعبة الحياة Последний раз редактировалось taras_; 30.04.2010 в 18:44. |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Выводы взяты не с потолка, я не видел за 7 лет кодинга на AS2 практически ни одной библиотеки кода, или примера реального приложения использующего mx.events.EventDispatcher.
Вот Delegate - да - полезная вещь! Если ты, конечно, имеешь ввиду мой вывод: "Поэтому в АС2 практически никто не использовал mx.events.EventDispatcher из-за его убогости.. "
__________________
Отряд Котовскага |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:39. |
|
|
« Предыдущая тема | Следующая тема » |
|
|