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

Работа с текстом — неотъемлемая часть игровой разработки. Часто простого переноса строки недостаточно: чтобы текст выглядел аккуратно, его нужно правильно выровнять. В Phaser 3 для этого используется свойство `align` в конфигурации текстового объекта. Эта статья на практическом примере покажет, как управлять выравниванием многострочного текста, делая ваши интерфейсы и внутриигровые сообщения более читабельными и визуально приятными.

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

Живой запуск

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

Исходный код


class Example extends Phaser.Scene
{
    create ()
    {
        const graphics = this.add.graphics();

        graphics.lineStyle(1, 0xffffff, 1);
        graphics.lineBetween(200, 0, 200, 600);

        //  Align only works with multi-lined text.

        this.add.text(200, 100, 'Case shrugged.\nThe girl to his right giggled and nudged him.', { color: '#00ff00', align: 'left' });
        this.add.text(200, 200, 'Case shrugged.\nThe girl to his right giggled and nudged him.', { color: '#00ff00', align: 'right' });
        this.add.text(200, 300, 'Case shrugged.\nThe girl to his right giggled and nudged him.', { color: '#00ff00', align: 'center' });
    }
}

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

const game = new Phaser.Game(config);

Как работает свойство `align`

В Phaser 3 текстовый объект создается методом this.add.text(). Третьим аргументом в этот метод передается объект стилей. Свойство align внутри этого объекта определяет горизонтальное выравнивание для текста, состоящего из нескольких строк. Важное уточнение: этот параметр работает **только с многострочным текстом**. Если текст однострочный, свойство align не окажет на него видимого эффекта.

В примере используется один и тот же текст с переносом строки (\n), но с разными значениями выравнивания: 'left', 'right' и 'center'. Для наглядности в сцене также рисуется вертикальная линия, которая служит точкой отсчета (осью X = 200).

Разбор примера: от линии до текста

Давайте построчно разберем исходный код примера, чтобы понять, как достигается конечный результат.

Сначала создается графический объект (Graphics) и настраивается стиль линии. Затем рисуется вертикальная линия, которая поможет визуально оценить выравнивание.

const graphics = this.add.graphics();
graphics.lineStyle(1, 0xffffff, 1);
graphics.lineBetween(200, 0, 200, 600);

Далее создаются три текстовых объекта. Их координата X одинакова (200), и они размещаются на разной высоте (Y: 100, 200, 300). Ключевое отличие — значение свойства align в объекте стилей.

// Текст, выровненный по левому краю относительно точки (200, 100)
this.add.text(200, 100, 'Case shrugged.\nThe girl to his right giggled and nudged him.', { color: '#00ff00', align: 'left' });

// Текст, выровненный по правому краю относительно точки (200, 200)
this.add.text(200, 200, 'Case shrugged.\nThe girl to his right giggled and nudged him.', { color: '#00ff00', align: 'right' });

// Текст, выровненный по центру относительно точки (200, 300)
this.add.text(200, 300, 'Case shrugged.\nThe girl to his right giggled and nudged him.', { color: '#00ff00', align: 'center' });

Практика: точка привязки и выравнивание

Понимание взаимосвязи между точкой привязки текста и свойством align критически важно.

* При align: 'left' левый край текстового блока будет находиться в заданной координате X (в нашем случае — на синей линии). * При align: 'right' в заданной координате X окажется правый край текстового блока. * При align: 'center' координата X будет указывать на центр всего блока текста.

Точка привязки (origin) самого игрового объекта по умолчанию равна (0, 0), то есть его левому верхнему углу. Но свойство align работает именно с внутренним содержимым (строками текста) относительно границ этого объекта. Не путайте align с настройкой origin через setOrigin() — это разные механизмы.

Типичные сценарии использования

Где это может пригодиться в реальной игре?

1. **Диалоговые окна:** Выравнивание 'left' или 'center' для реплик персонажей. 2. **Интерфейс:** Выравнивание 'right' для числовых значений (очки, деньги) в таблицах или статистике. 3. **Описания и лоры:** Центрированный текст ('center') для заголовков или эпиграфов. 4. **Меню:** Комбинирование разных типов выравнивания в одном блоке для создания сложных, но аккуратных интерфейсов.

Помните, что для работы align текст должен быть многострочным. Если у вас одна строка, но вы хотите её сдвинуть, используйте setOrigin() или просто меняйте координату X.

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

Свойство align — простой, но мощный инструмент для контроля над версткой текста в Phaser 3. Его правильное использование сразу повышает качество визуального представления любого текста в игре. Для экспериментов попробуйте: 1. Добавить фоновую панель за текстом и посмотреть, как разные типы выравнивания взаимодействуют с её границами. 2. Создать текстовый объект с динамически меняющимся содержимым и переключать align в runtime. 3. Скомбинировать align с другими свойствами стиля, такими как fixedWidth, чтобы создать колонки текста с четкими границами.