响应另一个 InputListerner 的 Actor

Actor responding to another InputListerner

假设我有一个响应 InputListener 的 Actor

如何阻止此 actor 在前一个 InputListener 完成之前响应另一个 InputListener

我有以下 classes :

class 我的演员

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

class 测试屏幕

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

Actor 有一个 getActions() 方法,可以列出所有当前操作。一旦动作完成,它就会从 Actor 中移除。在允许您的 actor 响应其他侦听器事件之前,检查 actor 当前的操作并从那里做出您的决定。 (即,如果您的演员仍然有之前的动作,那么 "ignore" 听众的事件)

您还可以创建顺序动作,即连续执行 2 个或更多动作。第二个(或最后一个)动作可以是一个 RunnableAction,在它的 运行() 方法中,您可以向您的 Actor 提供进一步的指示(例如:"OK to accept new events")。当其他操作完成时,第二个选项有点像回调。