Animar um sprite
Você quer controlar a animação de um objeto: mais rápida, parada num quadro, ou fazer algo quando ela termina.
A velocidade fica no sprite
Seção intitulada “A velocidade fica no sprite”Fatie a imagem em quadros no editor de sprite e, na linha do tempo, defina o fps: quantos quadros por segundo a animação tem. Por exemplo, 12 para uma explosão rápida ou 4 para uma chama lenta. A Prévia mostra a animação nessa velocidade.
Com o fps definido, todo objeto que usa esse sprite já anima na velocidade certa, sem nenhuma linha de código.
No código: animSpeed multiplica
Seção intitulada “No código: animSpeed multiplica”#include <brasa/brasa.hpp>using namespace brasa;
class Explosion : public Entity {public: void onSpawn() override { animSpeed = 2; // duas vezes mais rápido que o fps do sprite } void onAnimationEnd() override { destroy(); // a explosão terminou: some }};BRASA_ENTITY(Explosion);Como funciona
Seção intitulada “Como funciona”- Se o sprite tem fps, o
animSpeedé um multiplicador:1(o padrão) usa a velocidade do sprite,2é o dobro,0.5é a metade e0para a animação. - Se o sprite não tem fps, o
animSpeedconta em quadros por passo:1troca de quadro todo passo (60 por segundo),0.25a cada 4 passos (15 por segundo). É assim no tutorial, que não define fps nos sprites. frameé o quadro atual, começando em 0. Dá para ler e mudar.onAnimationEndé chamado quando a animação completa uma volta.
Variações
Seção intitulada “Variações”Parar num quadro:
animSpeed = 0;frame = 1; // segundo quadroTrocar de sprite, por exemplo entre parado e andando. Ao trocar, a animação volta sozinha para o quadro 0:
sprite = (hspeed != 0) ? "player_andando" : "player_parado";Virar o sprite para o outro lado e girar:
scaleX = -1; // espelhado na horizontalangle = 45; // girado 45 graus (só no desenho, não na colisão)