Phaser предоставляет мощные инструменты для работы с внешними
ресурсами, включая данные в форматах JSON, XML и обычный текст. Эти
возможности особенно важны при создании игровых уровней, конфигураций
объектов или сценариев, хранящихся в отдельных файлах, что делает проект
более гибким и масштабируемым. Основным компонентом для работы с
загрузкой данных является Loader
(this.load) внутри сцен Phaser.
JSON (JavaScript Object Notation) — один из самых распространённых
форматов для хранения структурированных данных. В Phaser его загрузка
осуществляется через метод load.json.
Пример загрузки JSON:
class GameScene extends Phaser.Scene {
constructor() {
super({ key: 'GameScene' });
}
preload() {
this.load.json('levelData', 'assets/levels/level1.json');
}
create() {
const levelData = this.cache.json.get('levelData');
console.log(levelData);
}
}
Пояснения:
this.load.json('ключ', 'путь') — загружает JSON-файл и
сохраняет его в кэш Loader под указанным ключом.this.cache.json.get('ключ') — возвращает объект JSON
после успешной загрузки.Работа с динамическими JSON: Если требуется загрузка
данных на лету, можно использовать
this.load.once('complete', callback) и
this.load.start(). Это полезно для подгрузки уровней по
мере прохождения игры.
this.load.json('level2', 'assets/levels/level2.json');
this.load.once('complete', () => {
const level2Data = this.cache.json.get('level2');
console.log(level2Data);
});
this.load.start();
XML часто используется для конфигураций и описания сложной иерархии
объектов. В Phaser для работы с XML используется метод
load.xml.
Пример загрузки XML:
preload() {
this.load.xml('config', 'assets/config/gameConfig.xml');
}
create() {
const configXML = this.cache.xml.get('config');
console.log(configXML);
const playerSettings = configXML.getElementsByTagName('player')[0];
console.log(playerSettings.getAttribute('speed'));
}
Особенности работы с XML:
this.load.xml('ключ', 'путь') — загружает XML-файл в
кэш.this.cache.xml.get('ключ') — возвращает объект
XMLDocument.getElementsByTagName, getAttribute,
querySelectorAll.Текстовые файлы полезны для хранения сценариев, диалогов, инструкций
или любых данных в произвольной форме. Phaser поддерживает их через
метод load.text.
Пример загрузки текста:
preload() {
this.load.text('story', 'assets/texts/intro.txt');
}
create() {
const storyText = this.cache.text.get('story');
console.log(storyText);
}
Ключевые моменты:
this.load.text('ключ', 'путь') — загружает текстовый
файл в кэш.this.cache.text.get('ключ') — возвращает содержимое
файла в виде строки.progress и
filecomplete.this.load.on('progress', (value) => {
console.log(`Прогресс загрузки: ${Math.round(value * 100)}%`);
});
this.load.on('filecomplete', (key) => {
console.log(`Файл ${key} загружен`);
});
JSON, XML и текстовые файлы можно комбинировать с графикой и анимациями. Например, JSON может хранить пути к спрайтам и их позиции, XML — паттерны движения врагов, а текст — диалоги. Это позволяет создавать динамические сцены, где контент легко меняется без изменения исходного кода игры.
Загрузка данных через Phaser делает игру более модульной и расширяемой, позволяя хранить конфигурации, уровни и сценарии отдельно от логики, а также управлять ресурсами эффективно и удобно.