2012-11-22 56 views
1

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

我尝试过的几件事: 我只是简单地试图回到第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); 
} 

回答

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] 
} 
+0

优秀的捕获。 – BoppreH

+0

这似乎解决了它!谢谢! –

+0

非常感谢你这让我疯狂!!!!!! –

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一个有效的参考。

+0

感谢您的回复。 66中的代码已添加到该帖子中。我看到,当我构建Flash 10+时,我没有得到任何错误,但我需要为IOS和Android构建AIR。这会导致错误:-(目前endgame方法中唯一的代码是我在上面添加的第66行开始的代码。再次感谢,我真的需要这个帮助!! –

+0

我认为这是第二种情况问题。你有没有尝试过把这个代码*放在* gotoAndStop这个框架头之前呢? – BoppreH

+0

问题是,即使gotoAndStop调用被注释掉了,我也会得到错误。但无论哪种方式,我已经用gotoAndStop作为方法的最后一行来尝试它。 –