无法访问null对象引用的属性或方法

时间:2010-09-04 09:43:54

标签: flex flash actionscript-3 preloader

我尝试在Flex中为我用Flash编写的项目做preloder。 我是在这个网站的帮助下做到的 link text  我的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;
} ...

当我接受Flex制作的新swf文件时,我有错误 TypeError:错误#1009:无法访问空对象引用的属性或方法。  在Game()

如果我发表评论

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

Flex应用程序工作,但Flash应用程序不响应按钮

请如何一起制作预装载器和工作按钮

2 个答案:

答案 0 :(得分:6)

在将显示对象添加到显示列表之前,stage属性将为null。收听addedToStage事件并从那里添加关键监听器。

addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
function onAddedToStage(e:Event):void
{
    stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown);
    stage.addEventListener(KeyboardEvent.KEY_UP, keyUp);
}

答案 1 :(得分:2)

任何时候你需要访问舞台,让类听它/在构造函数中检查它,并让你的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);
        }
  }

}