我正在用LIBGDX构建一个简单的游戏,我遇到了这个恼人的问题。
我有一个MenuScreen.java类,如下所示:
Here是关于pastebin的完整课程
重要的部分是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));
}
});
我的问题是,如果我点击ImageButton在GameScreen中的位置,如果这个类存在(并且从此调用GameScreen),它仍会处理输入。这真是令人恼火,因为如果玩家点击屏幕的那一部分,游戏就会被重置。
如果我删除对MenuScreen.java文件的引用,并将其全部跳过,则问题不存在,所以我很确定问题是InputListener没有被“删除”
任何想法如何解决这个问题?
谢谢!
答案 0 :(得分:2)
问题在于resize
方法。这一行:
Gdx.input.setInputProcessor(stage);
将全局输入处理器设置为舞台。输入处理代码并不真正关心屏幕上呈现的内容。
我认为最简单的解决方法是将输入处理器设置为show
并在hide
中清除它。像这样:
@Override
public void show() {
Gdx.input.setInputProcessor(stage);
}
@Override
public void hide() {
Gdx.input.setInputProcessor(null);
}
或者,你可以让你的回调检查它们所在的按钮/阶段/屏幕是否处于活动状态,或取消注册/重新注册show
/ hide
中的回调,具体取决于方式你正在使用你的屏幕。