当用户按下“新游戏”按钮时,我无法重启2D游戏。
我的游戏结构:
游戏有几个“屏幕”:打开屏幕,说明屏幕,主游戏屏幕和游戏结束屏幕。
每个屏幕都是一个类的实例:OpeningScreen
类,GameScreen
类等。
有一个名为Main
的班级。这门课有三个角色。
程序启动时,此类运行。第一次运行时:
GameOverScreen gameOverScreen = new GameOver(this)
)。changeScreen()方法的工作原理:
changeScreen()的签名是:changeScreen(JPanel from, JPanel to)
。
每当需要更改屏幕时,显示的当前屏幕将调用此方法,如下所示:main.changeScreen(this, main.InstructionsScreen)
。它会从mainPanel
中移除上一个屏幕,并将新屏幕添加到mainPanel
。如上所述,这些屏幕是在程序启动时创建的。
这是更改屏幕的方法:
public void changeScreen(JPanel from, JPanel to){
mainPanel.remove(from);
mainPanel.add(to);
mainPanel.revalidate();
mainPanel.repaint();
}
我的问题:
游戏结束后,Game类会调用changeScreen
方法:main.changeScreen(this, main.GameOverScreen)
。
这会将游戏屏幕替换为屏幕上的游戏。
在游戏结束屏幕中按“新游戏”按钮,会调用main.changeScreen(this, main.GameScreen)
。
问题:按下游戏结束屏幕中的“新游戏”按钮,确实再次显示Game
类的实例。但这是旧实例,因此游戏不会重新启动。它已经完成了。
我尝试在changeScreen()
中执行以下更改:
public void changeScreen(JPanel from, JPanel to){
mainPanel.remove(from);
if(to.equals(gameScreen)){
gameScreen = null;
gameScreen = new GameScreen(this);
}
mainPanel.add(gameScreen);
mainPanel.revalidate();
mainPanel.repaint();
}
这应该重置gameScreen
对象。
但是当按下“新游戏”按钮时,这会产生大约10秒的延迟。
重启游戏的好方法是什么?
谢谢
答案 0 :(得分:0)
您必须删除子/实例。猜测这是Actionscript 3你应该做removeChild然后让子null。试试吧。