LibGDX touchDown touchUp在不同的Actors上

时间:2016-09-14 16:22:21

标签: java android libgdx

在我的LibGDX游戏中,我有一个可点击的Actors光栅。我希望玩家可以在它们之间滑动并获得滑动停止的Actor。

我不想要GestureListener,我唯一需要的是在另一个Actor上生成的touchDown上的touchUp事件。例如:考虑一下Androids登录界面,你可以刷模式解锁,但我只需要最后一个点/ Actor的事件。

我尝试使用touchDown / touchUp,但事件总是在发生touchDown的Actor上触发。

一个很好的解决方案是通过滑动获取每个Actor命中的事件,然后获得全局touchUp事件。这是否可以以相对容易的方式进行 - 例如。没有编写全新的InputListener?

1 个答案:

答案 0 :(得分:1)

在你的监听器的touchUp()中,在所有可点击的Actors的父WidgetGroup上调用hit,以查看释放时手指在哪个上。请注意,由于您要将actor添加到组中,因此需要将该组添加到舞台,而不是直接将小部件添加到舞台。请记住,演员的X和Y是相对于其父级的。

final WidgetGroup parent = new WidgetGroup();

InputListener inputListener = new InputListener(){
    private final Vector2 tmp = new Vector2();

    public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
        return true;
    }

    public void touchUp (InputEvent event, float x, float y, int pointer, int button) {
        event.getTargetActor().localToParentCoordinates(tmp.set(x, y));
        Actor releaseOverActor = parent.hit(tmp.x, tmp.y, true);
        if (releaseOverActor != null){
            //doSomethingTo(releaseOverActor);
        }
    }
}

for (Actor clickable : clickableActors){
    parent.add(clickable);
    clickable.addListener(inputListener);
}

以上有点简化。例如,只有在使用指针0时,您可能希望返回true touchDown