java - 输入监听器在类之间停留

标签 java android input libgdx

我正在使用 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/

相关文章:

android - 动画 ListView 中的特定行

android - 自定义数组适配器 : why do I get a NullPointerException?

javascript - "Rate this app"Ionic 应用程序中的 google play 商店链接

java - 使用 while 循环从输入获取特定系列的数字时遇到问题

algorithm - 有没有不依赖于 n(输入的大小)的算法?

java - 如何对 Spring bean 隐藏方法?

java - 如何在此代码中实现 OnItemClickListener?

java - Gson 错误?反序列化器的存在会损害 Gson 中的序列化过程

java - restful 服务 URL 中的分号截断其后的字符

javascript - 输入时只允许输入一次数字