Inputlistener保持在类之间

时间:2013-09-18 19:16:15

标签: java android input libgdx

我正在用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没有被“删除”

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

谢谢!

1 个答案:

答案 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中的回调,具体取决于方式你正在使用你的屏幕。