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