Ir al contenido
Descargar

Animar un sprite

Quieres controlar la animación de un objeto: más rápida, detenida en un cuadro, o hacer algo cuando termina.

Corta la imagen en cuadros en el editor de sprite y, en la línea de tiempo, define el fps: cuántos cuadros por segundo tiene la animación. Por ejemplo, 12 para una explosión rápida o 4 para una llama lenta. La Prévia (vista previa) muestra la animación a esa velocidad.

Con el fps definido, todo objeto que usa ese sprite ya se anima a la velocidad correcta, sin ninguna línea de código.

#include <brasa/brasa.hpp>
using namespace brasa;
class Explosion : public Entity {
public:
void onSpawn() override {
animSpeed = 2; // el doble de rápido que el fps del sprite
}
void onAnimationEnd() override {
destroy(); // la explosión terminó: desaparece
}
};
BRASA_ENTITY(Explosion);
  • Si el sprite tiene fps, el animSpeed es un multiplicador: 1 (el valor por defecto) usa la velocidad del sprite, 2 es el doble, 0.5 es la mitad y 0 detiene la animación.
  • Si el sprite no tiene fps, el animSpeed cuenta en cuadros por paso: 1 cambia de cuadro en cada paso (60 por segundo), 0.25 cada 4 pasos (15 por segundo). Así es en el tutorial, que no define fps en los sprites.
  • frame es el cuadro actual, empezando en 0. Se puede leer y cambiar.
  • onAnimationEnd se llama cuando la animación completa una vuelta.

Detenerse en un cuadro:

animSpeed = 0;
frame = 1; // segundo cuadro

Cambiar de sprite, por ejemplo entre quieto (player_parado) y caminando (player_andando). Al cambiar, la animación vuelve sola al cuadro 0:

sprite = (hspeed != 0) ? "player_andando" : "player_parado";

Voltear el sprite hacia el otro lado y girarlo:

scaleX = -1; // reflejado en horizontal
angle = 45; // girado 45 grados (solo en el dibujo, no en la colisión)