О чем этот пример
Взаимодействие с игроком — основа любого геймплея. В Phaser одним из базовых способов реагировать на клики или касания является событие `pointerup`. Эта статья покажет, как легко добавить интерактивность любому спрайту, чтобы он менял цвет по клику. Этот паттерн — фундамент для создания кнопок, интерактивных элементов окружения и сложных игровых механик.
Версия 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('eye', 'assets/pics/lance-overdose-loader-eye.png');
}
create ()
{
const sprite = this.add.sprite(400, 300, 'eye').setInteractive();
sprite.on('pointerup', function (pointer)
{
this.setTint(Math.random() * 16000000);
});
}
}
const config = {
type: Phaser.WEBGL,
parent: 'phaser-example',
scene: Example
};
const game = new Phaser.Game(config);
Подготовка сцены и загрузка ассетов
Первым делом в методе preload() мы загружаем изображение, с которым будем работать. Важно установить базовый URL для загрузчика, чтобы указывать относительные пути к ресурсам.
preload ()
{
this.load.setBaseURL('https://raw.githubusercontent.com/phaserjs/examples/master/public/');
this.load.image('eye', 'assets/pics/lance-overdose-loader-eye.png');
}
Создание интерактивного спрайта
В методе create() мы создаем спрайт и сразу делаем его интерактивным, вызвав метод .setInteractive(). Без этого вызова объект не будет генерировать события ввода (pointer events).
const sprite = this.add.sprite(400, 300, 'eye').setInteractive();
Подписка на событие pointerup
Ключевой момент — назначение обработчика события. Мы используем метод .on() для подписки на событие 'pointerup'. Оно срабатывает, когда пользователь отпускает кнопку мыши или убирает палец с экрана над объектом.
sprite.on('pointerup', function (pointer)
{
this.setTint(Math.random() * 16000000);
});
Обратите внимание: внутри функции-обработчика this ссылается на сам спрайт (sprite), что позволяет нам вызывать его метод setTint. В качестве аргумента передается объект pointer с информацией о событии (координаты, кнопка и т.д.).
Как работает setTint
Метод setTint применяет цветовой оттенок к текстуре спрайта. В примере используется выражение Math.random() * 16000000, которое генерирует случайное целое число в диапазоне от 0 до 0xFFFFFF (шестнадцатеричный белый цвет). Это простой способ получить произвольный цвет.
// Генерация случайного цвета для оттенка
let randomColor = Math.random() * 16000000;
this.setTint(randomColor);
Конфигурация и запуск игры
Как и в любом проекте Phaser, необходимо создать конфигурационный объект и инициализировать игру. В данном примере используется WebGL-рендерер и наша сцена Example.
const config = {
type: Phaser.WEBGL,
parent: 'phaser-example',
scene: Example
};
const game = new Phaser.Game(config);
Что попробовать дальше
Событие pointerup — это ваш ключ к отзывчивому игровому миру. Попробуйте заменить setTint на другие действия: setAlpha для изменения прозрачности, setScale для анимации размера или destroy для удаления объекта. Можно также экспериментировать с другими событиями, например pointerdown (нажатие) или pointerover (наведение), чтобы создавать более сложные и многоуровневые взаимодействия.
