В Phaser каждая сцена (Scene) является самостоятельным
контейнером для логики игры, графики и звуков. Сцены позволяют
организовывать код, разделяя разные уровни, меню, экраны загрузки и
игровые режимы. Ключевой элемент управления сценами — уникальный
идентификатор сцены, называемый ключом
(key).
Ключ сцены — это строка, которая используется при добавлении, запуске, переключении или удалении сцены. Он позволяет движку точно идентифицировать, с какой сценой работать в конкретный момент времени. Например, при создании новой сцены в конструкторе Phaser:
const config = {
type: Phaser.AUTO,
width: 800,
height: 600,
scene: [
{ key: 'MainMenu', preload: preloadMain, create: createMain },
{ key: 'Level1', preload: preloadLevel1, create: createLevel1 }
]
};
const game = new Phaser.Game(config);
Здесь 'MainMenu' и 'Level1' — это
ключи, через которые можно управлять сценами.
Phaser требует, чтобы ключи сцен были уникальными в пределах экземпляра игры. Попытка добавить сцену с уже существующим ключом приведёт к конфликту, и поведение может быть непредсказуемым.
Уникальность ключа обеспечивает:
scene.start(), scene.stop() и
scene.switch().Пример конфликта ключей:
game.scene.add('Level1', LevelScene1);
game.scene.add('Level1', LevelScene2); // Ошибка: ключ 'Level1' уже используется
1.
scene.add(key, sceneClass, autoStart) Добавляет
новую сцену в менеджер сцен.
key — уникальный идентификатор.sceneClass — класс или объект сцены.autoStart — булево значение, запускается ли сцена
автоматически после добавления.game.scene.add('PauseMenu', PauseScene, false);
2. scene.start(key) Запускает сцену по
ключу, автоматически останавливая текущую активную сцену, если это
необходимо.
3. scene.stop(key) Останавливает
указанную сцену, освобождая её ресурсы.
4. scene.switch(fromKey, toKey) Меняет
текущую активную сцену на другую, используя их ключи.
game.scene.switch('Level1', 'Level2');
'MainMenu',
'Settings', 'LevelBoss'.'Level:1',
'Level:2', 'UI:PauseMenu'. Это облегчает поиск
и поддержку сцен.Перед запуском сцены можно проверить, добавлена ли она в менеджер:
if (!game.scene.getScene('Level3')) {
game.scene.add('Level3', LevelScene3);
}
game.scene.start('Level3');
Такой подход предотвращает ошибки при динамическом создании сцен на лету.
Использование уникальных ключей гарантирует, что управление сценами будет предсказуемым и легко расширяемым в больших игровых проектах на Phaser.