1

我尝试在 Flex 中为我用 Flash 编写的项目做 preloder。我在这个站点 链接文本的帮助下完成了这个 我的 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:无法访问空对象引用的属性或方法。在游戏()

如果我评论

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

Flex 应用程序工作,但 Flash 应用程序对按钮按下没有反应

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

4

2 回答 2

6

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);
}
于 2010-09-04T10:01:54.307 回答
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);
        }
  }

}
于 2010-09-05T06:37:06.763 回答