En aquest tema aprendràs com gestionar les capes i la profunditat dels objectes dins del teu joc amb Phaser. Aquest concepte és fonamental per controlar l’ordre en què es mostren els elements a la pantalla, assegurant que, per exemple, el jugador no quedi ocult darrere del fons o que els efectes especials apareguin per sobre dels personatges.
Conceptes clau
- Capes (Layers): Són agrupacions d’objectes que es poden manipular conjuntament, útils per organitzar el contingut del joc (fons, personatges, HUD, etc.).
- Profunditat (Depth): Determina l’ordre de renderització dels objectes. Un objecte amb més profunditat es dibuixa per sobre d’un amb menys.
- Z-Index: En Phaser, la profunditat funciona de manera similar al z-index en CSS.
- Per què utilitzar capes i profunditat?
- Organització: Permet separar lògica i visuals (fons, jugadors, enemics, efectes, HUD).
- Control visual: Assegura que els elements importants siguin visibles en tot moment.
- Facilitat de gestió: Pots moure, ocultar o modificar grups d’objectes fàcilment.
- Gestió de la profunditat amb
setDepth()
setDepth()
Phaser permet establir la profunditat de qualsevol objecte visual amb el mètode .setDepth(valor)
.
Exemple bàsic
// Afegim dos sprites: un fons i un jugador const background = this.add.image(400, 300, 'background'); const player = this.add.sprite(400, 300, 'player'); // Assegurem que el jugador aparegui per sobre del fons background.setDepth(0); // Profunditat més baixa player.setDepth(1); // Profunditat més alta
Explicació:
- El fons té profunditat 0, el jugador 1. El jugador es dibuixa per sobre del fons.
- Ús de capes amb
Container
i Layer
Container
i Layer
Phaser ofereix dues formes d’agrupació:
Estructura | Descripció | Ús principal |
---|---|---|
Container | Agrupa objectes per moure’ls, escalar-los o girar-los junts | Personatges, objectes units |
Layer | Agrupa objectes per controlar la profunditat i l’ordre de renderització | Fons, efectes, HUD |
Exemple amb Layer
// Creem una capa per al HUD const hudLayer = this.add.layer(); // Afegim un text a la capa HUD const scoreText = this.add.text(16, 16, 'Punts: 0', { fontSize: '32px', fill: '#fff' }); hudLayer.add(scoreText); // Assegurem que el HUD estigui sempre al davant hudLayer.setDepth(10);
Explicació:
- Tot el que afegeixis a
hudLayer
tindrà la profunditat de la capa, apareixent per sobre d’altres elements.
- Ordre de renderització i canvis dinàmics
Pots canviar la profunditat d’un objecte en qualsevol moment del joc.
// Suposem que el jugador agafa un power-up i volem que el power-up aparegui per sobre powerUp.setDepth(player.depth + 1);
Consell:
- Utilitza valors de profunditat clars i consistents (per exemple: 0=fons, 1=personatges, 10=HUD).
- Exercicis pràctics
Exercici 1: Ordena els elements
Enunciat:
Crea tres imatges: fons, jugador i núvol. Fes que el núvol aparegui entre el fons i el jugador.
Solució:
const background = this.add.image(400, 300, 'background').setDepth(0); const cloud = this.add.image(400, 200, 'cloud').setDepth(1); const player = this.add.sprite(400, 300, 'player').setDepth(2);
Retroalimentació:
- Un error comú és no establir la profunditat, fent que l’ordre depengui de l’ordre d’afegit. Sempre especifica la profunditat per evitar confusions visuals.
Exercici 2: Capa de HUD persistent
Enunciat:
Crea una capa per al HUD i afegeix-hi un marcador de puntuació. Assegura’t que el HUD sempre sigui visible per sobre de la resta d’elements.
Solució:
const hudLayer = this.add.layer(); const scoreText = this.add.text(16, 16, 'Punts: 0', { fontSize: '32px', fill: '#fff' }); hudLayer.add(scoreText); hudLayer.setDepth(10);
Consell:
- Si afegeixes més elements al HUD, afegeix-los sempre a la mateixa capa per mantenir l’ordre.
- Taula resum de profunditat
Profunditat | Element típic | Exemple de valor |
---|---|---|
0 | Fons (background) | 0 |
1-5 | Personatges, enemics | 1, 2, 3... |
10+ | HUD, menús | 10, 20 |
Resum
- La gestió de capes i profunditat és essencial per controlar l’ordre visual dels elements del joc.
- Utilitza
.setDepth()
per establir la profunditat dels objectes. - Agrupa elements relacionats amb
Layer
oContainer
per facilitar la gestió. - Mantingues una convenció clara de valors de profunditat per evitar errors visuals.
- Practica amb exercicis per consolidar aquests conceptes.
Pròxim pas:
Ara que domines la gestió de capes i profunditat, estàs preparat per afegir àudio i crear una interfície d’usuari atractiva al 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