Colisiones
Quieres saber cuándo un objeto toca a otro: el disparo al enemigo, el jugador a la moneda, el jugador a la pared.
La forma más simple es registrar, en el onSpawn, qué hacer cuando se toquen:
#include <brasa/brasa.hpp>using namespace brasa;
class Coin : public Entity {public: void onSpawn() override { onCollide<Player>([this](Player& player) { destroy(); // el jugador tomó la moneda }); }};BRASA_ENTITY(Coin);Cómo funciona
Sección titulada «Cómo funciona»- Cada sprite tiene una caja de colisión, que ajustas en el editor de sprite. Dos objetos chocan cuando las cajas se superponen.
onCollide<Player>(...)registra una lambda que Brasa llama en cada paso en que este objeto esté tocando unPlayer. ElPlayerque lo tocó llega como parámetro.- Los objetos sin sprite no tienen caja, así que no chocan.
Variaciones
Sección titulada «Variaciones»Preguntar antes de avanzar. collidesAt<T>(x, y) dice si el objeto tocaría un T si estuviera en otra posición:
if (!collidesAt<Wall>(x + 2, y)) x += 2; // solo avanza si no hay paredObtener a quien está ahí. findAt<T>(x, y) devuelve la instancia encontrada, o nullptr:
if (Enemy* enemy = findAt<Enemy>(x, y + 1)) enemy->destroy(); // pisó al enemigoParedes sólidas. Marca Sólido en el Inspector del objeto de la pared. Después, placeFree(x, y) dice si la posición está libre de sólidos, y moveAndStop(dx, dy) avanza hasta tocar uno:
moveAndStop(); // avanza por hspeed/vspeed y se detiene en la paredMira también
Sección titulada «Mira también»- Colisión: todas las funciones.
- 4. Enemigos, en el tutorial.
