我正在制作一个Flash游戏,并且已经完成了它,但我遇到了一个问题。当游戏结束,或者用户按下“结束游戏”按钮时,我想将它们返回主菜单。设置游戏以使主菜单位于第3帧,游戏在第4帧运行。所有的游戏代码都在那里。
我尝试过的一些事情: 我只是试着回到第3帧。这会导致错误:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Hundred_fla::MainTimeline/GotoEndGame()[Hundred_fla.MainTimeline::frame5:66]
我已经尝试将所有游戏变量恢复为默认值,删除所有孩子......等等...我也得到完全相同的错误...不确定问题是什么。我认为一个解决方案是重新加载电影,但这将在Android / IOS上运行,我无法刷新网页。 ... 任何帮助将不胜感激。谢谢
编辑:第66行的代码是:
while(stage.numChildren > 0){
stage.removeChildAt(stage.numChildren-1);
}
答案 0 :(得分:2)
在尝试清除对象之前,您应该锁定阶段链接。您似乎正在删除运行代码的实例,因此它将丢失阶段引用。
var theStage:Stage=stage;
while(theStage.numChildren > 0){
theStage.removeChildAt(0);
//you can always be sure that element at [0] exists, rather than going for [numChildren-1]
}
答案 1 :(得分:1)
根据第5帧第66行的内容,可能会有以下几点:
您的目标是Flash Player 9,其中显示对象与您的gotoAndStop调用异步加载,因此您最终会使用空引用。解决方案是针对Flash Player 10或11(在发布设置中更改它[Ctrl + Shift + F12])。如果您确实需要定位Flash Player 9,则有convoluted methods to ensure the attributes are accessible
在gotoAndStop
之后引用第5帧中的对象(不再可用),从而抛出空对象引用错误
这是您逻辑中的错误,我们需要查看一些代码才能找到它
如果有疑问,最好将gotoAndStop
电话作为方法中的最后一个。
编辑:
看到代码后,似乎stage
本身为空,从而引发错误。如果没有明显区别,您可以使用try / catch包围代码:
try {
while(stage.numChildren){
stage.removeChildAt(0);
}
} catch (error:Error) {
}
另请尝试收听ADDED_TO_STAGE
事件,以确保在访问stage
前有{{1}}的有效引用。