Класс pc.GamePads: axes, buttons, вибрация

PlayCanvas предоставляет класс pc.GamePads, который является интерфейсом для работы с геймпадами, подключенными к устройству. Этот класс позволяет получать информацию о текущем состоянии кнопок и осей (axes), а также управлять вибрацией контроллера, если оно поддерживается.

Основные компоненты класса pc.GamePads

Класс pc.GamePads представляет собой коллекцию геймпадов, доступных на устройстве. Каждый геймпад в PlayCanvas представлен объектом типа pc.GamePad, который предоставляет доступ к информации о кнопках и осях, а также методам для управления вибрацией.

Подключение и доступ к геймпадам

Для начала работы с геймпадами необходимо получить доступ к объекту pc.GamePads. Обычно это делается через глобальный объект app.gamePads в контексте приложения PlayCanvas.

var gamePads = app.gamePads;

После получения доступа к объекту gamePads можно обращаться к конкретным геймпадам. Каждый геймпад имеет свой индекс, начиная с 0. Если геймпад подключен, его индекс будет отображаться в коллекции.

var gamePad = gamePads[0]; // Первый подключенный геймпад

Оси (Axes) геймпада

Оси геймпада описывают его аналоговые контроллеры, такие как джойстики. Эти оси принимают значения в диапазоне от -1 до 1, где -1 указывает на крайнее положение в одном направлении, а 1 — в противоположном. Центральное положение оси всегда соответствует значению 0.

В PlayCanvas оси геймпада доступны через массив axes. Каждая ось в массиве отображает одну из осей управления. Например, для геймпада с двумя джойстиками оси будут следовать в следующем порядке:

  • ось 0: левый джойстик по оси X
  • ось 1: левый джойстик по оси Y
  • ось 2: правый джойстик по оси X
  • ось 3: правый джойстик по оси Y
var xAxis = gamePad.axes[0]; // Значение оси X левого джойстика
var yAxis = gamePad.axes[1]; // Значение оси Y левого джойстика

Если геймпад имеет дополнительные оси, то они также будут добавлены в этот массив.

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

var movementX = gamePad.axes[0];
var movementY = gamePad.axes[1];

Кнопки геймпада

Геймпады содержат множество кнопок, которые могут быть либо цифровыми (вкл/выкл), либо аналоговыми (с несколькими состояниями). В PlayCanvas кнопки представляются массивом buttons. Каждая кнопка в массиве представляет собой объект, который содержит информацию о её состоянии.

Стандартные кнопки могут быть указаны через индексы, где каждый индекс соответствует конкретной кнопке. Например:

  • Кнопка A — индекс 0
  • Кнопка B — индекс 1
  • Кнопка X — индекс 2
  • Кнопка Y — индекс 3

Состояние каждой кнопки можно проверить через свойство pressed. Если кнопка нажата, то это свойство будет равно true, в противном случае — false.

if (gamePad.buttons[0].pressed) {
    // Действие при нажатии кнопки A
}

Для некоторых кнопок также может быть доступен дополнительный параметр value, который представляет собой степень нажатия (например, для триггеров). Этот параметр варьируется от 0 (не нажата) до 1 (полностью нажата).

var triggerValue = gamePad.buttons[7].value; // Значение триггера

Вибрация геймпада

Множество современных геймпадов поддерживает вибрацию, что позволяет улучшить ощущение от игры. В PlayCanvas класс pc.GamePad предоставляет методы для управления вибрацией геймпада через свойства vibration.

Чтобы инициировать вибрацию, используется метод vibration, который принимает два параметра:

  1. Intensity — интенсивность вибрации, которая может быть значением от 0 до 1.
  2. Duration — длительность вибрации в миллисекундах.

Пример включения вибрации для геймпада:

gamePad.vibration(1.0, 1000); // Вибрация на максимальной интенсивности в течение 1000 мс

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

Пример использования всех функций класса pc.GamePads

Ниже приведен пример, который демонстрирует использование осей, кнопок и вибрации на геймпаде в реальном времени:

var gamePads = app.gamePads;

app.on('update', function (dt) {
    var gamePad = gamePads[0]; // Получаем первый подключенный геймпад

    if (gamePad) {
        // Получаем значения осей
        var xAxis = gamePad.axes[0];
        var yAxis = gamePad.axes[1];

        // Обрабатываем движение на основе значений осей
        player.move(xAxis, yAxis);

        // Проверяем, была ли нажата кнопка A
        if (gamePad.buttons[0].pressed) {
            player.jump();
        }

        // Включаем вибрацию при столкновении
        if (player.collidesWithEnemy()) {
            gamePad.vibration(0.5, 500); // Вибрация средней интенсивности на 500 мс
        }
    }
});

Этот код будет в реальном времени обрабатывать ввод с геймпада и выполнять действия на основе состояния кнопок и осей, а также включать вибрацию при столкновении с врагом.

Заключение

Класс pc.GamePads является важным инструментом для разработки игр, использующих геймпады, в PlayCanvas. Он предоставляет удобный интерфейс для получения данных о состоянии кнопок и осей, а также для управления вибрацией. В зависимости от нужд игры можно обрабатывать различные типы ввода и предоставлять пользователям улучшенный игровой опыт через тактильную обратную связь.