Класс pc.Keyboard: keydown, keyup, isPressed, wasPressed

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

Основные методы и события

keydown и keyup: События нажатия и отпускания клавиш

События keydown и keyup играют ключевую роль в обработке действий пользователя на клавиатуре. Они срабатывают, когда клавиша нажимается или отпускается. Эти события могут быть использованы для создания динамичных действий в игровом процессе или интерфейсе.

  • keydown: Срабатывает, когда клавиша нажата. Это событие регистрирует начало действия, например, движение персонажа или изменение состояния объекта.
  • keyup: Срабатывает, когда клавиша отпускается. Это событие может быть использовано для завершения действия, например, остановки персонажа или отмены выбранного состояния.

Пример использования:

var keyboard = new pc.Keyboard(window);
keyboard.on(pc.EVENT_KEYDOWN, function (event) {
    console.log('Клавиша была нажата: ' + event.key);
});

keyboard.on(pc.EVENT_KEYUP, function (event) {
    console.log('Клавиша была отпущена: ' + event.key);
});

В этом примере обработчики событий keydown и keyup выводят информацию о нажатых и отпущенных клавишах в консоль.

isPressed: Проверка состояния клавиши

Метод isPressed используется для проверки, находится ли клавиша в нажатом состоянии. Это полезно, когда необходимо узнать, удерживает ли пользователь клавишу или она была отпущена. Метод принимает как аргумент код клавиши и возвращает логическое значение (true или false), указывающее на её состояние.

Пример:

var keyboard = new pc.Keyboard(window);

if (keyboard.isPressed(pc.KEY_A)) {
    console.log('Клавиша "A" нажата');
}

В этом примере проверяется, была ли нажата клавиша “A”. Если это так, выводится сообщение в консоль.

wasPressed: Проверка на первое нажатие клавиши

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

Пример:

var keyboard = new pc.Keyboard(window);

if (keyboard.wasPressed(pc.KEY_SPACE)) {
    console.log('Клавиша "Space" была нажата впервые');
}

В данном примере будет выведено сообщение в консоль только один раз, когда клавиша “Space” нажата впервые. Повторные нажатия не будут обрабатываться, пока клавиша не будет отпущена и снова нажата.

Взаимодействие с клавишами

Для реализации более сложных механизмов управления и взаимодействий, класс pc.Keyboard также может использоваться совместно с другими классами PlayCanvas, такими как pc.Mouse или pc.Controller. Например, можно создать систему управления, которая будет обрабатывать как нажатия на клавиши, так и действия с мышью, одновременно следя за состоянием различных объектов в сцене.

var keyboard = new pc.Keyboard(window);
var player = { x: 0, y: 0 };

function update() {
    if (keyboard.isPressed(pc.KEY_W)) {
        player.y += 1;
    }
    if (keyboard.isPressed(pc.KEY_S)) {
        player.y -= 1;
    }
    if (keyboard.isPressed(pc.KEY_A)) {
        player.x -= 1;
    }
    if (keyboard.isPressed(pc.KEY_D)) {
        player.x += 1;
    }
    console.log('Позиция игрока: ', player.x, player.y);
}

// Вызываем update каждый кадр (например, в игровом цикле)

Этот код обновляет положение игрока на экране в зависимости от того, какие клавиши были нажаты. В данном случае используется isPressed для определения, удерживает ли пользователь клавиши W, A, S или D.

Практическое применение

В PlayCanvas часто используется комбинированный подход к обработке ввода, где keydown, keyup, isPressed и wasPressed применяются в разных контекстах для создания удобного и интуитивно понятного интерфейса. Например, для создания клавиатурных сочетаний, управления персонажами или взаимодействия с объектами на экране.

  • Игры: управление движением персонажа, выполнение действий при нажатии клавиш (например, прыжок, стрельба, смена оружия).
  • Интерактивные интерфейсы: навигация по меню, изменение параметров, запуск анимаций или переключение состояний.
  • Обработка специальных клавиш: например, использование клавиш модификаторов (Shift, Ctrl, Alt) для выполнения дополнительных действий.

Важным моментом является использование правильных методов в зависимости от сценария. Например, для обработки однократного события нажатия (например, активация кнопки) лучше всего использовать wasPressed, в то время как для постоянных действий, таких как движение, следует использовать isPressed.

Резюме

Класс pc.Keyboard в PlayCanvas предоставляет удобные средства для работы с клавишами. Методы keydown, keyup, isPressed и wasPressed дают разработчикам гибкость в реализации различных сценариев ввода. Важно правильно выбрать метод для обработки каждого типа взаимодействия, чтобы создать интуитивно понятный и эффективный пользовательский интерфейс или игровое управление.