Java Libgdx scene2d输入处理器不工作?

Java Libgdx scene2d输入处理器不工作?,java,android,libgdx,scene2d,Java,Android,Libgdx,Scene2d,所以基本上我在这里想要实现的都很简单。使用菜单屏幕加载游戏。单击播放按钮,移动到“播放屏幕”,角色消失,单击“主页按钮”返回菜单屏幕。然而,当我试图在我的角色死后点击“播放按钮”时,它似乎根本没有注册点击。请记住,在第一次尝试时(当应用程序第一次打开时),主菜单类中的“我的”按钮是可单击的。但是,当我尝试使用如下所示的updateGOSButtons()方法转换回相同的主菜单类后,按钮变得不可点击 菜单屏幕类 public void show() { //init table a

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

菜单屏幕类

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);
}
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());
    }
播放屏幕类

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

我相信您正在调用游戏屏幕渲染中的updateGOSButtons方法。我认为问题可能是在将屏幕设置为MainScreen

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

再次调用,并“覆盖”

主菜单屏幕,该屏幕仅被调用一次(在屏幕开始处显示方法so)

解决方案是将游戏屏幕中inputProcessor的te设置移动到show()方法(因此只调用一次)

如果出于某种原因需要多个阶段作为inputProcessor,请使用-您可以在此处阅读如何使用它:


您是否正在创建一个新的舞台?大多数时候,当我的舞台、按钮或其他演员不工作时,这是因为我在分配了它或添加了侦听器或其他东西后,在其中创建了一个新对象。我只想感谢你抽出时间,这是一个绝对完美的答案。我尝试向updateGOS方法添加一个布尔变量,以确定它是否已单击过一次,如果已单击过,则停止更新inputprocessor,但是在调试时,我发现在屏幕更改为Main屏幕后再次调用该方法,从而再次将布尔变量设置为false。我不确定我现在做的是否正确,但我只是通过将我的inputprocessor添加到我的主屏幕的render方法中解决了这个问题。我想知道这是不是“低效”的做法