Если вам нужны пользовательские данные для путешествия с вашим событием, да, вам нужно создать собственный класс событий.
Вот простой пример:
package {
import flash.events.Event;
public class ColorEvent extends Event {
public static const CHANGE_COLOR:String = "ChangeColorEvent";
public var color:uint;
public function ColorEvent(type:String, color:uint, bubbles:Boolean = false, cancelable:Boolean = false) {
this.color = color;
super(type, bubbles, cancelable);
}
override public function clone():Event {
return new ColorEvent(type, color, bubbles, cancelable);
}
}
}
Обратите внимание, что метод клонирования НЕ является опциональным. Вы должны иметь этот метод в своем пользовательском классе, чтобы ваше событие когда-либо пересылалось должным образом (например, когда один объект получает событие, а затем повторно отправляет его как свое собственное).
Теперь, что касается отправки события, это будет работать следующим образом (очевидно, этот код будет идти в методе класса, который расширяет EventDispatcher).
dispatchEvent(new ColorEvent(ColorEvent.CHANGE_COLOR, 0xFF0000));
И, наконец, подписаться на событие:
function onChangeColor(event:ColorEvent):void {
trace(event.color);
}
foo.addEventListener(ColorEvent.CHANGE_COLOR, onChangeColor);