во время работы над классом слушателя и реализации обработки нескольких жестов касания я натолкнулся на возможную ошибку.
Реализация кода
public class MyListener extends ClickListener {
private List<Pointer> pointers = new ArrayList<Pointer>();
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointerIndex, int button) {
System.out.println("Listener: touch down" + pointerIndex);
pointers.add(new ListenerPointer(x, y, button));
event.handle();
return super.touchDown(event, x, y, pointerIndex, button);
}
@Override
public void touchDragged(InputEvent event, float x, float y, int pointerIndex) {
System.out.println("Listener: dragged " + pointerIndex);
// Update the current point the user is dragging.
for (ListenerPointer pointer : pointers) {
if (pointer.getPointerIndex() == pointerIndex) {
pointer.update(x, y);
event.handle();
}
}
}
}
При касании экрана новым и, удерживая старый палец на экране, указатель указателя увеличивается. В результате получается следующий журнал:
Listener: touch down0
Listener: touch down1
Если я затем проведу двумя пальцами по экрану, он вызовет только событие touchDragged с всегда указывающим нулем pointerIndex. Несмотря на то, что жест touchDown говорит, что у него есть indexIndex, равный 1. Журнал touchDragged всегда:
Listener: dragged 0
Listener: dragged 0
Я думаю, что это может быть ошибкой в коде LibGDX, поскольку такой простой кусок кода действительно не может go ошибаться.