О чем этот пример
При разработке игры важно иметь возможность быстро идентифицировать её название и версию, особенно во время тестирования разных сборок. 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'
]);
Всегда сверяйтесь с официальной документацией, если поведение кода отличается от ожидаемого.
Что попробовать дальше
Хранение названия и версии игры в основном конфигурационном объекте — это простой и элегантный паттерн, который делает вашу кодовую базу чище и информативнее. Для экспериментов попробуйте
- Динамически менять цвет интерфейса или сложность в зависимости от версии (например, 'beta')
- Добавить больше метаданных, например,
buildDateилиenvironment('dev', 'prod') - Создать простой экран 'Об игре', который автоматически заполняется данными из
game.config
