Els grups de sprites són una eina fonamental a Phaser per organitzar, gestionar i manipular múltiples sprites de manera eficient. Aquesta funcionalitat és especialment útil quan treballem amb molts objectes similars, com enemics, projectils o col·leccionables.
Conceptes clau
- Sprite: Un objecte gràfic que es pot moure, animar i interactuar dins del joc.
- Grup de sprites: Una col·lecció de sprites que es poden gestionar conjuntament.
- Gestió col·lectiva: Permet aplicar accions, propietats o comportaments a tots els membres del grup d’una sola vegada.
- Optimització: Facilita la gestió de memòria i rendiment quan es treballa amb molts objectes.
Per què utilitzar grups de sprites?
Situació | Avantatge d’usar grups |
---|---|
Molts enemics o objectes similars | Creació i gestió eficient |
Aplicar comportaments comuns | Codi més net i mantenible |
Col·lisions entre molts objectes | Detecció i gestió més fàcil |
Afegir o eliminar objectes dinàmicament | Simplifica la gestió de la memòria |
Creació d’un grup de sprites
A Phaser, pots crear un grup de sprites de diverses maneres. El més habitual és utilitzar this.physics.add.group()
si vols que els membres tinguin física, o this.add.group()
si no la necessiten.
Exemple bàsic: Crear un grup buit
Explicació:
Aquesta línia crea un grup anomenat enemics
que pot contenir sprites amb física. Inicialment, el grup està buit.
Exemple: Afegir sprites al grup
Explicació:
El mètode create(x, y, clau)
afegeix un nou sprite al grup a la posició (100, 200) utilitzant la imatge amb la clau 'enemicSprite'.
Exemple: Crear múltiples sprites automàticament
// Crear 10 enemics alineats horitzontalment enemics.createMultiple({ key: 'enemicSprite', repeat: 9, // 1 + 9 = 10 enemics setXY: { x: 100, y: 200, stepX: 70 } });
Explicació:
key
: clau de la imatge del sprite.repeat
: nombre d’elements addicionals (9 + 1 inicial = 10).setXY
: posició inicial i increment per a cada sprite (cada enemic estarà separat per 70 píxels en l’eix X).
Iterar i gestionar els membres d’un grup
Pots aplicar accions a tots els membres d’un grup fàcilment.
Exemple: Iterar sobre tots els membres
enemics.children.iterate(function(enemic) { enemic.setVelocityX(Phaser.Math.Between(-100, 100)); });
Explicació:
Aquesta funció recorre tots els enemics i els assigna una velocitat horitzontal aleatòria.
Exemple: Eliminar un sprite del grup
Explicació:
El primer paràmetre és el sprite a eliminar. El segon (true
) elimina el sprite del grup, i el tercer (true
) el destrueix completament de la memòria.
Col·lisions i grups
Els grups són molt útils per gestionar col·lisions massives.
Explicació:
Aquesta línia detecta col·lisions entre el jugador i qualsevol membre del grup enemics
. Quan es produeix una col·lisió, es crida la funció colisioJugadorEnemic
.
Exercicis pràctics
Exercici 1: Crear i gestionar un grup d’estrelles
Enunciat:
Crea un grup de 5 estrelles alineades verticalment. Fes que, quan el jugador toqui una estrella, aquesta desaparegui.
Pista:
Utilitza this.physics.add.group()
i la detecció de superposició (overlap
).
Solució
// Crear el grup d'estrelles const estrelles = this.physics.add.group({ key: 'estrella', repeat: 4, setXY: { x: 400, y: 100, stepY: 60 } }); // Funció per recollir una estrella function recollirEstrella(jugador, estrella) { estrella.disableBody(true, true); } // Detecció de superposició this.physics.add.overlap(jugador, estrelles, recollirEstrella, null, this);
Explicació:
- Es creen 5 estrelles (1 + 4 repeats) alineades verticalment.
- Quan el jugador toca una estrella, la funció
recollirEstrella
la desactiva i la fa invisible.
Exercici 2: Aplicar una acció a tots els membres d’un grup
Enunciat:
Fes que tots els enemics d’un grup saltin (velocitat Y negativa) quan el jugador prem la tecla espaiadora.
Solució
// Dins del mètode update if (this.input.keyboard.checkDown(this.input.keyboard.addKey('SPACE'), 250)) { enemics.children.iterate(function(enemic) { enemic.setVelocityY(-300); }); }
Explicació:
- Quan es prem la barra espaiadora, tots els enemics reben una velocitat vertical cap amunt.
Error comú:
Oblidar afegir física als sprites del grup farà que setVelocityY
no tingui efecte.
Consells addicionals
- Utilitza grups per a qualsevol col·lecció d’objectes similars que necessitin comportaments o gestió col·lectiva.
- Recorda eliminar o desactivar els membres del grup quan ja no siguin necessaris per optimitzar el rendiment.
- Pots crear subgrups o utilitzar etiquetes per diferenciar tipus d’objectes dins d’un mateix grup.
Resum
En aquesta secció has après:
- Què són els grups de sprites i per què són útils.
- Com crear, afegir i eliminar membres d’un grup.
- Com aplicar accions col·lectives i gestionar col·lisions.
- Exercicis pràctics per consolidar els coneixements.
Els grups de sprites són una eina potent per mantenir el teu codi organitzat i eficient, especialment en jocs amb molts objectes similars. Ara ja estàs preparat per aprofundir en la física i la interactivitat del teu joc!
Phaser - Desenvolupament de jocs amb JavaScript
Mòdul 1: Introducció al desenvolupament de jocs i Phaser
- Què és el desenvolupament de jocs?
- Visió general de Phaser
- Configuració del teu entorn de desenvolupament
- El teu primer projecte amb Phaser
Mòdul 2: Fonaments de Phaser
- Entendre el bucle del joc
- Configuració del joc i escenes
- Carregar i mostrar imatges
- Treballar amb text
- Gestió d’entrada (teclat i ratolí)
Mòdul 3: Sprites i animació
- Què són els sprites?
- Afegir i moure sprites
- Fonaments de l’animació de sprites
- Grups de sprites i gestió
Mòdul 4: Física i interactivitat en el joc
- Introducció a la física a Phaser
- Activar la física en els sprites
- Col·lisions i superposicions
- Objectes interactius i esdeveniments
Mòdul 5: Món del joc i càmera
Mòdul 6: Àudio i interfície d’usuari
Mòdul 7: Arquitectura del joc i gestió d’estats
Mòdul 8: Funcionalitats avançades de joc
- Efectes de partícules
- Tweens i animacions
- Timers i esdeveniments retardats
- IA i comportament dels enemics