2015-09-10 87 views
0

所以基本上我想在這裏實現的都非常簡單。使用菜單屏幕加載遊戲。點擊播放按鈕,移動到「播放屏幕」,人物死亡,點擊「主頁按鈕」返回到菜單屏幕。然而,當我在角色死亡後嘗試點擊「播放按鈕」時,它似乎並沒有註冊點擊。請記住,第一次嘗試時(首次打開應用程序時),主菜單類中的按鈕可點擊。然而,當我嘗試使用updateGOSButtons()方法轉換回相同的主菜單類(如下所示)時,這些按鈕變得不可點擊。Libgdx scene2d inputprocessor不工作?

MENU Screen類

public void show() { 
     //init table and stuff 
     buttonPlay.addListener(new ClickListener() { 
      @Override 
      public void clicked(InputEvent event, float x, float y) { 
       buttonClicked.play(); 
       game.setScreen(new GameScreen(game)); 
       dispose(); 
      } 
     }); 

     buttonRate.addListener(new ClickListener() { 
      @Override 
      public void clicked(InputEvent event, float x, float y) { 
       buttonClicked.play(); 
       System.out.println("Nothing happens Yet"); 
      } 
     }); 
     Gdx.input.setInputProcessor(stage); 
} 

PLAY Screen類

public void updateGOSButtons() { 
     if (gos.isGoButtonClicked()) { 
      gameOver.stop(); 
      backgroundMusic.play(); 

      gameState = GameState.START; 

      dispose(); 
      game.setScreen(new GameScreen(game)); 
     } 

     if (gos.isHomeButtonClicked()) { 
      gameOver.stop(); 
      backgroundMusic.play(); 

      gameState = GameState.START; 

      dispose(); 
      game.setScreen(new MainMenuScreen(game)); 
     } 

     Gdx.input.setInputProcessor(gos.getStage()); 
    } 
+0

你創建一個新的階段?大多數情況下,當我的舞臺,按鈕或其他演員不工作時,是因爲我在分配它或添加了監聽器之後創建了一個新對象。 – Madmenyo

回答

0

我相信你正在呼籲在渲染GameScreen的updateGOSButtons方法。我認爲這個問題可以是設置屏幕MainScreen

if (gos.isHomeButtonClicked()) 
    { 
     ... 

Gdx.input.setInputProcessor(gos.getStage()); 

後調用一個更多的時間與 「改寫」 的

Gdx.input.setInputProcessor(stage); 

的MainMenu屏幕僅被調用一次(在屏幕開始處的show method中)。

解決方法是將遊戲畫面中inputProcessor的設置移動到顯示()方法(因此它只會被調用一次)。

如果你因爲某些原因需要比一個階段更要inputProcessor只使用InputMultiplexer - 你可以瞭解如何在這裏使用它:

https://github.com/libgdx/libgdx/wiki/Event-handling

+0

我只是想感謝你的時間,這是一個絕對無懈可擊的答案。我嘗試添加一個布爾變量到我的updateGOS方法,以確定它是否已經點擊一次,如果是這樣停止更新輸入處理器,但是在調試時我發現該方法在屏幕更改爲** MainScreen後再次調用* *,因此再次將我的布爾變量設置爲false。林不知道如果我現在正確地做到這一點,但我只是通過將我的輸入處理器添加到我的** MainScreen **的渲染方法來解決它。我想知道這是否是「低效率」的行爲方式 –