2017-03-12 5 views
0

여러 번 터치하는 것과 관련된 몇 가지 문제가 있습니다.LibGdx 다중 터치 핸들링 리스너

액터 (playLight, 코드)가있는 스테이지 (mainStage), HUD 스테이지 (HUD.stage) 및 InputMultiplexer가 두 스테이지를 처리합니다.

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.addListener(new DragListener(){ 
     @Override 
     public void drag(InputEvent event, float x, float y, int pointer) { 
      pointerUsed = pointer; // will be reset to -1 at the end of update() 
      setPosition(getX()+ Gdx.input.getX(pointerUsed)-getWidth()/2f,getY()+Gdx.input.getY(pointerUsed)-getHeight()/2f); 
     } 

     @Override 
     public void dragStart(InputEvent event, float x, float y, int pointer) { 
      pointerUsed = pointer; // will be reset to -1 at the end of update() 
      isDragging = true; 
     } 

     @Override 
     public void dragStop(InputEvent event, float x, float y, int pointer) { 
      isDragging = false; 
     } 
    }); 
mainStage.addActor(playerLight); 

둘 다 청취자가 내가 원하는대로 separetly 작동합니다.

문제는 한 손가락으로 스테이지 (playerLight)에서 개체를 움직여서 다른 손가락으로 위로 올려보십시오. Gdx가 두 번째 입력을 인식하지 못하거나 Gdx가 다른 입력을 인식하지 못하는 것 같습니다. 신분증.

내가 시도 :

  1. 이 simulationously 때 두 청취자를 트리거로 이어질 주무대 리스너의 ID, 요청하지 않으려면 (이 경우에는 HUD 단계)을 또 다른 무대에서 객체를 넣으려면 내 개체를 (예상대로) 위로 이동합니다.

답변

0

액터는 Stage에 추가 될 때 기본 리스너를 갖습니다. 당신이해야 할 일은 DragListener 대신 mainStage의 수신기를 사용하고 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;을 뺍니다. 그러면 손가락이 Actor에 닿으면 손가락 가운데에 위치합니다.

+0

내 앱이 조금 개선되었습니다. 감사합니다. 그러나 멀티 터치는 여전히 작동하지 않습니다. 배우를 움직이고 다른 손가락으로 다른 지점에서 무대를 팬하면 아무 일도 일어나지 않습니다. 내 배우를 풀어 주면 다시 작동합니다. –