Animar un sprite
Quieres controlar la animación de un objeto: más rápida, detenida en un cuadro, o hacer algo cuando termina.
La velocidad está en el sprite
Sección titulada «La velocidad está en el sprite»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.
En el código: animSpeed multiplica
Sección titulada «En el código: animSpeed multiplica»#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);Cómo funciona
Sección titulada «Cómo funciona»- Si el sprite tiene fps, el
animSpeedes un multiplicador:1(el valor por defecto) usa la velocidad del sprite,2es el doble,0.5es la mitad y0detiene la animación. - Si el sprite no tiene fps, el
animSpeedcuenta en cuadros por paso:1cambia de cuadro en cada paso (60 por segundo),0.25cada 4 pasos (15 por segundo). Así es en el tutorial, que no define fps en los sprites. framees el cuadro actual, empezando en 0. Se puede leer y cambiar.onAnimationEndse llama cuando la animación completa una vuelta.
Variaciones
Sección titulada «Variaciones»Detenerse en un cuadro:
animSpeed = 0;frame = 1; // segundo cuadroCambiar 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 horizontalangle = 45; // girado 45 grados (solo en el dibujo, no en la colisión)