Libgdx,当stage为input Processor时如何抓回键
Libgdx, how to catch back key, when stage is the input Processor
我有一个名为 AbstractGameScreen 的 class,签名如下:
public abstract class AbstractGameScreen extends InputAdapter implements Screen { ... }
我所有的屏幕都扩展了这个摘要class。现在我遇到的问题是,在使用阶段的屏幕中,我已经将阶段设置为输入处理器。但是,如果我这样做,则 keyUp 方法不再在按下后退键时执行。如果我将屏幕设置为输入处理器,舞台将无法工作。我该如何解决这个问题?
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
object 并像这样配置它:
InputMultiplexer multiplexer = new InputMultiplexer();
multiplexer.addProcessor( stage );
multiplexer.addProcessor( this ); // Your screen
Gdx.input.setInputProcessor( multiplexer );
我有一个名为 AbstractGameScreen 的 class,签名如下:
public abstract class AbstractGameScreen extends InputAdapter implements Screen { ... }
我所有的屏幕都扩展了这个摘要class。现在我遇到的问题是,在使用阶段的屏幕中,我已经将阶段设置为输入处理器。但是,如果我这样做,则 keyUp 方法不再在按下后退键时执行。如果我将屏幕设置为输入处理器,舞台将无法工作。我该如何解决这个问题?
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
object 并像这样配置它:
InputMultiplexer multiplexer = new InputMultiplexer();
multiplexer.addProcessor( stage );
multiplexer.addProcessor( this ); // Your screen
Gdx.input.setInputProcessor( multiplexer );