2015-10-22 39 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