多个阶段 - 按钮没有反应?

时间:2016-11-08 22:29:13

标签: java android button libgdx stage

新手需要你的建议,亲切的陌生人。

我有一些问题,即使在谷歌搜索后也无法解决。

我的游戏中有2个阶段,每个阶段都有一个按住按钮的表: 第一个存储带有游戏按钮的表:向上/向下移动并暂停 第二个存储表示暂停菜单的表。

如果点击“暂停”(游戏暂停),我想绘制现在可以处理输入的第二阶段。

我初步确定了两个阶段:

public void create(){

...
mainStage = new Stage(viewport,batch);
menuStage = new Stage(viewport,batch);
Gdx.input.setInputProcessor(mainStage);
...

暂停Button有一个Listener,它将(枚举)STATE设置为PAUSE (对于暂停菜单中的“恢复”按钮,将状态设置为RUNNING)

pause.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
        thisState = STATE.PAUSE;
        Gdx.input.setInputProzessor(menuStage);

        }
    });

然后在渲染方法

switch (gameState) {
            case RUNNING:

                deltaTime = Gdx.graphics.getDeltaTime();
                stateTime += deltaTime; // for the animations

                Gdx.gl.glClearColor(0, 0, 0, 1);
                Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

                batch.setProjectionMatrix(camera.combined);

                update(deltaTime);

                batch.begin(); 
                ... draws the characters
                batch.end();

                mainStage.act(deltaTime);
                mainStage.draw();
                break;

            case PAUSE:
                Gdx.gl.glClearColor(0, 0, 0, 0.6f); I want the background to become slightly darker.
                Gdx.app.log("Game State","Game is PAUSED");
                menuStage.act(deltaTime);
                menuStage.draw();

        }

如果我启动mainStage按钮出现,但不可点击。 我注意到的是,如果我点击屏幕中间,游戏就会停止。然而,“暂停”按钮的监听器显然甚至没有对此做出反应,因为控制台上没有通知,游戏暂停,也没有点击按钮。

我的开始屏幕仅使用一个舞台,并且可以使用相同的设置完美地工作。

我认为这些遗嘱可能是:

  • 我错误地使用了setInputProcessor
  • 我错误地使用了Viewport(并调整了大小)
  • 我必须以某种方式让第一阶段在绘制新舞台之前消失

非常感谢帮助!谢谢。

sry for my bad english ..和我的格式化(这是我的第一篇帖子)

1 个答案:

答案 0 :(得分:0)

通过你的代码,gdx只处理mainStage的输入,你可以在显示菜单时交换输入处理器或使用这样的输入多路复用器:

public void create(){

[...]
mainStage = new Stage(viewport,batch);
menuStage = new Stage(viewport,batch);
InputMultiplexer multiplexer = new InputMultiplexer();
multiplexer.addProcessor(mainStage);
multiplexer.addProcessor(menuStage);
Gdx.input.setInputProcessor(multiplexer);
[...]

}