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 - 您可以在此处阅读如何使用它:

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