Ir al contenido
Descargar

HUD y menú de pausa

Quieres un marcador que acompañe al juego y una pantalla de pausa con botones, sin calcular posiciones de texto en el código.

  1. En Recursos, + › Nova interface… y llámala Hud.
  2. Pon un Texto llamado Moedas en la esquina de arriba y una Barra llamada Vida.
  3. Abre la room y, en el Inspector, marca Hud en Interfaces: pasa a abrirse junto con la room.

En el código de un objeto del nivel, escribe lo que muestra cada uno:

#include "Fase.hpp"
#include "Moeda.hpp"
#include <format>
using namespace brasa;
void Fase::onUpdate() {
Ui::Element hud = Ui::get("Hud");
hud["Moedas"].setText(std::format("Moedas: {}", moedas));
hud["Vida"].setValue(vida / 100.0f);
}
  1. Crea la interfaz Pausa: un Painel en el centro con un Texto y tres Botões (Continuar, Recomecar, Sair).
  2. Para oscurecer el juego de atrás, pon al final de la lista un panel del tamaño de la pantalla, negro con transparencia.
  3. En Configuración del proyecto, crea la acción pausar (por ejemplo, con la tecla Esc).

El código conecta los botones y la tecla:

void Fase::onSpawn() {
Ui::Element pausa = Ui::get("Pausa");
pausa.hide();
pausa["Continuar"].onClick(this, [] {
setPaused(false);
Ui::hide("Pausa");
});
pausa["Recomecar"].onClick(this, [this] { restart(); });
pausa["Sair"].onClick(this, [] { quit(); });
}
void Fase::onUpdate() {
if (pressed("pausar")) {
setPaused(true);
Ui::show("Pausa");
}
}
void Fase::onPausedUpdate() {
if (pressed("pausar")) {
setPaused(false);
Ui::hide("Pausa");
}
}
  • Ui::get("Hud") devuelve la interfaz; los corchetes devuelven un elemento suyo por el nombre que tiene en el editor.
  • setPaused(true) detiene las instancias: temporizadores, onUpdate, movimiento y colisiones. El dibujo y la interfaz siguen.
  • Con el juego en pausa, cada instancia recibe onPausedUpdate en lugar del onUpdate. Ahí se lee la tecla que quita la pausa.
  • El this en el onClick dice de quién es el código: si la instancia se destruye, el botón deja de llamarlo.
  • Los botones responden al mouse y al teclado: las acciones cima, baixo, esquerda y direita pasan de uno a otro, y confirmar pulsa.
  • El panel oscuro retiene el clic: con la pausa abierta, hacer clic no llega al juego.
  • Cada interfaz existe una sola vez. Lo que el código cambia en ella sigue valiendo después de ocultarla y mostrarla; Ui::reset("Hud") vuelve a lo que está en el editor.

La plantilla Plataforma ya trae un Hud, una Pausa y una pantalla de Fim hechos así. La plantilla Zumbis va más allá: un juego de disparos en 1920 × 1080 con HUD, tienda, pausa y fin de juego.