多路复用器不处理第二个输入处理器

时间:2016-02-09 22:19:10

标签: java android libgdx

使用Scene2d,我有一个在屏幕类中创建的InputMultiplexer。在我的屏幕类中,我创建了我的舞台并将其添加到InputMultiplexer。我还创建了一个处理UI的组。我将UI组添加到舞台上。然后我将组添加到多路复用器。

此时,多路复用器首先具有阶段,然后是第二个UI组。

我的舞台会覆盖触地得分方法,如下所示:

@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button){
  return false;
}

因为我的舞台在多路复用器中是第一个,所以它应首先处理输入,因为它返回false。然后它应该移动到我的UI组,该组在各种小部件上具有单击侦听器。但是,永远不会处理UI组。如果我在舞台上删除touchDown方法,它可以正常工作。

如何让UI组也处理输入?

我还在舞台类中添加了以下方法,看它是否会有所帮助,但事实并非如此。

 @Override
   public boolean keyDown(int keycode) {
      // TODO Auto-generated method stub
      return false;
   }
   @Override
   public boolean keyUp(int keycode) {
      // TODO Auto-generated method stub
      return false;
   }
   @Override
   public boolean keyTyped(char character) {
      // TODO Auto-generated method stub
      return false;
   }

   @Override
   public boolean touchUp(int screenX, int screenY, int pointer, int button) {
      // TODO Auto-generated method stub
      return false;
   }
   @Override
   public boolean touchDragged(int screenX, int screenY, int pointer) {
      // TODO Auto-generated method stub
      return false;
   }
   @Override
   public boolean mouseMoved(int screenX, int screenY) {
      // TODO Auto-generated method stub
      return false;
   }
   @Override
   public boolean scrolled(int amount) {
      // TODO Auto-generated method stub
      return false;
   }

1 个答案:

答案 0 :(得分:2)

您正在覆盖舞台的事件处理功能。 检查Stage.touchDown的源代码。

如果您真的想要覆盖touchDown,请使用超级调用覆盖它,请注意这可能会导致奇怪的行为,因为在超级函数中,事件处理由Actors发生。

@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button){
  super.touchDown(screenX, screenY, pointer, button);
  return false;
}