Pular para o conteúdo
Baixar

Animar um sprite

Você quer controlar a animação de um objeto: mais rápida, parada num quadro, ou fazer algo quando ela termina.

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.

#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);
  • 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 e 0 para a animação.
  • Se o sprite não tem fps, o animSpeed conta em quadros por passo: 1 troca de quadro todo passo (60 por segundo), 0.25 a 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.

Parar num quadro:

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

Trocar 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 horizontal
angle = 45; // girado 45 graus (só no desenho, não na colisão)