Los emergentes, los diálogos, las hojas, las tarjetas, los paneles del HUD, las alertas y los snackbars dibujan su cara al 80 % de opacidad. El combate sigue detrás de un diálogo de confirmación; el mapa se ve bajo una hoja de inventario. En un juego esto no es decoración — es lo que mantiene orientado al jugador. Un panel totalmente sólido borra el lugar donde el jugador estaba en el instante en que se abre una ventana.
modulate.a.
Cinco capas, la más específica primero
| Orden | Dónde | Unidad | Alcance |
|---|---|---|---|
| ① | el argumento en esa llamada — surface.alpha, GoStyle.card(…, alpha) | proporción 0.0–1.0 | una ventana |
| ② | GoConfig.container_alpha_overrides[kind] | proporción 0.0–1.0 | un tipo de panel, en todo el proyecto |
| ③ | GoConfig.metric_overrides[<kind>_alpha] | porcentaje | proyectos que guardan todas sus medidas en un solo lugar |
| ④ | GoConfig.container_alpha | proporción 0.0–1.0 | todos los paneles a la vez |
| ⑤ | el GoHud/constants/<kind>_alpha del tema | porcentaje | lo que decide el aspecto — la fuente de verdad |
Sin ninguna de ellas definida el valor es 100, así que nada cambia en un tema anterior.
alpha toman 0.0–1.0, las mismas unidades que Color.a y modulate.a,
y un valor negativo significa "sin definir". La única excepción son las constantes del tema, porque una
constante de Theme no puede guardar un decimal: esas y el canal que las sobrescribe
(metric_overrides, que comparte los nombres y el tipo entero del tema) se escriben como
80. Nada más.
# Solo una ventana — un diálogo de confirmación que no debe ocultar el combate que hay detrás
surface.alpha = 0.6
sheet.alpha = 0.7
dialogs.alpha = 0.9 # los campos @export también son proporciones
drawer.alpha = 0.7
GoPopover.open(slot, body, {"alpha": 0.9})
var glass := GoStyle.card(Color.TRANSPARENT, -1.0, -1.0, -1.0, 0.5)
# Por tipo — mantén el HUD casi sólido, porque su texto se apoya directamente sobre el mundo
GoUi.config.container_alpha_overrides = {
GoTheme.BOX_PANEL: 0.7, # los diálogos y las hojas pueden respirar
GoTheme.BOX_HUD: 0.95,
}
GoUi.refresh() # redibuja los widgets que ya están abiertos
# Todo el proyecto — un mundo recargado quiere sus paneles sólidos otra vez
GoUi.config.container_alpha = 1.0
GoUi.refresh()
GoUi.surface_alpha(GoTheme.BOX_PANEL) # la proporción resuelta, p. ej. 0.8
Qué sigue el valor y qué no
| Lo sigue — los contenedores | Lo ignora — lo que se pulsa, y los marcadores |
|---|---|
GoSurface (el único armazón detrás de los diálogos, las hojas y los desplegables) · GoSheet · GoDialogs · GoDrawer · GoPopover · GoNotice · GoSnackbar · GoPromptCard · GoCoachMark · GoConsole |
todos los botones · GoSlot (ranuras rápidas) · GoBadge · controles segmentados · celdas de elección · chips · discos y avatares |
GoStyle.card() · hud_panel() · overlay_panel() · alert() · plate() · edge_card_panel() · style_notice_panel() · floating() · box() · surface() |
todo el texto y los iconos |
Un botón con el estado deslavado ya no dice lo que es, y una insignia existe para hacer legibles dos caracteres — ninguno es un contenedor, así que ninguno sigue el valor.
popup_alpha 100). El motor puede alojar un
PopupMenu en su propia Window, y ahí el sistema operativo no lo compone con el
juego: la translucidez sale negra en vez de transparente. Bájalo solo en proyectos que incrustan sus
subventanas (gui_embed_subwindows).
Tres detalles que vienen de pantallas reales
-
El valor multiplica, no sustituye. La cara predeterminada del HUD ya tiene alfa 0.92, así que
hud_alpha80 acaba en 0.736 — un tema que hizo translúcida una cara a propósito conserva esa decisión. La otra cara: aplícalo dos veces y el panel se atenúa dos veces, y por eso el alfa se multiplica en exactamente un lugar (GoSkin.surface_box()) y todas las demás funciones de cara pasan el argumento en vez de atenuar su propio resultado. -
El color que pasas es el color que obtienes.
GoStyle.plate(…, fill)conserva un relleno explícito tal cual se dio:Color(ink, 0.14)ya declara su alfa, y multiplicarle la opacidad del panel recortaría dos veces la intención de quien llama.GoStyle.floating(…, opaque = true)ignora el valor por la misma clase de razón — rellenar la cara de forma sólida es todo el propósito de esa bandera. -
Los paneles que no construyó gohud reciben la misma regla.
GoStyle.fade_panel(node)— después de que el nodo esté en el árbol, para que lea el tema que hereda. Es idempotente: la cara original queda registrada y cada llamada recalcula a partir de ella, así que los redibujados repetidos nunca se acumulan. Tras cambiar de tema,GoStyle.forget_face(node)borra esa memoria para que la siguiente llamada tome la cara nueva.
Las caras personalizadas también se atenúan — y esa es la parte que se rompe en silencio
El panel de esquinas cortadas (GoStyleBoxCut) y el marco forjado
(GoStyleBoxMedieval) no son StyleBoxFlat; se dibujan solos. Pon la
opacidad únicamente en la rama plana y estos temas la ignoran sin decir nada mientras todas las pruebas
basadas en valores siguen pasando. Ambos atenúan su fondo y mantienen a plena intensidad el resplandor, los remaches,
el grabado de las esquinas y los biseles — y el grano y el bisel de la cara medieval siempre fueron proporcionales
al alfa de su fondo, así que se aclaran junto con el panel.
Que es el punto más amplio: bg_color.a == 0.8 es un número. El mundo se ve a través y
el texto sigue siendo legible es el requisito. gohud comprueba lo primero en su conjunto de pruebas sin
ventana y lo segundo dibujando paneles sobre franjas diagonales en un monitor virtual
(tests/gohud_alpha_shot.gd) — sobre la cara plana, la cortada y la forjada, en el tema
oscuro y en el claro.