2016-07-09 72 views
0

說,如果我有這樣的迴應InputListener演員應對另一InputListerner

如何從直到前一個完成

我有以下類響應另一個InputListener停止這個演員的演員:

類MyActor

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

類TestScreen

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

回答

1

Actor有一個getActions()方法,該方法列出所有當前操作。一旦動作完成,它將從演員中刪除。在允許演員響應其他監聽者事件之前,請檢查演員的當前操作並從此處作出決定。 (即,如果你的演員仍然有先前的動作,那麼「忽略」聽衆的事件)

你也可以創建序列動作,這是2個或更多個連續執行的動作。第二個(或最後一個)動作可以是RunnableAction,在它的run()方法中,您可以向演員提供進一步的指示(例如:「確定接受新事件」)。第二個選項在其他操作完成時有點像回調。

+0

確定但實際上我沒有使用動作時,演員被觸動我把它作爲一個例子 myactor當其他演員觸碰時做一些其他的東西 – MAGS94

+0

不知道我完全理解。但是,如果您有ActorA,哪個onTouch()指示ActorB,C,D ...做事情,並且您希望B,C,D在ActorA上的Touch()發送更多消息之前完成?然後某種回調仍然適用。 B,C,D必須通知A他們已經完成了,並且A必須在將新事件傳遞給他們之前進行跟蹤。 Java的觀察者/可觀察模式可能工作。 A實現Observer接口,B,C,D是Observable(s),通知A有變化(在這種情況下,通知已完成)。 –