Colisões
Você quer saber quando um objeto encosta em outro: o tiro no inimigo, o jogador na moeda, o jogador na parede.
A forma mais simples é registrar, no onSpawn, o que fazer quando encostar:
#include <brasa/brasa.hpp>using namespace brasa;
class Coin : public Entity {public: void onSpawn() override { onCollide<Player>([this](Player& player) { destroy(); // o jogador pegou a moeda }); }};BRASA_ENTITY(Coin);Como funciona
Seção intitulada “Como funciona”- Cada sprite tem uma caixa de colisão, que você ajusta no editor de sprite. Dois objetos colidem quando as caixas se sobrepõem.
onCollide<Player>(...)registra uma lambda que a Brasa chama a cada passo em que este objeto estiver encostado numPlayer. OPlayerque encostou chega como parâmetro.- Objetos sem sprite não têm caixa, então não colidem.
Variações
Seção intitulada “Variações”Perguntar antes de andar. collidesAt<T>(x, y) diz se o objeto encostaria num T se estivesse em outra posição:
if (!collidesAt<Wall>(x + 2, y)) x += 2; // só anda se não houver paredePegar quem está ali. findAt<T>(x, y) devolve a instância encontrada, ou nullptr:
if (Enemy* enemy = findAt<Enemy>(x, y + 1)) enemy->destroy(); // pisou no inimigoParedes sólidas. Marque Sólido no Inspetor do objeto da parede. Depois, placeFree(x, y) diz se a posição está livre de sólidos, e moveAndStop(dx, dy) anda até encostar:
moveAndStop(); // anda por hspeed/vspeed e para na paredeVeja também
Seção intitulada “Veja também”- Colisão: todas as funções.
- 4. Inimigos, no tutorial.
