Disparar
Quieres que el jugador dispare cuando pulsa una tecla. El disparo es otro objeto, creado en el momento por el código.
Crea un objeto Bullet con el sprite del disparo y este código:
#include <brasa/brasa.hpp>using namespace brasa;
class Bullet : public Entity {public: void onSpawn() override { vspeed = -5.0f; } // sube 5 píxeles por paso void onUpdate() override { if (y < -8.0f) destroy(); // salió de la pantalla: desaparece }};BRASA_ENTITY(Bullet);Y en el objeto que dispara:
void onUpdate() override { if (pressed(Key::Space)) spawn<Bullet>(x, y, "Instancias");}Cómo funciona
Sección titulada «Cómo funciona»spawn<Bullet>(x, y, "Instancias")crea una instancia nueva deBulleten la posición dada. Aquí, en la posición de quien disparó. El tercer valor es la capa en la que entra el disparo:Instanciases la que toda room nueva ya tiene.- En el
onSpawndel disparo,vspeed = -5hace que suba solo: Brasa sumahspeed/vspeeda la posición en cada paso. - El disparo que sale de la pantalla se destruye, para no acumular objetos invisibles.
Variaciones
Sección titulada «Variaciones»Mantener para disparar en ráfaga, con una pausa entre los disparos:
// en la clase: bool canShoot_ = true;if (held(Key::Space) && canShoot_) { spawn<Bullet>(x, y, "Instancias"); canShoot_ = false; after(10, [this] { canShoot_ = true; }); // otra vez dentro de 10 pasos}Disparar en cualquier dirección. spawn devuelve el disparo creado, así que puedes cambiarle la velocidad. Vec2::fromAngle(fuerza, grados) convierte un ángulo en una velocidad (0 = derecha, 90 = arriba):
if (Bullet* bullet = spawn<Bullet>(x, y, "Instancias")) { const Vec2 v = Vec2::fromAngle(5.0f, angleTo(mouseX(), mouseY())); // en dirección al mouse bullet->hspeed = v.x; bullet->vspeed = v.y;}El onSpawn del disparo se ejecuta dentro del spawn, así que la velocidad que defines después es la que vale.
Mira también
Sección titulada «Mira también»- Instancias y Temporizadores.
- 3. Disparos, en el tutorial.
