Вы пытаетесь создать прослушиватель событий для MOUSE_LEAVE в конструкторе. Возможно, что объект stage еще не существует, если MainNav не был добавлен на этап с помощью метода addChild (). Если MainNav уже находится на сцене во время разработки, все еще возможно, что этап не будет доступен немедленно. Для классов, которые наследуются от DisplayObject (MovieClip, Sprite и т. Д.), Я делаю только одно в конструкторе: настраиваю прослушиватель Event.ADDED_TO_STAGE. Этот слушатель вызывает метод init (), когда объект был добавлен в стек отображения сцены с помощью addChild () из родительского контейнера, или если объект уже находится на сцене во время разработки. Когда вызывается мой метод init (), я знаю, что свойство stage будет доступно.
В вашем конструкторе stage может еще не существовать в экземпляре, но вы должны получить ошибку времени выполнения. Тем не менее, вы используете ключевое слово this перед началом этапа. Когда вы используете 'this' в классе, который наследуется от Object (ваш класс делает это через MovieClip-> DisplayObject-> EventDispatcher-> Object), компилятор не выдаст ошибку, если свойство не существует, потому что он пытается создать это собственность как член 'этого'. Это происходит потому, что класс Object является динамическим, что означает, что новые свойства могут быть созданы в любое время без необходимости объявлять их как переменные класса в заголовке - вам просто нужно использовать ключевое слово this при использовании этого динамического свойства. Когда вы используете this.stage, если stage не существует, класс создает для вас этап свойства. Однако, это не та стадия, которую вы хотите, поэтому слушатель просто привязывается к пустому объекту, который ничего не делает. Попробуйте удалить «this» при обращении к этапу, и я уверен, что вы увидите ошибку в какой-то момент. В общем случае не рекомендуется использовать this для свойств, так как компилятор будет игнорировать ошибки типа для этого свойства.
Вы упомянули в одном комментарии выше, что MOUSE_LEAVE не работает в IDE, но я протестировал это в CS4 и он работает. Возможно, вы наблюдаете разницу в производительности проигрывателя Flash Player в IDE по сравнению с подключаемым модулем Flash Player. В некоторых случаях ваш прослушиватель событий сцены будет работать из конструктора, если SWF-файл загружается быстро и сцена доступна сразу, но это ненадежно. Переместите этот слушатель в метод init (), который вызывается после события ADDED_TO_STAGE, и не используйте ключевое слово this.