Не удается получить доступ к свойству или методу пустой ссылки на объект - PullRequest
1 голос
/ 04 сентября 2010

Я пытаюсь сделать preloder во Flex для своего проекта, написанного на Flash. Я делаю это с помощью этого сайта текст ссылки Мой проект Flash имеет следующий источник в главном классе под названием Game

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUp);

private function keyDown(event:KeyboardEvent) {
   if (event.keyCode == 81 && q_was_push == false) q_was_push = true;
   if (event.keyCode == 81) press_q = true;
   if (event.keyCode == 65) press_a = true;
   if (event.keyCode == 83) press_s = true;
   if (event.keyCode == 32) press_space = true;
} ...

Когда я беру новый SWF-файл, созданный Flex, у меня появляется ошибка Ошибка типа: ошибка № 1009: невозможно получить доступ к свойству или методу пустой ссылки на объект. в игре ()

если я прокомментирую

//stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown);
//stage.addEventListener(KeyboardEvent.KEY_UP, keyUp);

Приложение Flex работает, но приложение Flash не реагирует на нажатия кнопок

Пожалуйста, как я могу сделать предварительный загрузчик и рабочие кнопки вместе

Ответы [ 2 ]

6 голосов
/ 04 сентября 2010

Свойство stage будет нулевым, пока экранный объект не будет добавлен в список отображения.Прослушайте событие AddedToStage и добавьте оттуда ключевых слушателей.

addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
function onAddedToStage(e:Event):void
{
    stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown);
    stage.addEventListener(KeyboardEvent.KEY_UP, keyUp);
}
2 голосов
/ 05 сентября 2010

В любое время, когда вам нужен доступ к сцене, попросите Class прослушать его / проверить его в конструкторе, и ваша функция init будет обработчиком.

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    /**
     * ...
     * @author Brian Hodge
     */
    public class SomeClass extends Sprite
    {

        public function SomeClass() 
        {
            if (stage) _init();
            else addEventListener(Event.ADDED_TO_STAGE, _init);
        }
        private function _init(e:Event = null):void
        {
            //You may now access the stage property of the DisplayObject.
            stage.addEventListener(Event.RESIZE);
        }
  }

}
...