【问题标题】:Libgdx, how to catch back key, when stage is the input ProcessorLibgdx,当阶段是输入处理器时,如何捕获键
【发布时间】:2016-12-29 18:14:52
【问题描述】:

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

public abstract class AbstractGameScreen extends InputAdapter implements Screen { ... }

我所有的屏幕都扩展了这个抽象类。现在我遇到的问题是,在使用阶段的屏幕中,我已经将阶段设置为输入处理器。但是如果我这样做了,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;
    }

【问题讨论】:

    标签: libgdx scene2d


    【解决方案1】:

    在这种情况下,您需要两个 InputProcessor - Stage 和您的 AbstractScreen。你这样做的方法是创建一个新的InputMultiplexer object 并像这样配置它:

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

    【讨论】:

    • 它在大多数屏幕类中都能完美运行。只有在 MenuScreen(上面的代码)中,keyUp 方法会执行两次,这会导致应用程序退出。关于为什么会这样的任何想法?在阅读文档以停止事件委托后,我已经尝试将返回值更改为 true。但这没有成功。
    • 好吧,没关系。粘贴您的答案时,我不小心删除了 catchBackKey 方法。它现在完美无缺。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 2015-09-03
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    相关资源
    最近更新 更多