2016-07-09 14 views
0

sagen, wenn ich Schauspieler hatte dieSchauspieler zu einem anderen InputListerner reagiert

Wie InputListener reagieren diesen Schauspieler stoppen zu einem anderen InputListener von reagieren, bis die vorherigen

beenden Ich habe die folgenden Klassen:

Klasse MyActor

public class MyActor extends Image { 
    public MyActor() { 
     super(new Texture("img.png")); 
     setPosition(100, 100); 
     debug(); 
    } 
} 

Klasse Testbild

public class TestScreen implements Screen { 
    GameMain gameMain; 
    Stage stage; 
    MyActor myActor; 

    public TestScreen(GameMain gameMain) { 
     this.gameMain = gameMain; 
    } 

    @Override 
    public void show() { 
     stage = new Stage(); 
     myActor = new MyActor(); 

     //addlistener to actor 
     myActor.addListener(new InputListener() { 
      @Override 
      public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { 
       RotateByAction rba = new RotateByAction(); 
       rba.setAmount(90.0f); 
       rba.setDuration(3.0f); 
       myActor.addAction(rba); 
       System.out.println("actor is rotating"); 
       return true; 
      } 
     }); 
     stage.addActor(myActor); 
     Gdx.input.setInputProcessor(stage); 
    } 

    @Override 
    public void render(float delta) { 
     stage.act(delta); 
     stage.draw(); 
    } 
} 

Antwort

1

Actor verfügt über eine getActions() -Methode, die alle aktuellen Aktionen auflistet. Sobald eine Aktion beendet ist, wird sie aus dem Actor entfernt. Bevor Sie Ihrem Darsteller erlauben, auf andere Zuhörerereignisse zu reagieren, überprüfen Sie die aktuellen Aktionen des Darstellers und treffen Sie Ihre Entscheidung von dort aus. (dh, wenn Ihr Akteur immer noch die vorherige Aktion hat, "ignorieren" Sie die Ereignisse des Zuhörers)

Sie können auch Sequenzaktionen erstellen, bei denen es sich um 2 oder mehr Aktionen handelt, die nacheinander ausgeführt werden. Die zweite (oder letzte) Aktion könnte eine RunnableAction sein und in der run() Methode geben Sie Ihrem Actor weitere Anweisungen (zB: "OK um neue Events zu akzeptieren"). Diese zweite Option ist wie ein Rückruf, wenn die anderen Aktionen beendet sind.

+0

ok aber eigentlich benutze ich keine Aktionen, wenn Schauspieler berührt wird Ich schreibe es als Beispiel myactor mache ein paar andere Sachen zu anderen Schauspielern, wenn es berührt wird – MAGS94

+0

Nicht sicher, verstehe ich vollständig. Aber wenn du ActorA hast, was onTouch() ActorB, C, D ... anweist, Dinge zu tun und du möchtest, dass B, C, D beendet werden, bevor ActorA on Touch() mehr an sie sendet? Dann wäre eine Art Rückruf immer noch angebracht. B, C, D müssten A mitteilen, dass sie erledigt sind, und A müsste dies verfolgen, bevor sie neue Ereignisse an sie weitergibt. Javas beobachtbares/beobachtbares Muster könnte funktionieren. A implementiert die Observer-Schnittstelle und B, C, D sind Observable (s), die A über eine Änderung benachrichtigen (in diesem Fall notify on done). –