2015-10-22 2 views
1

Моя цель - показать диалог пользователю, чтобы он мог выбрать, какой актер добавить в сцену. Я делаю это на главном экране приложения, которое реализует Screen и GestureListener. (Мне нужно, чтобы GestureListener прослушивал двойной щелчок). Я создаю диалог в переопределенном методе touchDown(). Когда появится диалоговое окно, оно не работает. Экран продолжает прослушивать вход в touchDown, если я нажму на любую точку экрана.Libgdx: Dialog не прослушивает вход

Это код:

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 (новый GestureDetector (this)); – Loris

+2

С помощью этой линии вы удаляете сцену в качестве входного процессора. Чтобы добавить оба, вам нужен входной мультиплексор. –

+0

Спасибо. Теперь он работает, даже если, когда я выбираю действие в диалоге и добавляю актера в сцену, фон сцены исчезает – Loris

Смежные вопросы