Ir al contenido
Descargar

Interfaz

Las interfaces se montan en la pestaña de interfaz del editor. En el código, una interfaz y sus elementos se indican por el nombre:

Ui::Element loja = Ui::get("Loja");
loja["Moedas"].setText("Moedas: 12");
loja["Fechar"].onClick(this, [] { Ui::hide("Loja"); });
loja.show();

Ui::Element es solo una dirección: es ligera de copiar y de guardar, y cada llamada busca el elemento de nuevo. Un nombre que no existe da un error en la Salida (una vez) y la llamada no hace nada.

Función Qué hace Ejemplo
Ui::Element Ui::get(std::string_view ui) La interfaz con ese nombre. Ui::Element hud = Ui::get("Hud");
void Ui::show(std::string_view ui) Muestra la interfaz, por encima de las que ya están en pantalla. Ui::show("Pausa");
void Ui::hide(std::string_view ui) Oculta la interfaz. Lo que el código cambió en ella sigue valiendo. Ui::hide("Pausa");
bool Ui::visible(std::string_view ui) true si la interfaz está en pantalla. if (Ui::visible("Loja")) ...
void Ui::reset(std::string_view ui) Devuelve la interfaz a como está en el editor y quita los onClick. Ui::reset("Loja");
bool Ui::mouseOver() true si el mouse está encima de un botón o de un panel de la interfaz. if (!Ui::mouseOver()) atirar = true;

Los métodos de Ui::Element. Los que empiezan con set se pueden encadenar: botao.setText("Comprado").setEnabled(false);

Función Qué hace Ejemplo
Element operator[](std::string_view name) Un elemento de dentro, por el nombre: primero los hijos directos, después los de dentro de ellos. hud["Moedas"]
bool exists() true si la interfaz o el elemento existe. if (loja["Item3"].exists()) ...
setText(std::string_view text) e text() El texto de un Texto o de un Botão. hud["Moedas"].setText("12");
setValue(float value) e value() Cuánto está llena una Barra, de 0 a 1. hud["Vida"].setValue(0.5f);
setVisible(bool visible), show(), hide() e visible() Muestra u oculta la interfaz entera o un elemento (con lo que tiene dentro). hud["Chave"].show();
setEnabled(bool enabled) e enabled() Botón: desactivado, queda apagado y no responde. botao.setEnabled(moedas >= 10);
setSprite(std::string_view sprite, int frame = 0) e setFrame(int frame) Cambia el sprite de una Imagem (o el fondo de un Painel o Botão) y el frame. linha["Icone"].setSprite("espada");
setColor(Color color) El color principal: el fondo del Painel y del Botão, la parte llena de la Barra, las letras del Texto. hud["Vida"].setColor(colors::red);
setTextColor(Color color) e setBorderColor(Color color) El color de las letras y el del borde. botao.setTextColor(colors::yellow);
setFont(std::string_view font, int size = 0) e setTextSize(int size) La fuente (una fuente del proyecto; "" es la integrada) y el tamaño en píxeles. titulo.setFont("Titulos", 24);
setPosition(float x, float y) e setSize(float width, float height) La posición (desde el ancla) y el tamaño, en píxeles del juego. hud["Seta"].setPosition(10, 40);
Element clone(std::string_view name) Copia el elemento (con lo que tiene dentro) al mismo panel, al final de la lista, visible. Con un nombre que ya existe, rehace la copia. modelo.clone("Item0");
void remove() Quita el elemento de la interfaz. loja["Itens"]["Item0"].remove();
onClick(const Entity* owner, std::function<void()> callback) Ejecuta callback cuando se pulsa el botón. Con owner (pasa this), el registro desaparece cuando la instancia se destruye. botao.onClick(this, [this] { restart(); });
setScroll(float pixels) y scroll() Cuánto está desplazada la lista de un Panel con Rolar (desplazar), en píxeles (0 = al principio). La rueda del mouse ya la desplaza sola. lista.setScroll(0);
onMouseEnter(const Entity* owner, std::function<void()> callback) y onMouseLeave(...) Ejecuta callback cuando el mouse entra en el elemento y cuando sale de él. linha.onMouseEnter(this, [linha] { linha.setColor(colors::yellow); });
Función Qué hace Ejemplo
void setPaused(bool paused) Pausa o reanuda el juego. En pausa, las instancias no ejecutan temporizadores, onUpdate, movimiento ni colisiones. setPaused(true);
bool paused() true si el juego está en pausa. if (paused()) ...
void onPausedUpdate() Evento de las instancias: una vez por paso mientras el juego está en pausa, en lugar del onUpdate. void onPausedUpdate() override;
  • Cada interfaz existe una sola vez mientras el juego corre. Ocultar y mostrar no deshace lo que el código cambió; para eso, Ui::reset.
  • Las interfaces marcadas en Interfaces, en el Inspector de la room, se abren con ella y se cierran al salir. Las que muestra el código quedan hasta que el código las oculte.
  • Con el mouse encima de un botón o de un panel con fondo, mousePressed, mouseHeld y mouseReleased devuelven false al juego.
  • El mouse vale para los botones de todas las interfaces visibles; lo que está delante tapa lo de atrás. El teclado recorre los botones de la interfaz de delante, con las acciones cima, baixo, esquerda, direita y confirmar.
  • Cambiar de room (o reiniciar) quita la pausa.
  • onClick sin owner también existe, y vale hasta un Ui::reset. Es mejor pasar this.

Mira HUD y menú de pausa y Tienda con lista de ítems.