Phaser — это мощная библиотека для создания 2D-игр на JavaScript, где ключевую роль играют игровые объекты, или Game Objects. Они представляют собой визуальные и интерактивные элементы сцены: спрайты, текст, группы, контейнеры, частицы и т.д. Для эффективного использования возможностей Phaser важно понимать иерархию классов этих объектов и их взаимосвязи.
GameObjectВсе объекты наследуются от
Phaser.GameObjects.GameObject, который
обеспечивает базовую функциональность:
name, type.active и
visible.destroy(),
setActive(), setVisible().Пример создания базового объекта:
const obj = new Phaser.GameObjects.GameObject(scene, 'customObject');
obj.setActive(true);
obj.setVisible(true);
Image и
Sprite — ключевые визуальные объекты:
Image — статическая картинка с
возможностью позиционирования, масштабирования и поворота.Sprite — расширяет Image
и поддерживает анимации через anims и
управление фреймами.const sprite = scene.add.sprite(100, 100, 'player');
sprite.anims.play('run');
Ключевое отличие спрайта от изображения — возможность проигрывать последовательности фреймов, что делает его динамическим визуальным элементом.
Container)Phaser.GameObjects.Container позволяет
группировать несколько игровых объектов в единый блок. Контейнеры
полезны для:
const container = scene.add.container(200, 200);
container.add([sprite, someText]);
container.setScale(1.5);
Изменение позиции контейнера автоматически влияет на все дочерние объекты.
Group) и физические группы
(Physics Group)Группы — это коллекции объектов с дополнительной логикой управления:
Group — простая коллекция, позволяет
массово изменять свойства объектов.Physics.Arcade.Group — расширяет
обычную группу поддержкой физики: столкновения, скорости,
ускорения.const enemies = scene.physics.add.group({
key: 'enemy',
repeat: 5,
setXY: { x: 50, y: 50, stepX: 70 }
});
Особенность: объекты в группах могут автоматически создаваться и уничтожаться, что оптимизирует производительность.
Particles) и
эффектыParticleEmitterManager и
ParticleEmitter используются для создания
визуальных эффектов (огонь, дым, искры):
ParticleEmitterManager управляет коллекцией
эмиттеров.ParticleEmitter настраивает свойства частиц: скорость,
направление, время жизни, цвет.const particles = scene.add.particles('spark');
const emitter = particles.createEmitter({
speed: 100,
lifespan: 500,
quantity: 5
});
Частицы не требуют сложной иерархии объектов, но могут быть добавлены в контейнеры для синхронного управления с другими элементами сцены.
Text и BitmapText)Text — стандартный текст с
возможностью изменения стиля, шрифта, цвета.BitmapText — текст на основе
битмап-шрифта, быстрее рендерится при большом объеме текста.const scoreText = scene.add.text(10, 10, 'Score: 0', { font: '20px Arial', fill: '#fff' });
Текстовые объекты могут быть добавлены в группы и контейнеры, наследуя их свойства видимости и позиционирования.
Layer)Слой — это объект, позволяющий управлять визуальным порядком объектов на сцене. Любой объект можно поместить в слой для контроля глубины:
const layer = scene.add.layer();
layer.add([sprite, scoreText]);
layer.setDepth(10);
Layer упрощает работу с порядком рендеринга без
необходимости вручную управлять z-index каждого
объекта.
Иерархия объектов в Phaser строится так:
GameObject
├── Image
├── Sprite
├── Text
├── BitmapText
├── Container
│ └── может содержать GameObject
├── Group
│ └── содержит GameObject
├── ParticleEmitterManager
│ └── ParticleEmitter
└── Layer
└── может содержать GameObject
Особенности:
GameObject.Не все объекты Phaser имеют физику по умолчанию. Физические свойства добавляются через:
scene.physics.add.sprite()scene.physics.add.group()Физические объекты наследуют методы управления движением,
столкновениями и ускорениями, сохраняя при этом свойства базового
GameObject.
depth.Иерархия классов игровых объектов в Phaser формирует основу для построения сложных и динамичных игровых сцен, где каждый объект выполняет свою роль, а взаимодействие между ними обеспечивается через наследование, контейнеры и группы.