2017-03-12 5 views
0

複数のタッチを含むいくつかの問題があります。LibGdx複数のタッチハンドリングリスナー

アクタ(playLight、下のコード)、HUDステージ(HUD.stage)、およびInputMultiplexerを使用して両方のステージを処理するステージ(mainStage)があります。

inputMultiplexer= new InputMultiplexer(); 
    inputMultiplexer.addProcessor(HUD.stage); 
    inputMultiplexer.addProcessor(mainStage); 

は、私は私の俳優が

上にある場でを除いて、一本の指が私のオブジェクトを移動することができ、他方はスワイプすることができますし、ダウンしているか、どこにでも私のステージ上をダブルタップように、2本の指での入力を処理します私は私のメインステージの両方のためのリスナーを使用してい

:...

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(); 
       } 
     } 
    }); 

..andこの(MainStageの)上のオブジェクトのステージのための

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)を1本の指で動かし、別の指でパンニングしようとすると、Gdxが2番目の入力を認識しないか、少なくともGdxが別の入力を認識できないようですID。

私が試した:

  1. をMainStageのリスナーにIDを要求していないために
  2. (この場合はHUDステージ)別のステージ上のオブジェクトを配置するには、simulationouslyとき、両方のリスナーをトリガにつながります私のオブジェクトを動かす(期待通りに)。

答えて

0

アクターは、Stageに追加されたときにデフォルトのリスナーを持ちます。あなたはDragListenerの代わりにmainStageのリスナを使用し、panの方法を使用します。あなたの俳優をあなたの中に動かす方法は次のとおりです。

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

これは私のアプリを少し改良しました、ありがとうございます!しかし、マルチタッチは、まだ動作しません。私が俳優を動かし、別の場所で別の指でステージをパンすると、何も起こりません。私の俳優を解放するときに、再びスワイプアップします... –

関連する問題