Ir al contenido
Descargar

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);
  • 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 un Player. El Player que lo tocó llega como parámetro.
  • Los objetos sin sprite no tienen caja, así que no chocan.

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 pared

Obtener 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 enemigo

Paredes 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 pared