Показать сообщение отдельно
Старый 07.01.2013, 12:11
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 3  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Вам бы включить строгий режим компиляции, чтобы получать от компилятора сообщения об ошибках.
Строго говоря, public function onKeyDownEvent():void вообще не должно компилиться, так как обработчик события обязан принимать объект события в качестве аргумента. То есть
Код AS3:
public function onKeyDownEvent(event:KeyboardEvent):void
Цитата:
Но метод объекта beatle не вызывается из этой функции, хотя из конструктора класса Main он вызывается.
Очевидно потому, что в конструкторе Вы создаете переменную beatle, в которую и сохраняете ссылку на создаваемый экземпляр Beatle. И внутри конструктора эта переменная видна, но как только конструктор отработал (как и для любой функции), все локальные переменные функции больше не существуют. То есть Ваш обработчик понятия не имеет, что такое beatle. Надо сделать beatle членом класса, чтобы он стал видимым для всех остальных членов (методов). Объявите его в теле класса, а не конструктора.

Добавлено через 16 минут
Что же касается попыток подписаться на события клавиатуры из класса Beatle, то надо понимать, что это событие не многоцелевое, как ентерфрейм например. Его получает только стейдж и тот дисплейный объект, который в момент события находился в фокусе. То есть экземпляр Вашего битла сможет получать события клавиатуры только после того, как будет добавлен на сцену и получит фокус. Поэтому единственным "перспективным" решением было подписать stage. Однако Вы сделали это видимо опять же в конструкторе класса Beatle. А в конструкторе у объекта нет ссылки на стейдж, так как он только создается и еще не добавлен на сцену.
Обо всем этом Вам должен был рассказать компилятор, лучший друг программиста.
__________________
Reality.getBounds(this);