2017-10-07 50 views
1

我目前正試圖通過一本名爲「學習Libgdx遊戲開發」的書中的教程來學習libGdx,並發現了一個奇怪的錯誤。Libgdx EXCEPTION_ACCESS_VIOLATION(0xc0000005)

有一個叫backToMenu功能:

private void backToMenu() { 
    // switch to menu screen 
    game.setScreen(new MenuScreen(game)); 
} 

它的目的僅僅是改變遊戲畫面ITO主菜單畫面。 MenuScreen上的遊戲開始,由用戶單擊開始,轉換到GameScreen。一旦用戶在GameScreen上,他/她有兩種方法返回到MainMenu,通過按下退出按鈕或達到遊戲結束狀態。首先,通過點擊逃生按鈕,我只需監聽事件:

public boolean keyUp (int keycode) { 
    // Back to Menu 
    if (keycode == Input.Keys.ESCAPE) 
     backToMenu(); 

    return false; 
} 

keyUp是一個被覆蓋的InputAdapter函數。這個工作非常好。在第二選項,會出現問題:

public void update (float deltaTime) 
{ 
    handleDebugInput(deltaTime); 
    if (isGameOver()) { 
     timeLeftGameOverDelay -= deltaTime; 
     if (timeLeftGameOverDelay < 0) 
     { 
      //init(); 
      backToMenu(); 
     } 
    } 

的代碼只是意味着,顯示「遊戲結束」消息之後3秒,用戶將自動重定向到主菜單。每次調用主遊戲循環的渲染函數時都會調用更新函數。但是用戶來到後回到主菜單,並試圖重新進入的遊戲畫面,我得到了以下錯誤:

已經由Java運行時環境檢測到致命錯誤:

 EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x77015d8b, pid=6184, tid=5856 
    JRE version: Java(TM) SE Runtime Environment (8.0_91-b15) (build 1.8.0_91-b15) 
    Java VM: Java HotSpot(TM) Client VM (25.91-b15 mixed mode windows-x86) 
    Problematic frame: 
    C [ntdll.dll+0x55d8b] 

奇怪的是,如果我試圖模擬用戶按下退出按鈕,而不是直接調用backToMenu,它突然工作!用戶可以來回走MainScreen之間 - > GameScreen - > GAMEOVER - > MainScreen - > GameScreen就好

public void update (float deltaTime) 
{ 
    handleDebugInput(deltaTime); 
    if (isGameOver()) { 
     timeLeftGameOverDelay -= deltaTime; 
     if (timeLeftGameOverDelay < 0) 
     { 
      //init(); 
      try { 
       Robot robot = new Robot(); 
       // Simulate a key press 
       robot.keyPress(KeyEvent.VK_ESCAPE); 
       robot.keyRelease(KeyEvent.VK_ESCAPE); 

      } catch (AWTException e) { 
       e.printStackTrace(); 
      } 

     } 
    } 

回答

0

有同樣的問題,我不知道確切的問題是這樣的解決方法是什麼產生ESCAPE的關鍵的關鍵事件 但是你可以通過更換

try { 
      Robot robot = new Robot(); 
      // Simulate a key press 
      robot.keyPress(KeyEvent.VK_ESCAPE); 
      robot.keyRelease(KeyEvent.VK_ESCAPE); 

     } catch (AWTException e) { 
      e.printStackTrace(); 
     } 

隨着keyUp(Keys.ESCAPE);

更有效地做到這一點,而不機器人
相關問題