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

Работа со спрайтами — одна из основ разработки игр. В этой статье мы рассмотрим, как загрузить несколько изображений и вывести их на экран с помощью Phaser. Вы научитесь подготавливать ресурсы в методе `preload` и управлять их позиционированием в `create`, что станет первым шагом к созданию визуально насыщенных игровых сцен. Этот пример идеально подходит для начинающих, так как демонстрирует базовый, но крайне важный пайплайн: от загрузки ассетов до их рендеринга. Освоив его, вы сможете легко добавлять в свою игру персонажей, предметы и элементы окружения.

Версия 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('beball', 'assets/sprites/beball1.png');
        this.load.image('atari', 'assets/sprites/atari400.png');
        this.load.image('bikkuriman', 'assets/sprites/bikkuriman.png');

    }

    create ()
    {

        this.add.sprite(200, 300, 'beball');
        this.add.sprite(500, 300, 'atari');
        this.add.sprite(800, 300, 'bikkuriman');

    }
}

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

const game = new Phaser.Game(config);

1. Настройка сцены и загрузка ресурсов

Каждая сцена в Phaser имеет жизненный цикл. Метод preload вызывается первым и предназначен для загрузки всех необходимых ресурсов (изображений, звуков, данных) до начала создания игровых объектов.

В этом примере мы устанавливаем базовый URL для загрузчиков, что позволяет указывать относительные пути к файлам. Затем с помощью метода this.load.image мы регистрируем три спрайта для загрузки. Первый аргумент — это уникальный строковый ключ (например, 'beball'), по которому мы будем обращаться к изображению в коде. Второй аргумент — путь к файлу относительно базового URL.

preload ()
{
    this.load.setBaseURL('https://raw.githubusercontent.com/phaserjs/examples/master/public/');

    this.load.image('beball', 'assets/sprites/beball1.png');
    this.load.image('atari', 'assets/sprites/atari400.png');
    this.load.image('bikkuriman', 'assets/sprites/bikkuriman.png');
}

2. Создание и позиционирование спрайтов

После успешной загрузки всех ресурсов Phaser автоматически вызывает метод create. В нём происходит основная инициализация игровых объектов.

Здесь мы создаём три спрайта, используя метод this.add.sprite. Этот метод принимает три обязательных аргумента: координаты X и Y на экране (в пикселях) и ключ загруженного изображения. Спрайт создаётся с центром в указанных координатах.

В нашем примере спрайты размещаются на одной горизонтальной линии (Y = 300), но с разным отступом по оси X (200, 500, 800), что позволяет визуально разделить их на экране.

create ()
{
    this.add.sprite(200, 300, 'beball');
    this.add.sprite(500, 300, 'atari');
    this.add.sprite(800, 300, 'bikkuriman');
}

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

Для запуска игры необходимо создать её экземпляр с конфигурационным объектом. Конфигурация определяет базовые параметры рендеринга и структуру проекта.

Ключевые параметры в этом примере: * type: Задаёт рендерер. Phaser.WEBGL использует аппаратное ускорение, если оно доступно. * parent: ID HTML-элемента (контейнера), в который будет встроен Canvas игры. * scene: Класс, определяющий основную сцену игры. Можно передать массив классов для нескольких сцен.

После создания экземпляра Phaser.Game жизненный цикл сцены запускается автоматически.

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

const game = new Phaser.Game(config);

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

Вы освоили базовый процесс создания статичных спрайтов в Phaser. Всё начинается с загрузки изображений по уникальным ключам в preload и их материализации в мире игры с помощью this.add.sprite в create. Для экспериментов попробуйте: 1. Изменить координаты спрайтов, чтобы расставить их по-другому. 2. Добавить больше спрайтов с новыми изображениями. 3. Использовать this.add.image вместо this.add.sprite (разница в наличии у спрайта анимации и физического тела по умолчанию). 4. Начать управлять одним из спрайтов, обращаясь к нему через переменную: const ball = this.add.sprite(200, 300, 'beball');.