当用户按下“新游戏”按钮时,我无法重新启动2D游戏。重新启动2D游戏
我的游戏结构:
游戏中有几个“屏幕”:开屏,说明屏,游戏主画面和游戏结束画面。
每个屏幕都是一个类的实例:OpeningScreen
类,GameScreen
类等
有一个名为Main
类。这个班有三个角色。
- 这是程序的JFrame(窗口)。
- 它有主要方法 - 第一类运行。
- 它有一种改变屏幕的方法。
当程序启动时,这个类运行。当它第一次运行时:
- 创建自己的新实例(它是一个JFrame类型的类)。
- 创建每个“屏幕级”的实例。每个'screen-class'的构造函数都将Main的实例作为参数:(aka:
GameOverScreen gameOverScreen = new GameOver(this)
)。 - 创建一个名为mainPanel的新JPanel,并将其添加到JFrame中。任何要显示的屏幕都将包含在此JPanel中(屏幕也是JPanel类型的)。
的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();
}
我的问题:游戏结束
后,游戏类调用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秒的延迟。
什么是重新启动游戏的好方法?
谢谢