最近开始使用带有表格/舞台/按钮等的 libgdx 编写 MenuScreen 但是我意识到即使在进入下一个屏幕之后,原始 MenuScreen 的按钮仍然是可点击的 :(
大致是这样的:
- 应用程序启动,查看
MainMenu
屏幕 - 单击一个按钮(例如:“选项”),请参阅选项屏幕
- 单击选项屏幕中的某个位置,该屏幕中的 MainMenu 按钮曾经是(例如关于)
- 转到“关于”屏幕
当您看到“选项”屏幕时,如果您没有单击 MainMenu 具有按钮的位置,则“选项”屏幕将正常/预期工作。
因此,从这种行为来看,MainMenu 屏幕似乎仍然存在(只是隐藏)并且所有按钮侦听器仍然处于活动状态。
清理 MainMenu 屏幕的正确方法是什么?(我想通常清理 libgdx 屏幕)
重要的代码位:
public class MainMenu implements Screen {
public MainMenu() {
// ..setting up font, camera etc
stage = new Stage();
stage.setCamera(camera);
Table table = new Table();
table.setWidth(300);
table.setHeight(480);
stage.addActor(table);
TextButton options = new TextButton("Options", buttonStyle);
options.addListener(new ButtonClickListener(app.options));
table.add(options).pad(20);
table.row();
// ... more buttons, eg About...
Gdx.input.setInputProcessor(stage);
}
private class ButtonClickListener extends ClickListener {
private final Screen screen;
private ButtonClickListener(Screen screen) {
this.screen = screen;
}
@Override
public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
app.setScreen(this.screen);
}
}
public void render(float delta) {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
camera.update();
spriteBatch.begin();
stage.draw();
spriteBatch.end();
}
// ... show(), resize(), hide(), pause(), resume() are all no-ops
@Override
public void dispose() {
stage.dispose();
spriteBatch.dispose();
font.dispose();
}
}