最近開始使用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