Доброго времени суток.
Разрабатываю небольшую игру. Проблема возникла когда реализовывал смерть персонажа. Чтобы оповестить
все классы о смерти персонажа решил использовать собственное событие. Поскольку класс персонажа уже расширяет класс Sprite, а реализовывать интерфейс IEventDipatcher не очень хочется (просто не знаю как) решил создать отдельный класс расширяющий EventDispatcher. Внутри этого класса есть открытый метод внутри которого создается новое событие.
В классе персонажа создается экземпляр класса унаследованного от EventDispatcher и используя композицию вызывается метод создающий новое событие. Во всех остальных классах также создаются экземпляры класса унаследованного от EventDispatcher и подписываются на это событие.
Проблема: событие не срабатывает (слушатели не вызываются), никаких ошибок и исключений нет.
Привожу код (код я специально сильно упростил).
Класс события:

Код AS3:
package {
import flash.events.Event;
import flash.events.EventDispatcher;
public class GameOverEvent extends EventDispatcher{
public static const GAME_OVER:String = "gameOver";
public function GameOverEvent(){
}
internal function gameOverListener():void{
dispatchEvent(new Event(GameOverEvent.GAME_OVER));
}
}
}
Код класса создающего экземпляр GameOverEvent и вызывающий метод gameOverListener использую композицию:

Код AS3:
package {
import flash.utils.Timer;
import flash.events.*;
public class Compozition{
private var timer:Timer;
private var gameOverEvent:GameOverEvent;
public function Compozition(gameOverEvent){
gameOverEvent = new GameOverEvent();
timer = new Timer(1000);
timer.addEventListener(TimerEvent.TIMER, endListener);
timer.start();
}
private function endListener(e:TimerEvent):void{
if(timer.currentCount == 10){
gameOverEvent.gameOverListener();
}
}
}
}
Код класса подписывающегося на событие GameOverEvent.GAME_OVER:

Код AS3:
package {
import flash.display.Sprite;
import flash.utils.Timer;
import flash.events.*;
public class MySprite extends Sprite{
private var timer:Timer;
private var gameOver:GameOverEvent;
public function MySprite(){
this.x = 200;
this.y = 300;
timer = new Timer(1000);
timer.addEventListener(TimerEvent.TIMER, moveListener);
timer.start();
gameOver = new GameOverEvent();
gameOver.addEventListener(GameOverEvent.GAME_OVER, gameOverListener);
}
private function moveListener(e:TimerEvent):void{
this.x += 5;
}
private function gameOverListener(e:Event):void{
timer.stop();
timer.removeEventListener(TimerEvent.TIMER, moveListener);
trace("сработало пользовательское событие");
}
}
}
Подскажите пожалуйста, где может быть ошибка или возможно я вообще ерунду делаю.