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

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

Версия 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}`,
            `URL: ${game.config.gameURL}`
        ]);
    }
}

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

    //  Open the Dev Tools
    //  The URL of your game will be a link at the end of the banner text
    title: 'Shock and Awesome',
    url: 'http://shockandawe.io'
};

const game = new Phaser.Game(config);

Инициализация игры с метаданными

При создании экземпляра игры через new Phaser.Game(config) в конфигурацию можно передать дополнительные поля title и url. Они не влияют на внутреннюю работу движка, но сохраняются для дальнейшего использования разработчиком.

const config = {
    type: Phaser.AUTO,
    parent: 'phaser-example',
    width: 800,
    height: 600,
    scene: Example,
    title: 'Shock and Awesome',
    url: 'http://shockandawe.io'
};

const game = new Phaser.Game(config);

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

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

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}`,
        `URL: ${game.config.gameURL}`
    ]);
}

Ключевой момент: в конфиг мы передали поля title и url, но обращаемся к ним через свойства gameTitle и gameURL. Это особенность Phaser: движок автоматически переименовывает эти поля при создании объекта конфигурации.

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

Использование game.config.gameTitle и game.config.gameURL — это отличный способ избежать «магических строк» в коде. Если название игры или её адрес понадобится изменить, достаточно будет обновить их в одном месте — в объекте конфигурации.

Важно помнить, что game.config содержит всю исходную конфигурацию игры, включая width, height, type и другие параметры. Поля title и url — это пользовательские метаданные, которые Phaser просто сохраняет и не использует самостоятельно. Например, title отображается в заголовке окна браузера и в баннере при открытии консоли разработчика, но для отображения внутри игрового интерфейса вам нужно обратиться к конфигу, как показано в примере.

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

Глобальный объект game.config предоставляет простой и централизованный способ хранения метаданных игры. Для экспериментов попробуйте использовать эти данные не только для текста, но и для динамического формирования ссылок в UI (например, кнопки «Посетить сайт»), логирования или условной загрузки ресурсов в зависимости от окружения (production/development), определяемого по URL.