2015-09-10 2 views
0

Так что в основном все, что я пытаюсь достичь здесь, очень просто. Загрузите игру с помощью экрана меню. Нажмите кнопку воспроизведения, перейдите на «экран воспроизведения», символ умирает, нажатие кнопки «домой» возвращается к экрану меню. Однако, когда я пытаюсь нажать кнопку «play» после того, как мой персонаж умрет, он, похоже, вообще не регистрирует клики. Имейте в виду, что с первой попытки (когда приложение открыто) мои кнопки в классе основного меню доступны для просмотра. Однако после того, как я попытаюсь перейти обратно в тот же класс основного меню, используя метод updateGOSButtons(), как показано ниже, кнопки становятся незаметными.Линейный входной процессор Libgdx scene2d не работает?

МЕНЮ КЛАСС

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); 
} 

ИГРЫ 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

Вы создаете новый этап? Большую часть времени, когда моя сцена, кнопки или какой-либо другой актер не работает, потому что я создаю в нем новый объект после того, как я назначил его, или добавил Listener или что-то еще. – Madmenyo

ответ

0

Я считаю, что вы вызываете updateGOSButtons метод в визуализации GameScreen. Я думаю, что проблема может быть, что после установки экрана В начало

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

в

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

называется еще раз и "переопределение" The

Gdx.input.setInputProcessor(stage); 

из MainMenu экран, который вызывается только один раз (в режиме show так в начале экрана).

Решение состоит в том, чтобы перевести te setup входного процессора в экран игры на show() (так он будет вызываться только один раз).

Если вы по какой-то причине необходимо более одной стадии, чтобы быть inputProcessor просто использовать InputMultiplexer - вы можете прочитать, как использовать его здесь:

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

+0

Я просто хочу поблагодарить вас за ваше время, это был абсолютно безупречный ответ. Я попытался добавить логическую переменную в мой метод updateGOS, чтобы определить, был ли он уже нажат один раз, и если так прекратить обновление входного процессора, однако после отладки я обнаружил, что метод вызывается еще раз после того, как экран был изменен на ** MainScreen * *, таким образом, снова установите для моей переменной boolean значение false. Я не уверен, что Im делает это правильно, но я решил это, просто добавив свой входной процессор к методу рендеринга моего ** MainScreen **. Im интересно, если это "неэффективный" способ делать –

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