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

При разработке игры важно иметь возможность быстро идентифицировать её название и версию, особенно во время тестирования разных сборок. Phaser 3 предоставляет простой способ хранить эту метаинформацию прямо в объекте конфигурации игры, делая её доступной из любого места вашего кода. Это полезно для отображения версии на экране, логирования или условной загрузки ресурсов в зависимости от сборки.

Версия 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('pic', 'assets/pics/baal-loader.png');
    }

    create ()
    {
        this.add.image(400, 300, 'pic');

        const text = this.add.text(80, 550, '', { font: '16px Courier', fill: '#ffffff' });

        text.setText([
            `Game Title: ${game.config.gameTitle}`,
            `Version: ${game.config.gameVersion}`
        ]);
    }
}

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

    //  Open the Dev Tools
    //  The version of your game appears after the title in the banner
    title: 'Shock and Awesome',
    version: '1.2b'
};

const game = new Phaser.Game(config);

Расширяем объект конфигурации

Основной объект конфигурации Phaser Game принимает не только стандартные параметры вроде type, width и scene. Вы можете добавить в него любые свои свойства. Для метаданных игры логично использовать свойства title и version.

const config = {
    type: Phaser.AUTO,
    parent: 'phaser-example',
    width: 800,
    height: 600,
    scene: Example,
    title: 'Shock and Awesome',
    version: '1.2b'
};

После создания экземпляра игры через new Phaser.Game(config) эти свойства становятся частью глобального объекта game.config.

Доступ к конфигурации из сцены

Получить доступ к добавленным свойствам конфигурации можно через глобальную переменную game. Внутри методов сцены (например, create()) используйте game.config.

create ()
{
    this.add.image(400, 300, 'pic');

    const text = this.add.text(80, 550, '', { font: '16px Courier', fill: '#ffffff' });

    text.setText([
        `Game Title: ${game.config.gameTitle}`,
        `Version: ${game.config.gameVersion}`
    ]);
}

Обратите внимание: в исходном коде примера используется game.config.gameTitle и game.config.gameVersion. Это опечатка или специфическая настройка. В стандартном API Phaser 3 свойства из конфигурации доступны напрямую как game.config.title и game.config.version. Убедитесь, что используете правильные ключи, которые вы задали в объекте config.

Практическое применение и проверка

Чтобы убедиться, что значения заданы и доступны правильно, выведите весь объект game.config в консоль.

create ()
{
    console.log(game.config);
    // Проверьте, видны ли там ваши свойства title и version
}

Этот подход централизует метаданные. Вы можете использовать их не только для текста на экране, но и для: * Динамической загрузки ресурсов, специфичных для версии. * Отправки данных в аналитику. * Отображения в меню настроек или на титульном экране. * Условной активации отладочных функций для конкретных сборок.

Важное замечание по API

Исходный код примера содержит потенциальную ошибку или нестандартное использование. Phaser не создаёт автоматически свойства gameTitle и gameVersion на основе title и version. Скорее всего, в данном конкретном примере где-то в коде или в более ранней версии Phaser была проведена дополнительная обработка конфига.

**Правильный способ, соответствующий современному API Phaser 3:**

// В конфигурации
title: 'Shock and Awesome',
version: '1.2b',

// В коде сцены
text.setText([
    `Game Title: ${game.config.title}`, // Используем 'title'
    `Version: ${game.config.version}`   // Используем 'version'
]);

Всегда сверяйтесь с официальной документацией, если поведение кода отличается от ожидаемого.

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

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

  1. Динамически менять цвет интерфейса или сложность в зависимости от версии (например, 'beta')
  2. Добавить больше метаданных, например, buildDate или environment ('dev', 'prod')
  3. Создать простой экран 'Об игре', который автоматически заполняется данными из game.config