Key.isDown и проверка состояния клавиш

Key.isDown — это свойство библиотеки Paper.js, которое позволяет определить, удерживается ли в данный момент определённая клавиша на клавиатуре. Оно является частью глобального объекта Key и возвращает булево значение: true, если клавиша нажата, и false, если отпущена.

if (Key.isDown('space')) {
    console.log('Пробел удерживается');
}

Здесь 'space' — это идентификатор клавиши. Paper.js поддерживает как буквенные и цифровые клавиши, так и функциональные клавиши вроде 'shift', 'control', 'alt', 'up', 'down', 'left', 'right'.


Основные особенности Key.isDown

  1. Непрерывное отслеживание Key.isDown проверяет текущее состояние клавиши в любой момент выполнения скрипта. Это отличается от событий onKeyDown и onKeyUp, которые срабатывают только в момент нажатия или отпускания.

  2. Использование в анимации Часто Key.isDown применяется в функции onFrame, чтобы реализовать движение объектов в реальном времени:

var circle = new Path.Circle({
    center: view.center,
    radius: 30,
    fillColor: 'blue'
});

function onFrame(event) {
    if (Key.isDown('left')) {
        circle.position.x -= 5;
    }
    if (Key.isDown('right')) {
        circle.position.x += 5;
    }
    if (Key.isDown('up')) {
        circle.position.y -= 5;
    }
    if (Key.isDown('down')) {
        circle.position.y += 5;
    }
}

В этом примере движение объекта происходит плавно, пока клавиша удерживается.


Список поддерживаемых идентификаторов клавиш

  • Буквенные клавиши: 'a', 'b', 'c', … 'z'
  • Цифры и символы: '0''9', '+', '-', '.', ','
  • Функциональные клавиши: 'shift', 'control', 'alt', 'meta'
  • Стрелки и навигация: 'up', 'down', 'left', 'right', 'space', 'enter', 'tab'
  • Прочие клавиши: 'escape', 'backspace', 'delete'

Использование правильного идентификатора критично для корректной работы проверки.


Комбинации клавиш

Key.isDown можно использовать для проверки одновременного удержания нескольких клавиш:

if (Key.isDown('shift') && Key.isDown('up')) {
    console.log('Shift + Стрелка вверх');
}

Такой подход полезен для реализации ускоренного движения, модифицированных действий и игровых механик.


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

  • Проверки состояния клавиш лучше помещать внутрь onFrame для плавного отслеживания.
  • Для сложных комбинаций клавиш следует хранить состояние в отдельном объекте, чтобы избежать конфликтов и пропуска событий.
  • Не использовать Key.isDown для одиночных действий, требующих единственного срабатывания — для этого лучше onKeyDown.

Пример: управление фигурой с ускорением

var rect = new Path.Rectangle({
    point: [100, 100],
    size: [50, 50],
    fillColor: 'red'
});

var speed = 2;

function onFrame(event) {
    if (Key.isDown('up')) rect.position.y -= speed;
    if (Key.isDown('down')) rect.position.y += speed;
    if (Key.isDown('left')) rect.position.x -= speed;
    if (Key.isDown('right')) rect.position.x += speed;

    if (Key.isDown('shift')) speed = 5;
    else speed = 2;
}

В этом коде объект перемещается в зависимости от удерживаемых клавиш, а shift увеличивает скорость.


Итоговые особенности использования

  • Key.isDown обеспечивает постоянный доступ к состоянию клавиши.
  • Подходит для плавного управления объектами и игровых механик.
  • Требует точного указания идентификатора клавиши и правильного размещения проверок (обычно в onFrame).
  • Можно комбинировать для проверки одновременного удержания нескольких клавиш.

Эта функциональность делает Paper.js удобным инструментом для интерактивных приложений и игр, где важно непрерывное отслеживание действий пользователя.