2017-07-05 1 views
1

J'ai une scène et l'acteur avec la taille 200x200. J'ai besoin que l'acteur attrape des événements tactiles pour faire des calculs. Mais le problème est que les événements tactiles ne se déclenchent que lorsqu'ils sont touchés par les acteurs liés. Comment puis-je obtenir l'événement de toucher n'importe quelle zone de l'écran, mais manipulé à l'intérieur de la classe de l'acteur?LibGDX comment attraper un événement tactile en dehors des limites de l'acteur

public class MyActor extends Actor { 

public MyActor() { 

    setBounds(100f, 100f, 200f, 200f); 

    addListener(new InputListener() { 
     @Override 
     public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { 
      return super.touchDown(event, x, y, pointer, button); 
     } 

     @Override 
     public void touchDragged(InputEvent event, float x, float y, int pointer) { 
      super.touchDragged(event, x, y, pointer); 
     } 

     @Override 
     public void touchUp(InputEvent event, float x, float y, int pointer, int button) { 
      super.touchUp(event, x, y, pointer, button); 
     } 
    }); 
} 

Répondre

1

Ajouter auditeur sur scène au lieu de tout particulier Actor

stage.addListener(new InputListener(){ 

      @Override 
      public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { 

       Gdx.app.log("Stage Listener","inside touch down"); 
       return super.touchDown(event, x, y, pointer, button); 
      } 

      @Override 
      public void touchDragged(InputEvent event, float x, float y, int pointer) { 


       super.touchDragged(event, x, y, pointer); 
      } 

      @Override 
      public void touchUp(InputEvent event, float x, float y, int pointer, int button) { 
       super.touchUp(event, x, y, pointer, button); 
      } 
     }); 

EDIT

événement Feu sur tous Acteur requis et la poignée en MyActor auditeur tocuhDown(..) méthode

stage.addListener(new InputListener(){ 

     @Override 
     public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { 

      for(Actor actor:stage.getActors()){ 
       if(actor.getName().equals("MyActor")) { 

        InputEvent myEvent=new InputEvent(); 
        myEvent.setType(InputEvent.Type.touchDown); 
        myEvent.setStage(stage); 
        myEvent.setPointer(pointer); 
        myEvent.setButton(button); 
        myEvent.setStageX(x); 
        myEvent.setStageY(y); 
        actor.fire(myEvent); 
       } 
      } 
      return super.touchDown(event,x,y,pointer,button); 
     } 
    }); 

MyActor classe

public class MyActor extends Actor { 

    public MyActor(){ 
    setBounds(100f, 100f, 200f, 200f); 
    setName("MyActor"); 

    addListener(new InputListener() { 
     @Override 
     public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { 

      Gdx.app.log("MyActor","touched"); 
      event.stop(); 
      return false; 
     } 
    }); 
    } 
} 
+0

Merci. Mais dans ce cas, je dois recalculer les coordonnées de tous les acteurs par moi-même. Je veux dire dans MyActor je dois convertir la scène touch X à MyActor touch X. C'est pourquoi je demandais est-il un moyen d'obtenir les cordes en dehors de l'acteur, mais gérer au sein de l'acteur. – anmig

+0

'je dois convertir scène touch X à MyActor touch X'? – Aryan

+0

Je veux dire que quand j'ajoute un écouteur d'entrée à la scène - dans la méthode touchDown je reçois X et Y du toucher selon l'étape, mais pas au système de coordonnées de l'acteur! Par exemple. Dans les coords d'étape (x = 10, y = 10), cela signifie que dans les coordonnées de l'acteur, ce sera par exemple. (x = -300, y = 125). Donc, si j'ai une hiérarchie compliquée d'acteurs, il est difficile de gérer les événements tactiles uniquement à l'étape touchDown. Parce que je dois convertir (x = 10, y = 10) de Stage en (x = -300, y = 125) de MyActor! Donc, je veux gérer les événements dans les classes d'acteur, parce que les coeurs viennent à eux tous convertis à leurs propres coordonnées. – anmig