Сенсорные экраны хорошо подходят для ввода жестов. Жестом может быть использование двух пальцев для масштабирования, прикосновение или двойное прикосновение, долгое нажатие и так далее.
libGDX предоставляет GestureDetector (исходники) класс, который позволяет вам обнаружить следующие жесты:
- tap: пользователь прикасается к экрану и затем поднимает палец. Палец не должен выходить за пределы указанной квадратной области вокруг исходного положения для регистрации tap жеста. Многократные последовательные tap жесты будут обнаружены, если пользователь выполняет tap жест втечении заданного интервала времени.
- pan: пользователь двигает пальцем по экрану. Детектор сообщит координаты текущего прикосновения, а также разницу между позицией текущего и предыдущего прикосновения. Используется для реализации панорамирование камеры в 2D.
- fling: пользователь передвигал палец по экрану, а затем поднял его. Используется для реализации жеста скольжения.
- zoom: пользователь помещает два пальца на экран и перемещает их вместе друг от друга. Детектор сообщает о начальном и текущем расстоянии между пальцами в пикселях. Используется для реализации масштабирования камеры.
- pinch: Похож на zoom. Детектор вместо расстояния будет сообщать о первоначальном и текущем положении пальцев. Используется для реализации масштабирования камеры и более сложных жестов, таких как вращение.
GestureDetector
является обработчиком событий для жестов. Для перехвата жестов в libGDX игре или приложении, можно реализовать 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
обработчику, в libGDX соответствующие методы будут вызваны в потоке визуализации перед непосредственным
вызовом ApplicationListener.render()
метода.
GestureDetector
также имеет второй конструктор, который позволяет ему определить различные параметры для обнаружения жеста. Пожалуйста, для
получения дополнительной информации обратитесь к
Javadoc конструктора GestureDetector.