2

我正在用 LIBGDX 构建一个简单的游戏,我遇到了这个恼人的问题。

我有一个 MenuScreen.java 类,如下所示:

是关于 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));
   }
  });

我的问题是,如果由于某种原因存在此类(并且从中调用 GameScreen),如果我单击 ImageButton 在 GameScreen 中的位置,它仍然会处理输入。这真的很烦人,因为如果玩家点击屏幕的那个部分,游戏就会被重置。

如果我删除对 MenuScreen.java 文件的引用,并将其全部跳过,则问题不存在,所以我很确定问题在于 InputListener 没有被“删除”

任何想法如何解决这一问题?

谢谢!

4

1 回答 1

2

问题在于你的resize方法。这一行:

Gdx.input.setInputProcessor(stage);

全局输入处理器设置为舞台。输入处理代码并不真正关心屏幕上呈现的内容。

我认为最简单的解决方法是将输入处理器设置为 inshow并将其清除为hide. 像这样的东西:

@Override
public void show() {
    Gdx.input.setInputProcessor(stage);
}

@Override
public void hide() {
    Gdx.input.setInputProcessor(null);
}

或者,您可以让您的回调检查它们所在的按钮/阶段/屏幕是否处于活动状态,或者取消注册/重新注册 / 中的回调showhide具体取决于您使用屏幕的方式。

于 2013-09-18T21:51:02.807 回答