最近开始使用libgdx与表/舞台/按钮等不过,我已经意识到,即使去到下一个屏幕后,原来的MenuScreen的按钮仍然可点击:(写MenuScreenligbdx触摸监听器错误屏幕上
这大概会发生什么:
- 应用程序启动时,看到一个按钮
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();
}
}
有趣的是,我通过清理舞台来解决问题 - 尽管重置Gdx.input似乎也有道理。也会考虑手动调用dispose()(已经在一些地方做过) – pyko