演员回应另一个InputListerner

时间:2016-07-09 09:21:49

标签: android libgdx scene2d

假设我有一个响应InputListener的Actor

如何阻止此actor响应另一个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 个答案:

答案 0 :(得分:1)

Actor有一个getActions()方法,列出所有当前操作。一旦动作完成,它将从Actor中删除。在允许演员回应其他侦听器事件之前,请检查演员当前的操作并从那里做出决定。 (即,如果你的演员仍然有前一个动作,那么“忽略”听众的事件)

您还可以创建序列操作,这些操作是连续执行的2个或更多操作。第二个(或最后一个)动作可以是RunnableAction,并且在它的run()方法中,您可以向Actor提供进一步的指令(例如:“确定接受新事件”)。第二个选项有点像其他操作完成时的回调。