【问题标题】:Inputlistener stays between classesInputlistener 停留在类之间
【发布时间】:2013-09-18 19:16:14
【问题描述】:

我正在使用 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));
   }
  });

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

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

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

谢谢!

【问题讨论】:

    标签: java android input libgdx


    【解决方案1】:

    问题在于您的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 中的回调,具体取决于您如何使用您的屏幕。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-12
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      相关资源
      最近更新 更多