當用戶按下「新遊戲」按鈕時,我無法重新啓動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秒的延遲。
什麼是重新啓動遊戲的好方法?
謝謝