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

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

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

Живой запуск

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

Исходный код


class Example extends Phaser.Scene
{
    constructor ()
    {
        super();
    }

    preload ()
    {
        this.load.setBaseURL('https://raw.githubusercontent.com/phaserjs/examples/master/public/');
        this.load.bitmapFont('desyrel', 'assets/fonts/bitmap/desyrel.png', 'assets/fonts/bitmap/desyrel.xml');
        this.load.bitmapFont('lato', 'assets/fonts/bitmap/lato_0.png', 'assets/fonts/bitmap/lato.xml');
    }

    create ()
    {
        const t1 = this.add.bitmapText(0, 0, 'desyrel', 'The desyrel font');
        const t2 = this.add.bitmapText(0, 100, 'lato', 'The lato font');

        console.log(t1);
        console.log(t2);
    }
}

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

const game = new Phaser.Game(config);

Загрузка растровых шрифтов

В Phaser растровые шрифты загружаются в методе preload с помощью метода load.bitmapFont. Для каждого шрифта нужно указать ключ (имя), путь к файлу изображения (PNG) и путь к файлу данных (XML), который описывает расположение символов.

this.load.bitmapFont('desyrel', 'assets/fonts/bitmap/desyrel.png', 'assets/fonts/bitmap/desyrel.xml');
this.load.bitmapFont('lato', 'assets/fonts/bitmap/lato_0.png', 'assets/fonts/bitmap/lato.xml');

Первый параметр — ключ 'desyrel' или 'lato'. Он будет использоваться для создания текста. Второй и третий параметры — пути к файлам. Phaser загрузит изображение и данные, чтобы знать, как "вырезать" каждый символ из общего атласа.

Создание bitmap текста

После загрузки шрифты можно использовать. В методе create создаются два текстовых объекта с помощью this.add.bitmapText.

const t1 = this.add.bitmapText(0, 0, 'desyrel', 'The desyrel font');
const t2 = this.add.bitmapText(0, 100, 'lato', 'The lato font');

Параметры метода: координаты X и Y (начальная точка текста), ключ загруженного шрифта ('desyrel' или 'lato') и сам текст для отображения. Объекты t1 и t2 — это экземпляры Phaser.GameObjects.BitmapText, которые можно далее трансформировать (двигать, масштабировать).

Конфигурация игры и вывод в консоль

Конфигурация игры стандартная, используется Phaser.CANVAS рендерер. В примере также есть вывод созданных объектов в консоль для изучения их структуры.

console.log(t1);
console.log(t2);

Это полезно для разработчика, чтобы проверить свойства объектов (например, width, height, font) или убедиться, что шрифты загрузились корректно.

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

const game = new Phaser.Game(config);

Конфиг задает базовые параметры игры: тип рендеринга, родительский DOM-элемент, размеры и основной класс сцены.

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

Bitmap text в Phaser — это простой и эффективный инструмент для работы со стилизованным текстом. Вы можете экспериментировать: изменять положение текста динамически, применять трансформации (scale, rotation), использовать разные шрифты для разных элементов интерфейса или создать эффекты переключения шрифтов в зависимости от состояния игры.