1. Скелет класса "кнопккко" (в данном случае: что-то вроде класса вашего объекта из того самого ряда):

Код AS1/AS2:
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 } );
// ...окружающий код
}
}
2. Теперь перемещаемся в класс, где будем подключать\отключать слушателей:

Код AS1/AS2:
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);
}
}