多个阶段 - 按钮没有反应?
Mutiple stages - Buttons don´t react?
新手再次需要您的建议,亲切的陌生人。
我有一些问题,即使在谷歌搜索之后也无法解决。
我的游戏有 2 个阶段,每个阶段都有一个 Table 按钮:
第一个存储带有游戏内按钮的 Table:移动 up/down 和暂停
第二个存储代表暂停菜单的 Table。
如果单击 "pause"(游戏暂停并且)我想绘制现在可以处理输入的第二阶段。
我初始化了 2 个阶段:
public void create(){
...
mainStage = new Stage(viewport,batch);
menuStage = new Stage(viewport,batch);
Gdx.input.setInputProcessor(mainStage);
...
暂停按钮有一个将(枚举)状态设置为暂停的侦听器
(与暂停菜单中的 "resume" 按钮相同,将状态设置为 运行)
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 按钮出现,但不可点击。
我注意到,如果我点击屏幕中间,游戏就会停止。然而,"pause" 按钮的监听器显然甚至没有对此做出反应,因为控制台上没有通知,游戏已暂停,也没有按钮被单击。
我的开始屏幕只使用一个舞台,并且在相同的设置下完美运行。
我认为的原因可能是:
- 我错误地使用了setInputProcessor
- 我错误地使用了视口(并调整了大小)
- 在绘制新阶段之前,我必须以某种方式让第一阶段消失
非常感谢您的帮助!谢谢。
对不起我的英语不好
.. 以及我的格式(这是我在这里的第一个 Post)
根据您的代码,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);
[...]
}
新手再次需要您的建议,亲切的陌生人。
我有一些问题,即使在谷歌搜索之后也无法解决。
我的游戏有 2 个阶段,每个阶段都有一个 Table 按钮: 第一个存储带有游戏内按钮的 Table:移动 up/down 和暂停 第二个存储代表暂停菜单的 Table。
如果单击 "pause"(游戏暂停并且)我想绘制现在可以处理输入的第二阶段。
我初始化了 2 个阶段:
public void create(){
...
mainStage = new Stage(viewport,batch);
menuStage = new Stage(viewport,batch);
Gdx.input.setInputProcessor(mainStage);
...
暂停按钮有一个将(枚举)状态设置为暂停的侦听器 (与暂停菜单中的 "resume" 按钮相同,将状态设置为 运行)
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 按钮出现,但不可点击。 我注意到,如果我点击屏幕中间,游戏就会停止。然而,"pause" 按钮的监听器显然甚至没有对此做出反应,因为控制台上没有通知,游戏已暂停,也没有按钮被单击。
我的开始屏幕只使用一个舞台,并且在相同的设置下完美运行。
我认为的原因可能是:
- 我错误地使用了setInputProcessor
- 我错误地使用了视口(并调整了大小)
- 在绘制新阶段之前,我必须以某种方式让第一阶段消失
非常感谢您的帮助!谢谢。
对不起我的英语不好 .. 以及我的格式(这是我在这里的第一个 Post)
根据您的代码,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);
[...]
}