我已经阅读了以前的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
答案 0 :(得分:2)
stage
添加到显示列表时, null
才可用(不是DisplayObject
)。
该规则的唯一例外是主文件或在Flash播放器中打开的第一个文件。 这就是为什么你的每个游戏都可以单独播放。
如果可用,您应该只使用stage
属性。为此,请收听Event.ADDED_TO_STAGE
事件。将某些内容添加到舞台时将调度此项。在处理程序功能中,您可以安全地使用stage
。
您仍然应该将监听器添加到stage
,但前提是您可以使用。
请阅读有关addChild()的文档。基本上永远不会向stage
添加任何内容。通常,请查看显示列表的基础知识及其工作原理。