Java LibGdx多点触摸处理侦听器

Java LibGdx多点触摸处理侦听器,java,android,libgdx,multi-touch,Java,Android,Libgdx,Multi Touch,我有一些涉及多次接触的问题 有一个舞台(主舞台),上面有一个演员(playLight,下面的代码),一个HUD舞台(HUD.Stage)和一个处理两个舞台的输入多路复用器 inputMultiplexer= new InputMultiplexer(); inputMultiplexer.addProcessor(HUD.stage); inputMultiplexer.addProcessor(mainStage); 我想用两个手指来处理输入,这样一个手指可以移动我的物体,另

我有一些涉及多次接触的问题

有一个舞台(主舞台),上面有一个演员(playLight,下面的代码),一个HUD舞台(HUD.Stage)和一个处理两个舞台的输入多路复用器

inputMultiplexer= new InputMultiplexer();
    inputMultiplexer.addProcessor(HUD.stage);
    inputMultiplexer.addProcessor(mainStage);
我想用两个手指来处理输入,这样一个手指可以移动我的物体,另一个手指可以上下滑动或双击舞台上的任何地方,除了演员在场的地方

我在我的主舞台上使用了一个监听器:

mainStage.addListener(new ActorGestureListener(5,0.3f,0.4f,2f){
        @Override
        public void pan(InputEvent event, float x, float y, float deltaX, float deltaY) {
            if(event.getPointer() == LightHandler.playerLight.pointerUsed){
                listeningToPointer = -1;
                return;
            }

            listeningToPointer= event.getPointer();
            if(deltaY>0){
                mainCharacter.up();
            }
            else{
                mainCharacter.down();
            }
        }


        @Override
        public void tap(InputEvent event, float x, float y, int count, int button) {

            if(count==2){
                mainCharacter.clicked();
                }
        }
    });
…对于这个(主流)舞台上的一个物体

两位听众按照我的要求分别工作

问题是,当我用一根手指移动舞台上的对象(playerLight)并尝试用另一根手指平移时,Gdx似乎无法识别第二个输入,或者至少Gdx无法找到另一个ID的输入

我试过:

  • 将对象放置在另一个阶段(在本例中为HUD阶段)
  • 不要在主干侦听器中请求ID,这会导致在向上移动对象时(如预期的那样)模拟触发两个侦听器

  • 演员将有一个默认的监听器,当它被添加到
    Stage
    时。您应该做的是使用
    DragListener
    而不是使用
    pan
    方法在
    mainStage
    中使用侦听器。以下是您如何在
    主体中移动您的演员

    public void pan(InputEvent event, float x, float y, float deltaX, float deltaY) 
     {
        // get a specific actor on the stage
       if (event.getTarget().equals(actor)) 
        {
         float dx = x - actor.getWidth() / 2;
         float dy = y - actor.getHeight() / 2;
          actor.setPosition(dx,dy);
         return;
        }
    
     }
    

    就这么简单。我们减去
    actor.getWidth()/2
    actor.getHeight()/2
    这样当你的手指触摸演员时,它就会位于你手指的中央。

    这将我的应用程序改进了一点,谢谢!然而,多点触控仍然不起作用。当我移动演员并用另一根手指在另一个地方平移舞台时,什么也没发生。当释放我的演员时,重击再次起作用。。。
    public void pan(InputEvent event, float x, float y, float deltaX, float deltaY) 
     {
        // get a specific actor on the stage
       if (event.getTarget().equals(actor)) 
        {
         float dx = x - actor.getWidth() / 2;
         float dy = y - actor.getHeight() / 2;
          actor.setPosition(dx,dy);
         return;
        }
    
     }