2015-10-22 42 views
1

我的目標是向用戶顯示一個對話框,以便他能夠選擇將哪個演員添加到舞臺。我在實現Screen和GestureListener的應用程序的主屏幕中執行此操作。 (我需要GestureListener來傾聽雙擊)。我在被覆蓋的touchDown()方法中創建對話框。 當對話框出現時,它不起作用。如果我點擊屏幕上的任意一點,屏幕會一直監聽touchDown中的輸入。Libgdx:對話框不聽輸入

這是代碼:

public class SquareDefense implements Screen, GestureListener { 
    .... 
    @Override 
    public boolean touchDown(float x, float y, int pointer, int button) { 

     System.out.println("touchDown"); 

     if(squareDefenseTable.getActor(x, y) != null) { 
      // rotate the clicked actor! 
      squareDefenseTable.rotateActor(x, y); 
     } 
     else { 
      showDialog(); 
     } 

     return true; 
    } 

    private void showDialog() { 
     Dialog dialog = new Dialog("Choose an action", skin) { 

      @Override 
      protected void result(Object object) { 
       boolean exit = (Boolean) object; 
       if (exit) { 
        Gdx.app.exit(); 
       } else { 
        remove(); 
       } 
      } 

      @Override 
      public Dialog show(Stage stage) { 
       return super.show(stage); 
      } 

      @Override 
      public void cancel() { 
       super.cancel(); 
      } 

      @Override 
      public float getPrefHeight() { 
       return 50f; 
      } 
     }; 
     dialog.button("Yes", true); 
     dialog.button("No", false); 
     dialog.key(Input.Keys.ENTER, true); 
     dialog.key(Input.Keys.ESCAPE, false); 
     dialog.show(stage); 
    } 
} 
+0

我不知道,如果你的問題解決了,如果是的話,你可以通過選擇正確的答案來解決你的問題,謝謝 – Netero

回答

0

我想你錯過添加這行代碼:

Gdx.input.setInputProcessor(stage); 

告訴我,如果說工作

+0

在show()方法中,我有Gdx.input.setInputProcessor(new GestureDetector(this)); – Loris

+2

通過這一行,您可以刪除作爲輸入處理器的舞臺。要同時添加,您需要一個輸入多路複用器。 –

+0

謝謝。現在它可以工作,即使當我在對話框中選擇一個動作時,我會將一個演員添加到舞臺上,舞臺的背景消失 – Loris