CAPITOLO 5.4

Sprite

Intermedio
~10 min
47 min

Lo sprite funziona come l'image ma supporta le animazioni. Necessita di uno spritesheet: un'unica immagine che contiene tutti i frame dell'animazione affiancati.

this._mySprite = this.add.sprite(x, y, "player");

In GameData.ts lo spritesheet si dichiara indicando le dimensioni di ogni singolo frame:

spritesheets: [
  {
    name: "player",
    path: "assets/images/player.png",
    width: 50,
    height: 70,
    frames: 8
  }
]

Creare un'animazione

const _animation: Phaser.Types.Animations.Animation = {
  key: "player-running",
  frames: this.anims.generateFrameNumbers("player", { frames: [0,1,2,3,4,5,6,7] }),
  frameRate: 10,
  yoyo: false,
  repeat: -1
};

this.anims.create(_animation);

// play con chiave stringa
this._mySprite.play("player-running");

// oppure con oggetto config — sovrascrive frameRate al volo
this._mySprite.play({ key: "player-running", frameRate: 24 });
AttributoDescrizione
keyNome univoco dell'animazione
framesArray degli indici di frame da usare
frameRateVelocità (frame al secondo)
yoyoSe true, la sequenza viene riprodotta anche al contrario
repeatNumero di ripetizioni; -1 = infinito

Gestire più animazioni

Per gestire più animazioni dello stesso sprite, dichiara un array di configurazioni prima del costruttore e creale in un ciclo nel create():

private _animations: Array<{
  key: string;
  frames: number[];
  frameRate: number;
  yoyo: boolean;
  repeat: number;
}> = [
  { key: "player-running", frames: [0,1,2,3,4,5,6,7], frameRate: 10, yoyo: false, repeat: -1 },
  { key: "player-idle",    frames: [8,9,10,11],        frameRate: 15, yoyo: false, repeat: -1 },
];
create() {
  this._animations.forEach(element => {
    const anim: Phaser.Types.Animations.Animation = {
      key: element.key,
      frames: this.anims.generateFrameNumbers("player", { frames: element.frames }),
      frameRate: element.frameRate,
      yoyo: element.yoyo,
      repeat: element.repeat,
    };
    this.anims.create(anim);
  });
}
Phaser Labs
Phaser LabsLIVE
Prova tutto dal vivo — centinaia di esempi interattivi
Phaser Labs raccoglie esempi funzionanti per ogni argomento del corso. Copia, modifica, sperimenta — direttamente nel browser.
Apri gli esempi della classe SPRITE
Sh4rk0

Lo Sprite è il momento in cui il gioco inizia a sembrare vivo. Un'immagine cammina, corre, salta — e tu hai scritto il codice che lo fa fare.

Il punto che confonde di più all'inizio: il rapporto tra spritesheet, frames e animazioni. Lo spritesheet è la striscia di disegni, i frames sono i numeri delle colonne, l'animazione è la sequenza che decidi tu. Una volta che questo schema ti entra in testa, tutto il resto viene da solo.

repeat: -1 è il tuo migliore amico per il personaggio principale — l'animazione non si ferma mai finché non glielo dici tu. frameRate: 10 è un buon punto di partenza per qualsiasi cosa. Poi lo aggiusti a occhio. 🎬