【问题标题】:Actor responding to another InputListernerActor 响应另一个 InputListerner
【发布时间】:2016-07-09 09:21:48
【问题描述】:

如果我有一个正在响应 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();
    }
}

【问题讨论】:

    标签: android libgdx scene2d


    【解决方案1】:

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

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

    【讨论】:

    • 好的,但实际上当演员被触摸时我没有使用动作我写它作为一个例子我的演员在被触摸时对其他演员做一些其他的事情
    • 不确定我是否完全理解。但是如果你有 ActorA,它的 onTouch() 指示 ActorB、C、D ... 做事,并且你希望 B、C、D 在 Touch() 上的 ActorA 发送更多给他们之前完成?那么某种回调仍然是合适的。 B、C、D 必须通知 A 他们已经完成,并且 A 在将新事件传递给他们之前必须跟踪它。 Java 的观察者/可观察模式可能会起作用。 A 实现了 Observer 接口,B、C、D 是 Observable(s),它们通知 A 发生变化(在这种情况下,通知完成)。
    猜你喜欢
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多