SWF装载机 - > TypeError:错误#1009(空引用)

时间:2015-05-20 16:44:59

标签: actionscript-3 flash flash-cs6

我已经阅读了以前的SO帖子,似乎有些人和我有同样的问题 - 但没有人提出解决方案来解决我的问题:)

我设计了3款属于他们自己的SWF文件的游戏,我试图将它们加载到容器程序中的按键上,类似于:)。

我在我的所有SWF文件上获得了TypeError 1009 null引用:(当我从Windows加载它们时它们运行得很好。我已经尝试加载其他人制作的SWF,并且也许我设计Flash游戏的方式有点过了? 一切都发生在第1帧 - 这可能是关闭的东西。

我的加载程序代码是:

stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeysDown);

function loaderFunction(swfFile:String):void {
    var loader:Loader = new Loader();
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
    loader.load(new URLRequest(swfFile));
}

function onComplete(e:Event):void {
    var movie:* = LoaderInfo(e.currentTarget).content;
    //Adding content to the stage
    stage.addChild(movie);
}


function reportKeysDown(event:KeyboardEvent):void 
{ 
    if(event.keyCode == Keyboard.NUMBER_1) {
        stage.removeChildren(1);
        loaderFunction("Card.swf");
    }
    if(event.keyCode == Keyboard.NUMBER_2){
        stage.removeChildren(1);
        loaderFunction("Puzzle.swf");
    }
    if(event.keyCode == Keyboard.NUMBER_3){
        stage.removeChildren(1);
        loaderFunction("BallGame.swf");
    }
}

错误是

  

TypeError:错误#1009:无法访问null的属性或方法   对象参考。在BallGame_fla :: MainTimeline / frame1()

(我为SWF的所有人提供了这些

我不确定如何调试我正在加载的游戏,因为当我单独玩游戏时没有任何问题。 有任何想法吗 :)?谢谢!

编辑: 它开始告诉我哪些线路正在起作用,它似乎是键盘听众,至少对于其中一个游戏。我正在阅读键盘,就像我使用装载机swf一样。

stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeyDown);

解决方案 - 编辑: 问题是加载的SWF正在使用"阶段"财产,当他们被装入另一个SWF时,他们的拥有权并不是他们的。导致错误的是什么:@BotMaster

解决方案 - 解决方案编辑: 如果您正在使用

,您仍然可以在嵌套的SWF中查找键盘输入(就像我在做的那样)
Event.ADDED_TO_STAGE

像这样,例如:)

this.addEventListener(Event.ADDED_TO_STAGE, onAdded);
function onAdded(e:Event):void{
    trace("added");
    stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeyDown); 
}

@null

1 个答案:

答案 0 :(得分:2)

stage添加到显示列表时,

null才可用(不是DisplayObject)。

该规则的唯一例外是主文件或在Flash播放器中打开的第一个文件。 这就是为什么你的每个游戏都可以单独播放。

如果可用,您应该只使用stage属性。为此,请收听Event.ADDED_TO_STAGE事件。将某些内容添加到舞台时将调度此项。在处理程序功能中,您可以安全地使用stage

您仍然应该将监听器添加到stage,但前提是您可以使用。

请阅读有关addChild()的文档。基本上永远不会stage添加任何内容。通常,请查看显示列表的基础知识及其工作原理。