О чем этот пример

Секретные коды, такие как знаменитый Konami Code, — это классический способ добавить в игру пасхалки, читы или специальные возможности. В Phaser есть встроенная и удобная система для отслеживания сложных последовательностей нажатий клавиш. В этой статье мы разберем, как создать и обработать такую комбинацию на практическом примере, что позволит вам легко внедрить этот функционал в свои проекты.

Версия Phaser: код и демо в этой статье рассчитаны на Phaser 3.90.0.

Живой запуск

Ниже встроен рабочий билд примера. Оригинальный источник: GitHub.

Исходный код


class Example extends Phaser.Scene
{
    create ()
    {

        //  37 = LEFT
        //  38 = UP
        //  39 = RIGHT
        //  40 = DOWN

        const combo = this.input.keyboard.createCombo([ 38, 38, 38, 40, 40, 40, 37, 37, 37, 39, 39, 39 ], { resetOnMatch: true });

        this.input.keyboard.on('keycombomatch', event =>
        {

            console.log('Konami Code entered!');

        });

    }
}

const config = {
    type: Phaser.CANVAS,
    parent: 'phaser-example',
    scene: Example
};

const game = new Phaser.Game(config);

Создание комбинации клавиш

Вся магия начинается с метода createCombo объекта клавиатуры (this.input.keyboard). Этот метод принимает массив с кодами клавиш и, опционально, объект настроек.

В нашем примере создается комбинация для Konami Code (Вверх, Вверх, Вверх, Вниз, Вниз, Вниз, Влево, Влево, Влево, Вправо, Вправо, Вправо). Коды клавиш — это числовые значения. Опция resetOnMatch: true автоматически сбрасывает отслеживание комбинации после успешного ввода, позволяя игроку ввести код снова.

const combo = this.input.keyboard.createCombo([ 38, 38, 38, 40, 40, 40, 37, 37, 37, 39, 39, 39 ], { resetOnMatch: true });

Обработка успешного ввода

Phaser сам отслеживает нажатия игрока и сравнивает их с зарегистрированными комбинациями. Когда пользователь точно и последовательно введет все клавиши, система клавиатуры сгенерирует событие 'keycombomatch'.

Чтобы отреагировать на это событие, мы используем метод on. В функцию-обработчик передается объект события, который содержит полезную информацию, например, ссылку на саму комбинацию (event). В данном примере мы просто выводим сообщение в консоль.

this.input.keyboard.on('keycombomatch', event => {
    console.log('Konami Code entered!');
});

Конфигурация и запуск сцены

Этот код должен выполняться в контексте сцены Phaser. В методе create мы инициализируем нашу логику с комбинацией клавиш. Стандартная конфигурация игры (config) указывает на использование этой сцены (Example).

const config = {
    type: Phaser.CANVAS,
    parent: 'phaser-example',
    scene: Example
};

const game = new Phaser.Game(config);

Практические советы и расширение функционала

Метод createCombo обладает гибкостью. Вот несколько идей для использования: * **Сброс при ошибке:** Используйте опцию maxKeyDelay (максимальная задержка между нажатиями), чтобы комбинация сбрасывалась, если игрок печатает слишком медленно. * **Учет клавиш-модификаторов:** В массив комбинации можно включать коды клавиш Shift, Ctrl или Alt. * **Разные действия для разных кодов:** Подписавшись на одно событие 'keycombomatch', вы можете внутри обработчика проверять свойство event.keyCombo (это объект комбинации) и выполнять разные действия в зависимости от того, какая именно комбинация была введена.

// Пример: Создание комбинации, которая требует быстрого ввода
const quickCombo = this.input.keyboard.createCombo([ 65, 66, 67 ], { maxKeyDelay: 500 });

Что попробовать дальше

Система комбинаций клавиш в Phaser — это мощный и простой инструмент для добавления в игру слоя скрытых взаимодействий. Попробуйте реализовать разные коды: для включения режима бога, вызова специального персонажа или мгновенного перехода на скрытый уровень. Экспериментируйте с настройками resetOnMatch и maxKeyDelay, чтобы создать комбинации, которые идеально подходят под темп и стиль вашей игры.