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