在我的LibGDX游戏中,我有一个可点击的Actors光栅。我希望玩家可以在它们之间滑动并获得滑动停止的Actor。
我不想要GestureListener
,我唯一需要的是在另一个Actor上生成的touchDown上的touchUp事件。例如:考虑一下Androids登录界面,你可以刷模式解锁,但我只需要最后一个点/ Actor的事件。
我尝试使用touchDown
/ touchUp
,但事件总是在发生touchDown
的Actor上触发。
一个很好的解决方案是通过滑动获取每个Actor命中的事件,然后获得全局touchUp
事件。这是否可以以相对容易的方式进行 - 例如。没有编写全新的InputListener?
答案 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
。