2016-11-08 64 views
1

再次,新手需要你的建議,親切的陌生人。多個階段 - 按鈕不反應?

我有一些問題,即使用Google搜索後,也無法解決。

我在我的遊戲2個階段,在每一個持有按鈕的表格: 第一個存儲表與遊戲內的按鈕:向上/向下移動並暫停 第二個存儲表示暫停菜單表。

如果「暫停」點擊(遊戲暫停和)我想提請現在可以處理輸入的第二階段。

我初始化2個階段:

public void create(){ 

... 
mainStage = new Stage(viewport,batch); 
menuStage = new Stage(viewport,batch); 
Gdx.input.setInputProcessor(mainStage); 
... 

暫停鍵得到了設置(ENUM)狀態PAUSE (同樣在暫停菜單中的「恢復」按鈕的監聽器,用來設置狀態RUNNING)

pause.addListener(new ChangeListener() { 
     @Override 
     public void changed(ChangeEvent event, Actor actor) { 
     thisState = STATE.PAUSE; 
     Gdx.input.setInputProzessor(menuStage); 

     } 
    }); 

然後在渲染方法

switch (gameState) { 
      case RUNNING: 

       deltaTime = Gdx.graphics.getDeltaTime(); 
       stateTime += deltaTime; // for the animations 

       Gdx.gl.glClearColor(0, 0, 0, 1); 
       Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

       batch.setProjectionMatrix(camera.combined); 

       update(deltaTime); 

       batch.begin(); 
       ... draws the characters 
       batch.end(); 

       mainStage.act(deltaTime); 
       mainStage.draw(); 
       break; 

      case PAUSE: 
       Gdx.gl.glClearColor(0, 0, 0, 0.6f); I want the background to become slightly darker. 
       Gdx.app.log("Game State","Game is PAUSED"); 
       menuStage.act(deltaTime); 
       menuStage.draw(); 

     } 

如果I S撻mainStage按鈕出現,但不可點擊。 我注意到,如果我點擊屏幕中間,遊戲就會停止。然而,「暫停」按鈕的聽衆甚至沒有反應,因爲控制檯上沒有通知,遊戲暫停,也沒有點擊按鈕。

我的開始屏幕只使用一個舞臺,並完全使用相同的設置。

我覺得什麼resons可能是:

  • 我用setInputProcessor虛假
  • 我用視窗錯誤(及調整)
  • 我必須以某種方式讓第一階段消失繪製新階段之前

幫助表示讚賞了很多!謝謝。


SRY我的英文不好 ..和我格式化(這是我的第一篇文章在這裏)

+0

我不明白是什麼原因導致你的舞臺從得到正確的輸入,但我確實看到了一些錯誤,你可以固定。可能讓你更接近。首先,你在暫停狀態下不清除顏色緩衝位。其次,將清晰的顏色設置爲較低的alpha值不會使其變暗 - 沒有比黑色更暗的。第三,你只是在遊戲模式下更新deltaTime和stateTime,所以這些值將在暫停模式下被錯誤的值「卡住」。 – Tenfour04

+0

嘗試ClickListener – eldo

+0

@ Tenfour04 thx很多,即使它沒有解決我的問題,至少一些其他潛在的錯誤已被消除...如果它不打擾你很多,你可以建議一個更好的方式來創建一個暫停窗口遊戲? –

回答

0

您的代碼,GDX只處理輸入的MainStage中,你可以換顯示輸入處理器當菜單或使用輸入多路複用器這樣的:

public void create(){ 

[...] 
mainStage = new Stage(viewport,batch); 
menuStage = new Stage(viewport,batch); 
InputMultiplexer multiplexer = new InputMultiplexer(); 
multiplexer.addProcessor(mainStage); 
multiplexer.addProcessor(menuStage); 
Gdx.input.setInputProcessor(multiplexer); 
[...] 

} 
+0

我已經解決了這個問題。但是,是的,就是這樣。 ^^ –