Объект Game и глобальный доступ к нему

В библиотеке Phaser объект Game является центральным ядром игрового приложения. Он инкапсулирует все ключевые компоненты игры: рендеринг, сцены, обработку ввода и управление временем. Создание экземпляра Phaser.Game происходит один раз и обеспечивает глобальный доступ к основным возможностям движка.

const config = {
    type: Phaser.AUTO,
    width: 800,
    height: 600,
    scene: {
        preload: preload,
        create: create,
        update: update
    }
};

const game = new Phaser.Game(config);

Ключевой момент: объект Game создается один раз и далее служит точкой входа для работы со сценами, системами физики, аудио и графикой. Любые глобальные данные, требующие доступа из разных частей игры, можно хранить через его свойства.


Конфигурация объекта Game

Конфигурационный объект config позволяет задать основные параметры игры:

  • type — способ рендеринга (Phaser.AUTO, Phaser.CANVAS, Phaser.WEBGL). Phaser.AUTO автоматически выбирает оптимальный вариант.
  • width и height — размеры игрового холста в пикселях.
  • backgroundColor — цвет фона сцены (#000000 по умолчанию).
  • scene — объект или массив объектов сцен. Сцены могут содержать методы preload, create, update и кастомные методы.
  • physics — конфигурация систем физики, например arcade, matter или кастомные плагины.
  • input — управление обработкой ввода с клавиатуры, мыши и касаний.

Пример добавления системы физики:

const config = {
    type: Phaser.AUTO,
    width: 1024,
    height: 768,
    physics: {
        default: 'arcade',
        arcade: {
            gravity: { y: 300 },
            debug: true
        }
    },
    scene: [MainScene]
};

Глобальный доступ к объекту Game

После создания game становится глобальным объектом, через который можно получать доступ к различным системам Phaser. Например:

  • Сцены: game.scene позволяет управлять запуском, паузой и переключением сцен.
  • Таймеры и события: game.time предоставляет доступ к глобальному таймеру и планированию событий.
  • Физические системы: game.physics содержит все настроенные движки физики и их группы.
  • Рендеринг и камеры: game.cameras управляет камерами сцены, эффектами и зумом.

Пример переключения сцен:

game.scene.start('MenuScene');
game.scene.pause('GameScene');
game.scene.resume('GameScene');

Объект Game позволяет сохранять глобальные состояния и данные, например очки, параметры игрока или настройки уровня. Для этого часто используют собственные свойства:

game.global = {
    score: 0,
    playerLives: 3
};

Методы и свойства объекта Game

  1. game.scene — управление всеми сценами игры. Методы: add, start, stop, pause, resume.
  2. game.input — доступ к событиям ввода (keyboard, pointer). Позволяет отслеживать нажатия и движения мыши.
  3. game.events — глобальная система событий. Позволяет слушать события, например hidden, visible, resize.
  4. game.loop — объект основного игрового цикла. Можно изменять частоту кадров или приостанавливать цикл.
  5. game.renderer — управление низкоуровневым рендерингом, WebGL или Canvas.

Пример глобального события:

game.events.on('hidden', () => {
    console.log('Игра свернута');
});

Использование объекта Game для межсценного взаимодействия

Объект Game обеспечивает обмен данными между сценами без использования внешних глобальных переменных. Например:

class SceneA extends Phaser.Scene {
    create() {
        game.global.playerName = 'Alice';
        this.scene.start('SceneB');
    }
}

class SceneB extends Phaser.Scene {
    create() {
        console.log(game.global.playerName); // 'Alice'
    }
}

Такой подход позволяет поддерживать структурированное хранение глобальных данных, избегая загрязнения глобального пространства имен браузера.


Практические советы

  • Создавать один экземпляр Game на страницу. Несколько объектов Game могут конфликтовать между собой.
  • Использовать свойства game для глобальных игровых параметров, а не внешние переменные.
  • Для больших проектов рекомендуется делегировать управление сценами через game.scene, чтобы централизованно контролировать жизненный цикл игры.
  • Обращение к системам физики и аудио через game упрощает масштабирование проекта и добавление новых модулей.

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