我正在使用 LIBGDX 构建一个简单的游戏,并且遇到了这个恼人的问题。
我有一个 MenuScreen.java 类,如下所示:
Here这是 Pastebin 上的完整类(class)
重要的部分是 imageButton 的 inputListener:
button.addListener(new InputListener(){
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button){
return true;
}
@Override
public void touchUp(InputEvent event, float x, float y, int pointer, int button){
MineFinder.Log.debug("xpos: " + x + ", ypos: " + y);
game.setScreen(new GameScreen(game));
}
});
我的问题是,如果由于某种原因存在此类(并且从该类调用 GameScreen),如果我单击 GameScreen 中的 ImageButton 位置,它仍然会处理输入。这真的很烦人,因为如果玩家点击屏幕的该部分,游戏就会重置。
如果我删除对 MenuScreen.java 文件的引用,并完全跳过它,则问题不存在,所以我很确定问题是 InputListener 没有被“删除”
有什么想法可以解决这个问题吗?
谢谢!
最佳答案
问题是在你的 resize
中方法。这一行:
Gdx.input.setInputProcessor(stage);
将全局输入处理器设置为舞台。输入处理代码并不真正关心屏幕上呈现的内容。
我认为最简单的解决方法是将输入处理器设置为 show
并在 hide
中清除它。像这样的事情:
@Override
public void show() {
Gdx.input.setInputProcessor(stage);
}
@Override
public void hide() {
Gdx.input.setInputProcessor(null);
}
或者,您可以让回调检查它们所在的按钮/舞台/屏幕是否处于 Activity 状态,或者在 show
中取消注册/重新注册回调。/hide
,具体取决于您使用屏幕的方式。
关于java - 输入监听器在类之间停留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18880499/