Опрашивание событий (Polling)

Опрашивание в libGDX относится к механизму проверки текущего состояния устройства ввода, например, нажата ли определенная клавиша, где находится первый палец на экране и так далее. Это простой и быстрый способ обработки пользовательского ввода и его будет хватать для большинства аркадных игр.

Использование только опрашивания

Если вы решили положиться на использование только опрашивания, то можно пропустить некоторые события, например быстрое нажатие и отпускание клавиши. Если нужно убедиться в том, что определенная последовательность ввода была завершена, используйте обработку событий.

Опрос клавиатуры

Опрос ввода с клавиатуры осуществляется с помощью всего одной простой строки кода, как показано ниже.

boolean isAPressed = Gdx.input.isKeyPressed(Keys.A);

Параметр, передаваемый в этот метод – код клавиши. Вместо запоминания всех этих кодов, libGDX предоставляет статический Keys класс Input интерфейса, который содержит коды клавиш, вы можете использовать их. Смотрите коды клавиш в Keys классе.

Опрос мыши и сенсорного экрана

Есть несколько методов, относящихся к опросу мыши и сенсорного экрана. Для проверки одного или нескольких пальцев, находящихся в настоящее время на экране (что эквивалентно нажатию кнопки мыши), вы можете сделать следующее:

boolean isTouched = Gdx.input.isTouched();

Для мультитач экранов, возможно, вам будет интересно находиться ли определенный палец (указатель) в настоящее время на экране.

// Проверка есть ли сейчас прикосновение к экрану
boolean firstFingerTouching = Gdx.input.isTouched(0);
boolean secondFingerTouching = Gdx.input.isTouched(1);
boolean thirdFingerTouching = Gdx.input.isTouched(2);

Каждый палец, который коснулся экрана, получает так называемый индекс указателя. Первый палец, прикоснувшись, получает индекс 0, следующий получает индекс 1 и так далее. Если палец отрывается от экрана и прикасается снова, в то время как другие пальцы по-прежнему на экране, то палец получит первый свободный индекс. Например:

  1. первый палец коснулся -> 0
  2. второй палец коснулся -> 1
  3. третий палец коснулся -> 2
  4. второй палец отпущен -> 1 становится свободным
  5. первый палец отпущен -> 0 становится свободным, на данный момент только 2 индекс используется
  6. другой палец коснулся -> 0, так как это первый свободный индекс

На персональном компьютере или в браузере всегда будет только один палец.

Если вы хотите проверить, если пользователь коснулся и отпустил любой палец, вы можете использовать justTouched() метод:

// Проверка было ли прикосновение к экрану
boolean justTouched = Gdx.input.justTouched();

Метод может использоваться в ситуациях, когда вы хотите быстро проверить последовательность прикосновения и отпускания пальца с экрана, например на экране, который говорит "коснитесь экрана чтобы продолжить".

Отметим, что данный метод является ненадежным, поскольку он основан на опросе.

Чтобы получить координаты конкретного пальца вы можете использовать следующие методы:

int firstX = Gdx.input.getX();
int firstY = Gdx.input.getY();
int secondX = Gdx.input.getX(1);
int secondY = Gdx.input.getY(1);

Здесь мы получаем координаты прикосновения как индекс указателя 0 (0 по умолчанию) и индекса указателя 1. Координаты представлены в системе координат относительно экрана. Координаты (0, 0) находится в левом верхнем углу экрана, X-ось направлена ​​вправо, Y-ось направлена ​​вниз.

Кнопки мыши

На компьютере вы можете проверить, какие кнопки мыши нажаты в данный момент:

boolean leftPressed = Gdx.input.isButtonPressed(Input.Buttons.LEFT);
boolean rightPressed = Gdx.input.isButtonPressed(Input.Buttons.RIGHT);

Для использования других констант смотрите Buttons класс libGDX фреймворка.

Интерпретация прикосновений на Android

На Android происходит эмуляция только левой кнопки мыши. Любое событие о прикосновении будет интерпретироваться так, как если бы оно было сделано нажатием левой кнопки мыши. Сенсорные экраны, очевидно, не имеют понятия левой, правой и средней кнопки.