2014-01-25 219 views
0

當用戶按下「新遊戲」按鈕時,我無法重新啓動2D遊戲。重新啓動2D遊戲

我的遊戲結構:

遊戲中有幾個「屏幕」:開屏,說明屏,遊戲主畫面和遊戲結束畫面。

每個屏幕都是一個類的實例:OpeningScreen類,GameScreen類等

有一個名爲Main類。這個班有三個角色。

  • 這是程序的JFrame(窗口)。
  • 它有主要方法 - 第一類運行。
  • 它有一種改變屏幕的方法。

當程序啓動時,這個類運行。當它第一次運行時:

  1. 創建自己的新實例(它是一個JFrame類型的類)。
  2. 創建每個「屏幕級」的實例。每個'screen-class'的構造函數都將Main的實例作爲參數:(aka:GameOverScreen gameOverScreen = new GameOver(this))。
  3. 創建一個名爲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秒的延遲。

什麼是重新啓動遊戲的好方法?

謝謝

回答

0

您必須刪除子/實例。猜測這是Actionscript 3你應該做removeChild,然後讓這個孩子爲空。試試看。