Libgdx scene2d 输入处理器不工作?
Libgdx scene2d inputprocessor not working?
所以基本上我想要在这里实现的一切都非常简单。使用菜单屏幕加载游戏。点击播放按钮,移动到"play screen",角色死亡,点击"home button"返回菜单画面。但是,当我在我的角色死后尝试点击 "play button" 时,它似乎根本没有记录点击。请记住,在第一次尝试时(当应用程序首次打开时)我在主菜单 class 中的按钮是可点击的。但是,在我尝试使用如下所示的 updateGOSButtons() 方法转换回相同的主菜单后 class,按钮变得不可点击。
菜单屏幕CLASS
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);
}
播放屏幕CLASS
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());
}
我相信您在 GameScreen 的渲染中调用了 updateGOSButtons 方法。我认为问题可能在于将屏幕设置为 MainScreen
if (gos.isHomeButtonClicked())
{
...
Gdx.input.setInputProcessor(gos.getStage());
又被调用了一次 "overrides"
Gdx.input.setInputProcessor(stage);
来自 MainMenu 屏幕,仅调用一次(在显示方法中,因此在屏幕开始处)。
解决方案是将 gameScreen 中的 inputProcessor 设置移动到 show() 方法(因此它只会被调用一次)。
如果您出于某种原因需要多个阶段作为 inputProcessor,只需使用 InputMultiplexer - 您可以在此处阅读如何使用它:
所以基本上我想要在这里实现的一切都非常简单。使用菜单屏幕加载游戏。点击播放按钮,移动到"play screen",角色死亡,点击"home button"返回菜单画面。但是,当我在我的角色死后尝试点击 "play button" 时,它似乎根本没有记录点击。请记住,在第一次尝试时(当应用程序首次打开时)我在主菜单 class 中的按钮是可点击的。但是,在我尝试使用如下所示的 updateGOSButtons() 方法转换回相同的主菜单后 class,按钮变得不可点击。
菜单屏幕CLASS
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);
}
播放屏幕CLASS
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());
}
我相信您在 GameScreen 的渲染中调用了 updateGOSButtons 方法。我认为问题可能在于将屏幕设置为 MainScreen
if (gos.isHomeButtonClicked())
{
...
Gdx.input.setInputProcessor(gos.getStage());
又被调用了一次 "overrides"
Gdx.input.setInputProcessor(stage);
来自 MainMenu 屏幕,仅调用一次(在显示方法中,因此在屏幕开始处)。
解决方案是将 gameScreen 中的 inputProcessor 设置移动到 show() 方法(因此它只会被调用一次)。
如果您出于某种原因需要多个阶段作为 inputProcessor,只需使用 InputMultiplexer - 您可以在此处阅读如何使用它: