Pular para o conteúdo
Baixar

HUD e menu de pausa

Você quer um placar que acompanha o jogo e uma tela de pausa com botões, sem calcular posição de texto no código.

  1. Em Recursos, + › Nova interface… e chame de Hud.
  2. Ponha um Texto chamado Moedas no canto de cima e uma Barra chamada Vida.
  3. Abra a room e, no Inspetor, marque Hud em Interfaces: ela passa a abrir junto com a room.

No código de um objeto da fase, escreva o que cada um mostra:

#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. Crie a interface Pausa: um Painel no centro com um Texto e três Botões (Continuar, Recomecar, Sair).
  2. Para escurecer o jogo atrás, ponha no fim da lista um Painel do tamanho da tela, preto com transparência.
  3. Em Configurações do projeto, crie a ação pausar (por exemplo, com a tecla Esc).

O código liga os botões e a 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") devolve a interface; os colchetes devolvem um elemento dela pelo nome que está no editor.
  • setPaused(true) para as instâncias: temporizadores, onUpdate, movimento e colisões. O desenho e a interface continuam.
  • Com o jogo pausado, cada instância recebe onPausedUpdate no lugar do onUpdate. É ali que se lê a tecla que tira a pausa.
  • O this no onClick diz de quem é o código: se a instância for destruída, o botão para de chamá-lo.
  • Os botões respondem ao mouse e ao teclado: as ações cima, baixo, esquerda e direita andam entre eles, e confirmar aperta.
  • O painel escuro prende o clique: com a pausa aberta, clicar não chega ao jogo.
  • Cada interface existe uma vez só. O que o código muda nela continua valendo depois de esconder e mostrar; Ui::reset("Hud") volta ao que está no editor.

O modelo Plataforma já vem com um Hud, uma Pausa e uma tela de Fim feitos assim. O modelo Zumbis vai além: um jogo de tiro em 1920 × 1080 com HUD, loja, pausa e fim de jogo.