Сенсорные экраны хорошо подходят для ввода жестов. Жестом может быть использование двух пальцев для масштабирования, прикосновение или двойное прикосновение, долгое нажатие и так далее.
Libgdx предоставляет GestureDetector (исходники), который позволяет вам обнаружить следующие жесты:
- tap: пользователь прикасается к экрану и затем поднимает палец. Палец не должен выходить за пределы указанной квадратной области вокруг исходного положения для зарегистрированы tap жеста. Многократные последовательные tap жесты будут обнаружены, если пользователь выполняет tap жест в течение заданного интервала времени.
- pan: пользователь двигает пальцем по экрану. Детектор сообщит координаты текущего прикосновения, а также разницу между позицией текущего и предыдущего прикосновения. Используется для реализации панорамирование камеры в 2D.
- fling: пользователь передвигал палец по экрану, а затем поднял его. Используется для реализации жеста скольжения.
- zoom: пользователь помещает два пальца на экран и перемещает их вместе друг от друга. Детектор сообщает о начальном и текущем расстоянии между пальцами в пикселях. Используется для реализации масштабирования камеры.
- pinch: Похожи на zoom. Детектор вместо расстояния будет сообщать о первоначальном и текущем положении пальцев. Используется для реализации масштабирования камеры и более сложный жестов, так как вращение.
GestureDetector является обработчиком событий для жестов. Для перехвата жестов можно реализовать GestureListener
интерфейс и передать его в конструктор GestureDetector
класса. Затем детектор устанавливается как InputProcessor, либо как InputMultiplexer или в качестве основного InputProcessor:
public class MyGestureListener implements GestureListener {
@Override
public boolean touchDown (int x, int y, int pointer) {
return false;
}
@Override
public boolean tap (int x, int y, int count) {
return false;
}
@Override
public boolean longPress (int x, int y) {
return false;
}
@Override
public boolean fling (float velocityX, float velocityY) {
return false;
}
@Override
public boolean pan (int x, int y, int deltaX, int deltaY) {
return false;
}
@Override
public boolean zoom (float originalDistance, float currentDistance) {
return false;
}
@Override
public boolean pinch (Vector2 initialFirstPointer, Vector2 initialSecondPointer, Vector2 firstPointer, Vector2 secondPointer) {
return false;
}
}
Gdx.input.setInputProcessor(new GestureDetector(new MyGestureListener()));
GestureListener
может сигнализировать о том, что он получил событие или что хочет передать его дальше следующему InputProcessor, возвращая из методов true или false соответственно.
Как и для событий сообщенных обычному InputProcessor
, соответствующие методы будут вызваны в потоке визуализации перед непосредственным вызовом ApplicationListener.render()
метода.
GestureDetector
также имеет второй конструктор, который позволяет ему определить различные параметры для обнаружения жеста. Пожалуйста, для получения дополнительной информации обратитесь к Javadoc конструктора GestureDetector.