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

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

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

Живой запуск

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

Исходный код


class Example extends Phaser.Scene
{
    text;

    create ()
    {
        //  Implicit values
        const config1 = {
            x: 100,
            y: 100,
            text: 'Text\nGame Object\nCreated from config',
            style: {
                fontSize: '64px',
                fontFamily: 'Arial',
                color: '#ffffff',
                align: 'center',
                backgroundColor: '#ff00ff',
                shadow: {
                    color: '#000000',
                    fill: true,
                    offsetX: 2,
                    offsetY: 2,
                    blur: 8
                }
            }
        };

        this.make.text(config1);
    }
}

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

const game = new Phaser.Game(config);

Зачем нужен конфиг для текста?

Метод this.make.text() может принимать как простые аргументы (x, y, текст), так и один объект конфигурации, содержащий все свойства. Второй подход делает код чище, особенно когда стилей много. Конфиг можно сохранить в константу или даже в отдельный JSON-файл, что позволяет централизованно управлять дизайном текста во всей игре.

Основные преимущества: * **Читаемость:** Все параметры собраны в одной структуре. * **Переиспользование:** Один конфиг можно применять для множества текстовых объектов. * **Структурированность:** Легко вложить сложные параметры, такие как тени.

Структура конфигурационного объекта

В примере ключевой объект config1 содержит базовые координаты, строку текста и объект style. Давайте разберем его по частям.

Базовые свойства объекта:

const config1 = {
    x: 100,
    y: 100,
    text: 'Text\nGame Object\nCreated from config',
    style: { ... }
};

Здесь `xиyзадают позицию на экране, аtext— сам отображаемый текст (с переносами строк через\n). Все дальнейшее оформление определяется объектомstyle`.

Объект стиля (style) и его свойства

Объект style — сердце конфигурации текста. В нем задаются все визуальные параметры.

style: {
    fontSize: '64px',
    fontFamily: 'Arial',
    color: '#ffffff',
    align: 'center',
    backgroundColor: '#ff00ff',
    shadow: { ... }
}

* fontSize, fontFamily, color — базовые параметры шрифта. * align — выравнивание текста ('left', 'center', 'right'). Важно: оно работает внутри границ текстового объекта. * backgroundColor — цвет фона за текстом. В примере это яркий розовый (#ff00ff).

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

Phaser позволяет гибко настраивать тень для текста через вложенный объект shadow. Это делает надпись объемной и лучше читаемой на сложном фоне.

shadow: {
    color: '#000000',
    fill: true,
    offsetX: 2,
    offsetY: 2,
    blur: 8
}

* color — цвет тени (черный). * fill: true — указывает, что тень должна отрисовываться. Если false, тень не будет видна. * offsetX и offsetY — смещение тени относительно основного текста по осям. Положительные значения смещают тень вправо и вниз. * blur — степень размытия краев тени. Чем больше значение, тем мягче тень.

Создание объекта и запуск игры

Когда конфиг готов, создание текстового объекта становится однострочной операцией с помощью фабрики (this.make).

this.make.text(config1);

Фабрика this.make принадлежит сцене и используется для создания игровых объектов без необходимости добавлять их в системы физики. Этот метод сам добавляет созданный объект на дисплейный лист текущей сцены.

Конфигурация игры (config) и её запуск стандартны:

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

const game = new Phaser.Game(config);

Ключевой параметр — scene: Example, который сообщает движку, какую сцену использовать в качестве основной.

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

Использование конфигурационных объектов для создания текста (и других объектов) в Phaser — это отличная практика для написания чистого и поддерживаемого кода. Вы можете хранить библиотеки стилей для заголовков, описаний или диалогов, легко меняя оформление всей игры правкой одного объекта. **Идеи для экспериментов:** 1. Вынесите объект style в отдельную константу и примените его к нескольким текстовым объектам с разными координатами и содержимым. 2. Поэкспериментируйте с другими свойствами style, например, fontStyle, stroke (обводка) и strokeThickness. 3. Попробуйте динамически менять свойства конфига (например, color) уже после создания текстового объекта, обращаясь к его полю style.