我无法正确实施对话框。它无法识别按钮点击 - 即使按钮向下动画也不会发生。但是,它确实识别按键(例如在我的情况下输入或esc)。 Dialog似乎确实位于舞台对象之上,所以我很困惑为什么它没有注册我的点击。
我有一个InputMultiplexer,它有处理器InputHandler类(实现InputProcessor)和stage,按顺序:
InputMultiplexer im = new InputMultiplexer();
im.addProcessor(new InputHandler(stage));
im.addProcessor(stage);//trying to make dialog work by doing this
Gdx.input.setInputProcessor(im);
这是我在舞台中定义的showDialog方法:
public void showDialog() {
Dialog dialog = new Dialog("Quit?", skin) {
@Override
protected void result(Object object) {
boolean exit = (Boolean) object;
if (exit) {
Gdx.app.exit();
} else {
remove();
}
}
};
dialog.button("Yes", true);
dialog.button("No", false);
dialog.key(Input.Keys.ENTER, true);
dialog.key(Input.Keys.ESCAPE, false);
dialog.show(this);
}
showHialog()方法在识别游戏结束时从InputHandler调用(我将其设置为在触摸时检查和更新游戏状态,因为它是基于触摸的游戏)。我的理解是,由于多路复用器在游戏结束时从InputHandler方法接收到错误的返回,然后它进入输入阶段,这似乎仅在我在对话框上使用按键时才起作用,即进入退出游戏, esc删除对话框,但单击按钮不执行任何操作。
这是我的Screen的渲染功能,如果它是相关的:
@Override
public void render(float delta) {
Gdx.gl.glClearColor(1,1,1,1);
Gdx.graphics.getGL20().glEnable(GL20.GL_BLEND);
Gdx.graphics.getGL20().glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT | (Gdx.graphics.getBufferFormat().coverageSampling?GL20.GL_COVERAGE_BUFFER_BIT_NV:0));
stage.act();
stage.getCamera().update();
stage.draw();
}