In this section, you’ll learn how to efficiently manage multiple sprites in your Phaser games using groups. Sprite groups are essential for handling collections of similar game objects, such as enemies, bullets, or collectibles. By the end of this lesson, you’ll understand how to create, manage, and interact with groups, making your game code cleaner and more scalable.
- What Are Sprite Groups?
A group in Phaser is a container for game objects (usually sprites) that allows you to:
- Organize similar objects together.
- Apply actions to all group members at once (e.g., move, destroy).
- Efficiently manage large numbers of objects (e.g., bullets, enemies).
- Handle collisions and overlaps collectively.
Types of Groups in Phaser:
| Group Type | Description |
|--------------------|-----------------------------------------------------------------------------|
| Phaser.GameObjects.Group
| Basic group for managing game objects. No physics by default. |
| Phaser.Physics.Arcade.Group
| Group with Arcade Physics enabled for all members. |
| Phaser.Physics.Arcade.StaticGroup
| Group for static (immovable) physics objects. |
- Creating and Using Groups
2.1 Creating a Basic Group
You can create a group in your scene’s create
method:
Explanation:
this.add.group()
creates a new group attached to the current scene.- You can now add sprites to this group.
2.2 Creating a Physics Group
If you want all group members to have physics:
Explanation:
this.physics.add.group()
creates a group where all members have Arcade Physics enabled.
- Adding Sprites to Groups
3.1 Adding Sprites Manually
3.2 Creating Multiple Sprites at Once
Phaser allows you to create many sprites in a group with a configuration object:
this.stars = this.physics.add.group({ key: 'star', repeat: 10, // creates 11 stars (1 original + 10 repeats) setXY: { x: 12, y: 0, stepX: 70 } });
Explanation:
key
: The texture key for the sprite.repeat
: Number of additional sprites to create.setXY
: Sets the initial position and spacing for each sprite.
- Managing Group Members
4.1 Iterating Over Group Members
You can perform actions on all group members using children.iterate
:
this.stars.children.iterate(function (star) { star.setBounceY(Phaser.Math.FloatBetween(0.4, 0.8)); });
Explanation:
children.iterate
runs a function for each member of the group.
4.2 Destroying All Group Members
- The first
true
removes the children from the group. - The second
true
destroys the game objects.
- Practical Example: Creating and Managing Enemies
Let’s create a group of enemies that move down the screen.
class MyGameScene extends Phaser.Scene { create() { // Create a group of enemies this.enemies = this.physics.add.group({ key: 'enemy', repeat: 4, setXY: { x: 100, y: 50, stepX: 120 } }); } update() { // Move all enemies down this.enemies.children.iterate(function (enemy) { enemy.y += 2; // Reset position if enemy goes off screen if (enemy.y > 600) { enemy.y = 0; } }); } }
Explanation:
- Creates 5 enemies spaced horizontally.
- In the
update
loop, all enemies move down. - If an enemy moves off the bottom, it reappears at the top.
- Exercise: Collectible Stars
Task:
Create a group of 8 collectible stars. When the player overlaps with a star, the star should disappear.
Starter Code
class CollectStarsScene extends Phaser.Scene { create() { // TODO: Create a group of 8 stars, spaced horizontally // TODO: Add player sprite // TODO: Enable overlap between player and stars } collectStar(player, star) { // TODO: Make the star disappear } }
Solution
class CollectStarsScene extends Phaser.Scene { create() { // Create a group of 8 stars this.stars = this.physics.add.group({ key: 'star', repeat: 7, setXY: { x: 50, y: 100, stepX: 100 } }); // Add player sprite this.player = this.physics.add.sprite(100, 300, 'player'); // Enable overlap between player and stars this.physics.add.overlap(this.player, this.stars, this.collectStar, null, this); } collectStar(player, star) { star.disableBody(true, true); // Hides and deactivates the star } }
Explanation:
this.physics.add.group
creates 8 stars.this.physics.add.overlap
checks for overlap between the player and any star.star.disableBody(true, true)
removes the star from the game.
Common Mistakes & Tips:
- Forgetting to enable physics on both the player and the group will prevent overlaps from working.
- Not using
disableBody
: If you usedestroy()
, you can’t easily respawn the star later. - Tip: Use groups for any set of similar objects you want to manage together (e.g., bullets, coins, enemies).
- Summary
- Groups help you manage collections of sprites efficiently.
- Use basic groups for non-physics objects and physics groups for objects that interact with the game world.
- You can add, remove, and iterate over group members easily.
- Groups are essential for scalable, organized game code, especially as your game grows in complexity.
Next: You’ll learn how to add interactivity and physics to your game objects, making your games more dynamic and engaging!
Phaser - Game Development with JavaScript
Module 1: Introduction to Game Development and Phaser
- What is Game Development?
- Overview of Phaser
- Setting Up Your Development Environment
- Your First Phaser Project
Module 2: Phaser Basics
- Understanding the Game Loop
- Game Configuration and Scenes
- Loading and Displaying Images
- Working with Text
- Handling Input (Keyboard and Mouse)
Module 3: Sprites and Animation
Module 4: Game Physics and Interactivity
- Introduction to Physics in Phaser
- Enabling Physics on Sprites
- Collisions and Overlaps
- Interactive Objects and Events