В Phaser Registry представляет собой глобальное хранилище данных, которое позволяет управлять переменными, доступными во всех сценах игры. Это мощный инструмент для передачи информации между различными частями приложения, управления состоянием игры и реализации глобальных настроек.
Registry создается автоматически вместе с экземпляром игры Phaser, и доступ к нему можно получить через объект сцены:
class MyScene extends Phaser.Scene {
create() {
// Получение доступа к Registry
const registry = this.registry;
// Добавление значения
registry.set('score', 0);
// Получение значения
let score = registry.get('score');
console.log(score); // 0
}
}
Ключевое свойство registry сцены
предоставляет интерфейс для добавления, удаления и отслеживания
изменений данных. Все данные хранятся в формате ключ-значение.
set(key, value) — сохраняет значение
по указанному ключу. Пример:this.registry.set('playerName', 'Alice');
get(key) — возвращает значение,
связанное с ключом. Пример:let name = this.registry.get('playerName'); // 'Alice'
has(key) — проверяет наличие ключа в
Registry, возвращает true или false.
Пример:if (this.registry.has('level')) {
console.log('Уровень задан');
}
delete(key) — удаляет ключ и связанное
с ним значение. Пример:this.registry.delete('tempData');
merge(object) — объединяет объект с
текущими данными Registry, добавляя новые ключи или обновляя
существующие. Пример:this.registry.merge({ lives: 3, difficulty: 'easy' });
values — возвращает объект всех данных
Registry. Используется для перебора всех элементов. Пример:console.log(this.registry.values);
Registry поддерживает систему событий, позволяющую отслеживать изменения данных. Это особенно полезно для обновления интерфейса или логики игры при изменении глобальных переменных.
changedata — вызывается при изменении
любого значения.this.registry.events.on('changedata', (parent, key, value) => {
console.log(`Ключ ${key} изменён на ${value}`);
});
changedata-key — вызывается при
изменении конкретного ключа.this.registry.events.on('changedata-score', (parent, value) => {
console.log(`Очки обновлены: ${value}`);
});
remove — событие удаления ключа.this.registry.events.on('remove', (parent, key) => {
console.log(`Ключ ${key} удалён`);
});
Registry идеально подходит для хранения информации, которая должна быть доступна во всех сценах. Например, текущий счет, уровень игрока или настройки игры.
class SceneA extends Phaser.Scene {
create() {
this.registry.set('score', 10);
this.scene.start('SceneB');
}
}
class SceneB extends Phaser.Scene {
create() {
let score = this.registry.get('score');
console.log(`Счет из SceneA: ${score}`); // 10
}
}
События Registry позволяют автоматически обновлять HUD или интерфейс при изменении данных.
class UIScene extends Phaser.Scene {
create() {
this.scoreText = this.add.text(10, 10, 'Score: 0');
this.registry.events.on('changedata-score', (parent, value) => {
this.scoreText.setText(`Score: ${value}`);
});
}
}
// Где-то в другой сцене
this.registry.set('score', 5); // UIScene автоматически обновит текст
Registry поддерживает установку начальных значений через объект при запуске игры:
const config = {
type: Phaser.AUTO,
width: 800,
height: 600,
scene: [SceneA, SceneB],
plugins: {
global: [{
key: 'Registry',
plugin: Phaser.Data.DataManager,
start: true
}]
}
};
const game = new Phaser.Game(config);
game.registry.merge({
score: 0,
lives: 3,
level: 1
});
Такой подход позволяет централизованно хранить настройки игры и использовать их во всех сценах без дублирования кода.
Registry является надежным инструментом для управления состоянием, обеспечивая чистый и модульный подход к обмену данными между сценами и элементами игры.