1

我正在开发一款 Flash 游戏并且即将完成,但我遇到了问题。当游戏结束或用户按下“结束游戏”按钮时,我想将它们返回到主菜单。游戏设置为主菜单在第 3 帧,游戏在第 4 帧运行。所有的游戏代码都在那里。

我尝试过的几件事:我只是简单地尝试返回到第三帧。这会导致错误:

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);
}
4

2 回答 2

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]
}
于 2012-11-22T05:09:30.577 回答
1

根据第 5 帧的第 66 行,它可能会发生一些事情:

  • 您的目标是 Flash Player 9,其中显示对象与您的 gotoAndStop 调用异步加载,因此您最终会得到空引用。解决方案是针对 Flash Player 10 或 11(在 Publish Settings [Ctrl+Shift+F12] 中更改它)。如果您确实需要以 Flash Player 9 为目标,可以使用复杂的方法来确保可以访问属性

  • gotoAndStop您从第 5 帧引用对象之后,该对象不再可用,因此引发空对象引用错误

  • 这是您的逻辑错误,我们需要查看一些代码才能找到它

如有疑问,最好将gotoAndStop调用保留为方法中的最后一个。

编辑:

看到代码后,似乎stage本身为null,从而抛出错误。如果它没有明显的区别,你可以用 try/catch 包围你的代码:

try {
    while(stage.numChildren){
        stage.removeChildAt(0);
    }
} catch (error:Error) {
}

还可以尝试收听该ADDED_TO_STAGE事件以确保您stage在访问它之前有一个有效的参考。

于 2012-11-22T04:37:12.460 回答