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

Интерактивность — ключ к вовлечению игрока. Простая реакция объекта на действия мыши делает мир игры живым и отзывчивым. В этой статье на примере кода из репозитория Phaser мы разберем, как легко добавить эффект свечения (glow) к спрайту при наведении курсора, используя мощную встроенную систему постэффектов. Этот прием мгновенно улучшит визуальную обратную связь для кнопок, интерактивных предметов или персонажей.

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

Живой запуск

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

Исходный код


class Example extends Phaser.Scene
{
    preload ()
    {
        this.load.setBaseURL('https://raw.githubusercontent.com/phaserjs/examples/master/public/');
        this.load.image('bomb', 'assets/sprites/bombcolor.png');
    }

    create ()
    {
        const bomb1 = this.add.sprite(200, 300, 'bomb');
        bomb1.setInteractive({ useHandCursor: true });

        bomb1.on('pointerover', () =>
        {
            bomb1.postFX.addGlow(0xffffff, 32);
        });
        bomb1.on('pointerout', () =>
        {
            bomb1.postFX.clear();
        });
    }
}

const config = {
    type: Phaser.AUTO,
    width: 800,
    height: 600,
    backgroundColor: '#2d2d2d',
    parent: 'phaser-example',
    scene: Example
};

const game = new Phaser.Game(config);

Подготовка сцены и загрузка ассетов

В методе preload мы устанавливаем базовый URL для загрузки ресурсов и загружаем одно изображение — спрайт бомбы. Это стандартная практика в Phaser для подготовки ассетов перед созданием сцены.

preload ()
{
    this.load.setBaseURL('https://raw.githubusercontent.com/phaserjs/examples/master/public/');
    this.load.image('bomb', 'assets/sprites/bombcolor.png');
}

Создание интерактивного спрайта

В методе create мы создаем спрайт и делаем его интерактивным. Ключевой момент — вызов метода setInteractive({ useHandCursor: true }). Это позволяет спрайту реагировать на события указателя (мыши или касания), а параметр useHandCursor меняет курсор на "руку" при наведении, что является стандартным визуальным индикатором кликабельности.

const bomb1 = this.add.sprite(200, 300, 'bomb');
bomb1.setInteractive({ useHandCursor: true });

Обработка событий указателя и добавление эффекта

Здесь мы подписываемся на два события указателя: pointerover (курсор наведен на объект) и pointerout (курсор убран с объекта). При наведении (pointerover) мы обращаемся к менеджеру постэффектов спрайта bomb1.postFX и добавляем эффект свечения с помощью метода addGlow. Первый аргумент — цвет свечения (0xffffff — белый), второй — радиус размытия (32). Этот метод автоматически создает и применяет эффект к спрайту. При уведении курсора (pointerout) мы вызываем bomb1.postFX.clear(), чтобы удалить все активные постэффекты с этого спрайта и вернуть его в исходное состояние.

bomb1.on('pointerover', () =>
{
    bomb1.postFX.addGlow(0xffffff, 32);
});
bomb1.on('pointerout', () =>
{
    bomb1.postFX.clear();
});

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

Это стандартная конфигурация игры Phaser 3. Мы указываем тип рендерера, размеры холста, цвет фона, ID родительского HTML-элемента и наш основной класс сцены Example. После этого создается экземпляр игры new Phaser.Game(config), который запускает весь процесс.

const config = {
    type: Phaser.AUTO,
    width: 800,
    height: 600,
    backgroundColor: '#2d2d2d',
    parent: 'phaser-example',
    scene: Example
};

const game = new Phaser.Game(config);

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

Система постэффектов Phaser (postFX) позволяет с минимальными усилиями добавлять сложные визуальные модификации объектам. Всего пара строк кода — и ваш интерфейс или игровой мир становится значительно выразительнее. Для экспериментов попробуйте изменить цвет и радиус свечения в addGlow, применить другие эффекты (например, addShadow или addPixelate), или добавить эффект не при наведении, а при клике (pointerdown).