Libgdx,当stage是输入处理器时,如何捕捉回键

Libgdx,当stage是输入处理器时,如何捕捉回键,libgdx,scene2d,Libgdx,Scene2d,我有一个名为AbstractGameScreen的类,其签名如下: public abstract class AbstractGameScreen extends InputAdapter implements Screen { ... } 我所有的屏幕都扩展了这个抽象类。现在我遇到的问题是,在使用stage的屏幕中,我已经将stage设置为输入处理器。但如果我这样做,keyUp方法在按下back键时就不会执行了。如果我将屏幕设置为inputprocessor,则阶段不工作。我如何解决这个问

我有一个名为AbstractGameScreen的类,其签名如下:

public abstract class AbstractGameScreen extends InputAdapter implements Screen { ... }
我所有的屏幕都扩展了这个抽象类。现在我遇到的问题是,在使用stage的屏幕中,我已经将stage设置为输入处理器。但如果我这样做,keyUp方法在按下back键时就不会执行了。如果我将屏幕设置为inputprocessor,则阶段不工作。我如何解决这个问题

public class MenuScreen extends AbstractGameScreen {

 @Override
    public void show() {
        stage = new Stage(new StretchViewport(Constants.VIEWPORT_GUI_WIDTH, Constants.VIEWPORT_GUI_HEIGHT));
        Gdx.input.setInputProcessor(stage);
        Gdx.input.setCatchBackKey(true);
        instructionsVisible= false;
        rebuildStage();
    }

@Override
    public boolean keyUp (int keycode) {
        // Back to Menu
        if (keycode == Input.Keys.ESCAPE || (keycode == Input.Keys.BACK && instructionsVisible)) {
            instructionsVisible=false;
            layerInstruction.setVisible(false);
            layerControls.setVisible(true);
        }
        else
        {
            Gdx.app.exit();
        }
        return false;
    }

在这种情况下,您需要两个输入处理器,
Stage
AbstractScreen
。执行此操作的方法是创建一个新的,并对其进行如下配置:

InputMultiplexer multiplexer = new InputMultiplexer();
multiplexer.addProcessor( stage );
multiplexer.addProcessor( this ); // Your screen
Gdx.input.setInputProcessor( multiplexer );

它在大多数屏幕类中都能完美工作。只有在MenuScreen(上面的代码)中,keyUp方法才会执行两次,从而导致应用程序退出。你知道为什么吗?在阅读文档后,我已经尝试将返回值更改为true,以停止事件的委派。但这没有成功,好吧,没关系。粘贴答案时,我不小心删除了catchBackKey方法。它现在工作得很好。非常感谢。