Регистрация фабричных методов

Phaser предоставляет мощный и гибкий механизм для создания игровых объектов через фабричные методы. Фабричный метод — это функция, которая упрощает создание и инициализацию объекта, автоматически добавляя его в сцену и обеспечивая корректное управление его жизненным циклом. Такие методы используются для спрайтов, текстов, анимаций, частиц и других игровых сущностей.

Фабричные методы являются частью объекта this.add в сцене Phaser 3 и позволяют создавать объекты без необходимости вручную управлять добавлением их в сцену через scene.add.existing. Это значительно сокращает код и улучшает читаемость.


Создание спрайтов с помощью фабрики

const player = this.add.sprite(100, 200, 'playerTexture');

В этом примере this.add.sprite — фабричный метод, который создает спрайт с координатами (100, 200) и текстурой 'playerTexture'. Важные моменты:

  • Автоматическое добавление в сцену — объект сразу становится частью сцены и участвует в рендеринге.

  • Поддержка настроек — можно передавать дополнительные параметры, например, frame для указания фрейма анимации:

    const enemy = this.add.sprite(400, 300, 'enemyAtlas', 'idle_0');

Фабричные методы возвращают ссылку на объект, что позволяет сразу настраивать его свойства:

player.setScale(2).setDepth(5).setOrigin(0.5, 0.5);

Текст и графика через фабричные методы

Создание текста:

const scoreText = this.add.text(10, 10, 'Score: 0', {
    fontSize: '32px',
    fill: '#ffffff'
});
  • Текст создается с указанными координатами и стилем.
  • С помощью фабрики можно легко обновлять свойства текста без необходимости отдельной регистрации объекта в сцене.

Создание графических объектов:

const rectangle = this.add.rectangle(400, 300, 100, 50, 0xff0000);
rectangle.setStrokeStyle(2, 0x000000);
  • Фабричный метод this.add.rectangle создает фигуру и добавляет её в сцену.
  • Графические объекты поддерживают цепочку методов для стилизации и трансформаций.

Группы и контейнеры

Фабричные методы поддерживают создание групп объектов и контейнеров для упрощения управления множественными элементами.

Группы:

const stars = this.add.group({
    key: 'star',
    repeat: 11,
    setXY: { x: 12, y: 0, stepX: 70 }
});
  • key — текстура для спрайтов.
  • repeat — количество повторений.
  • setXY — начальные координаты и шаг смещения для каждого объекта.
  • Все объекты автоматически добавляются в группу и в сцену.

Контейнеры:

const container = this.add.container(400, 300);
const sprite = this.add.sprite(0, 0, 'player');
const text = this.add.text(0, -50, 'Player');
container.add([sprite, text]);
  • Контейнер служит родителем для нескольких объектов, позволяя трансформировать их как единое целое.
  • Фабрика упрощает создание и добавление объектов в контейнер.

Фабрики для частиц и анимаций

Частицы создаются с помощью фабричных методов через this.add.particles:

const particles = this.add.particles('spark');

particles.createEmitter({
    x: 400,
    y: 300,
    speed: { min: -100, max: 100 },
    lifespan: 2000,
    quantity: 4,
    scale: { start: 1, end: 0 },
});
  • Фабричный метод add.particles создает объект системы частиц и сразу добавляет его в сцену.
  • Эмиттеры создаются методом createEmitter, который автоматически связывает их с системой частиц.

Анимации создаются через фабрику анимаций сцены:

this.anims.create({
    key: 'walk',
    frames: this.anims.generateFrameNumbers('player', { start: 0, end: 5 }),
    frameRate: 10,
    repeat: -1
});
  • this.anims.generateFrameNumbers облегчает создание массивов кадров.
  • Анимация привязывается к объекту спрайта автоматически при вызове sprite.play('walk').

Расширение фабрик через плагины и кастомные методы

Phaser позволяет создавать собственные фабрики для пользовательских объектов. Это делается через Phaser.GameObjects.GameObjectFactory:

Phaser.GameObjects.GameObjectFactory.register('enemy', function(x, y, texture) {
    const sprite = new Phaser.GameObjects.Sprite(this.scene, x, y, texture);
    this.scene.add.existing(sprite);
    sprite.setInteractive();
    return sprite;
});
  • register добавляет новый метод к this.add.
  • Кастомные фабрики возвращают объект, уже добавленный в сцену.
  • Позволяет стандартизировать создание игровых объектов и включать дополнительные настройки по умолчанию.

Преимущества использования фабричных методов

  1. Упрощение кода — меньше boilerplate, объекты создаются и добавляются в сцену одним вызовом.
  2. Управление жизненным циклом — объекты автоматически интегрируются с рендерингом и событиями сцены.
  3. Цепочка методов — сразу доступны функции трансформации и стилизации.
  4. Расширяемость — возможность создавать собственные фабрики для уникальных игровых объектов.

Фабричные методы являются фундаментальной частью работы с Phaser, позволяя быстро и структурировано создавать игровые элементы без ручного управления каждой сущностью.