Atirar
Você quer que o jogador atire quando aperta uma tecla. O tiro é outro objeto, criado na hora pelo código.
Crie um objeto Bullet com o sprite do tiro e este código:
#include <brasa/brasa.hpp>using namespace brasa;
class Bullet : public Entity {public: void onSpawn() override { vspeed = -5.0f; } // sobe 5 pixels por passo void onUpdate() override { if (y < -8.0f) destroy(); // saiu da tela: some }};BRASA_ENTITY(Bullet);E no objeto que atira:
void onUpdate() override { if (pressed(Key::Space)) spawn<Bullet>(x, y, "Instancias");}Como funciona
Seção intitulada “Como funciona”spawn<Bullet>(x, y, "Instancias")cria uma instância nova deBulletna posição dada. Aqui, na posição de quem atirou. O terceiro valor é a camada em que o tiro entra:Instanciasé a que toda room nova já tem.- No
onSpawndo tiro,vspeed = -5faz ele subir sozinho: a Brasa somahspeed/vspeedà posição a cada passo. - O tiro que sai da tela é destruído, para não acumular objetos invisíveis.
Variações
Seção intitulada “Variações”Segurar para atirar em rajada, com pausa entre os tiros:
// na classe: bool canShoot_ = true;if (held(Key::Space) && canShoot_) { spawn<Bullet>(x, y, "Instancias"); canShoot_ = false; after(10, [this] { canShoot_ = true; }); // de novo daqui a 10 passos}Atirar numa direção qualquer. spawn devolve o tiro criado, então dá para trocar a velocidade dele. Vec2::fromAngle(força, graus) transforma um ângulo numa velocidade (0 = direita, 90 = cima):
if (Bullet* bullet = spawn<Bullet>(x, y, "Instancias")) { const Vec2 v = Vec2::fromAngle(5.0f, angleTo(mouseX(), mouseY())); // na direção do mouse bullet->hspeed = v.x; bullet->vspeed = v.y;}O onSpawn do tiro roda dentro do spawn, então a velocidade que você define depois é a que vale.
Veja também
Seção intitulada “Veja também”- Instâncias e Temporizadores.
- 3. Tiros, no tutorial.
