Комбинации клавиш и события keyboard

Phaser предоставляет мощный механизм для обработки событий клавиатуры, который позволяет отслеживать нажатия, отпускания клавиш и сочетания клавиш. В основе работы лежит объект this.input.keyboard, через который создаются и управляются события.

Подключение и создание клавиатурного ввода

Для начала работы с клавиатурой создаётся объект Keyboard с помощью встроенного менеджера ввода:

this.input.keyboard.on('keydown', function (event) {
    console.log('Нажата клавиша:', event.key);
});

События делятся на ключевые типы:

  • keydown — событие нажатия клавиши;
  • keyup — событие отпускания клавиши;
  • keydown-KEY — событие нажатия конкретной клавиши, например keydown-SPACE;
  • keyup-KEY — событие отпускания конкретной клавиши.

Объект события содержит свойства:

  • key — строковое значение клавиши;
  • code — физический код клавиши (например, KeyA, ArrowUp);
  • altKey, ctrlKey, shiftKey, metaKey — состояния модификаторов.

Создание объектов клавиш (Key objects)

Phaser позволяет создавать объекты Key, которые позволяют отслеживать состояние клавиши между кадрами:

this.cursors = this.input.keyboard.createCursorKeys();
this.spaceBar = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SPACE);

Объекты Key имеют свойства:

  • isDown — клавиша нажата;
  • isUp — клавиша отпущена;
  • timeDown — время последнего нажатия;
  • duration — сколько времени клавиша была удержана.

Использование объектов Key удобно в методе update() игры для постоянного отслеживания состояния клавиш:

if (this.cursors.left.isDown) {
    player.setVelocityX(-160);
} else if (this.cursors.right.isDown) {
    player.setVelocityX(160);
} else {
    player.setVelocityX(0);
}

if (Phaser.Input.Keyboard.JustDown(this.spaceBar)) {
    player.jump();
}

Сочетания клавиш (Key Combinations)

Phaser поддерживает проверку сочетаний клавиш, что важно для реализации сложных команд:

this.shiftA = this.input.keyboard.addKeyCombo([Phaser.Input.Keyboard.KeyCodes.SHIFT, Phaser.Input.Keyboard.KeyCodes.A], {
    resetOnWrongKey: true
});

Свойства и методы сочетаний клавиш:

  • progress — сколько клавиш последовательности было нажато;
  • justDown — возвращает true, если последовательность только что выполнена;
  • reset() — сбросить состояние комбинации.

Сочетания клавиш особенно полезны для реализации «секретных» комбинаций или специальных игровых механик.

События клавиатуры с модификаторами

Phaser позволяет отслеживать клавиши с модификаторами:

this.input.keyboard.on('keydown', function (event) {
    if (event.ctrlKey && event.key === 'S') {
        console.log('Сочетание Ctrl+S нажато');
    }
});

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

Управление повторяющимися событиями

По умолчанию нажатие клавиши вызывает одно событие keydown. Для обработки повторов при удержании клавиши можно использовать свойство repeat объекта события:

this.input.keyboard.on('keydown', function (event) {
    if (event.repeat) {
        console.log('Клавиша удерживается:', event.key);
    }
});

Также можно управлять частотой повторений с помощью встроенного таймера и проверки состояния объекта Key.

Состояние всех клавиш

Phaser предоставляет удобный способ проверки состояния всех клавиш с помощью this.input.keyboard.keys или this.input.keyboard.addKeys():

this.keys = this.input.keyboard.addKeys('W,S,A,D');

if (this.keys.W.isDown) {
    player.moveUp();
}
if (this.keys.S.isDown) {
    player.moveDown();
}

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

Резюме по событиям клавиатуры

  • keydown / keyup — глобальные события клавиатуры.
  • keydown-KEY / keyup-KEY — события для конкретных клавиш.
  • Объекты Key позволяют отслеживать состояние клавиши между кадрами.
  • Key Combinations обеспечивают проверку последовательностей клавиш.
  • Модификаторы позволяют реализовать сложные комбинации (Ctrl, Shift, Alt).
  • Методы JustDown и repeat помогают контролировать однократные действия и удержания клавиш.

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