2015-09-10 141 views
0

所以基本上我想在这里实现的都非常简单。使用菜单屏幕加载游戏。点击播放按钮,移动到“播放屏幕”,人物死亡,点击“主页按钮”返回到菜单屏幕。然而,当我在角色死亡后尝试点击“播放按钮”时,它似乎并没有注册点击。请记住,第一次尝试时(首次打开应用程序时),主菜单类中的按钮可点击。然而,当我尝试使用updateGOSButtons()方法转换回相同的主菜单类(如下所示)时,这些按钮变得不可点击。Libgdx scene2d inputprocessor不工作?

MENU Screen类

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

PLAY 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

你创建一个新的阶段?大多数情况下,当我的舞台,按钮或其他演员不工作时,是因为我在分配它或添加了监听器之后创建了一个新对象。 – Madmenyo

回答

0

我相信你正在呼吁在渲染GameScreen的updateGOSButtons方法。我认为这个问题可以是设置屏幕MainScreen

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

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

后调用一个更多的时间与 “改写” 的

Gdx.input.setInputProcessor(stage); 

的MainMenu屏幕仅被调用一次(在屏幕开始处的show method中)。

解决方法是将游戏画面中inputProcessor的设置移动到显示()方法(因此它只会被调用一次)。

如果你因为某些原因需要比一个阶段更要inputProcessor只使用InputMultiplexer - 你可以了解如何在这里使用它:

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

+0

我只是想感谢你的时间,这是一个绝对无懈可击的答案。我尝试添加一个布尔变量到我的updateGOS方法,以确定它是否已经点击一次,如果是这样停止更新输入处理器,但是在调试时我发现该方法在屏幕更改为** MainScreen后再次调用* *,因此再次将我的布尔变量设置为false。林不知道如果我现在正确地做到这一点,但我只是通过将我的输入处理器添加到我的** MainScreen **的渲染方法来解决它。我想知道这是否是“低效率”的行为方式 –