Popups, diálogos, folhas, cartões, painéis de HUD, alertas e snackbars desenham sua face com 80% de opacidade. A luta continua atrás de um diálogo de confirmação; o mapa aparece sob uma folha de inventário. Em um jogo isso não é enfeite — é o que mantém o jogador orientado. Um painel totalmente sólido apaga onde ele estava no instante em que uma janela abre.
modulate.a.
Cinco camadas, da mais específica para a mais geral
| Ordem | Onde | Unidade | Alcance |
|---|---|---|---|
| ① | o argumento naquela chamada — surface.alpha, GoStyle.card(…, alpha) | razão 0.0–1.0 | uma janela |
| ② | GoConfig.container_alpha_overrides[kind] | razão 0.0–1.0 | um tipo de painel, em todo o projeto |
| ③ | GoConfig.metric_overrides[<kind>_alpha] | porcentagem | projetos que mantêm cada medida em um só lugar |
| ④ | GoConfig.container_alpha | razão 0.0–1.0 | todos os painéis de uma vez |
| ⑤ | o GoHud/constants/<kind>_alpha do tema | porcentagem | o que o visual decide — a fonte da verdade |
Sem nenhuma delas definida o valor é 100, então nada muda em um tema mais antigo.
alpha recebe 0.0–1.0, as mesmas unidades de Color.a e modulate.a,
e um valor negativo significa "não definido". A única exceção são as constantes do tema, porque uma
constante de Theme não guarda um float: elas e o canal que as sobrescreve
(metric_overrides, que compartilha os nomes e o tipo inteiro do tema) são escritas como
80. Nada mais é.
# Só uma janela — um diálogo de confirmação que não pode esconder a luta atrás dele
surface.alpha = 0.6
sheet.alpha = 0.7
dialogs.alpha = 0.9 # campos @export também são razões
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 — mantenha o HUD quase sólido, porque o texto dele fica direto sobre o mundo
GoUi.config.container_alpha_overrides = {
GoTheme.BOX_PANEL: 0.7, # diálogos e folhas podem respirar
GoTheme.BOX_HUD: 0.95,
}
GoUi.refresh() # redesenha os widgets que já estão abertos
# O projeto inteiro — um mundo carregado quer os painéis sólidos de novo
GoUi.config.container_alpha = 1.0
GoUi.refresh()
GoUi.surface_alpha(GoTheme.BOX_PANEL) # a razão resolvida, p. ex. 0.8
O que segue o valor, e o que não segue
| Segue — contêineres | Ignora — o que se pressiona, e os marcadores |
|---|---|
GoSurface (a casca única atrás de diálogos, folhas e listas suspensas) · GoSheet · GoDialogs · GoDrawer · GoPopover · GoNotice · GoSnackbar · GoPromptCard · GoCoachMark · GoConsole |
todo botão · GoSlot (slots rápidos) · GoBadge · controles segmentados · células de escolha · chips · discos e avatares |
GoStyle.card() · hud_panel() · overlay_panel() · alert() · plate() · edge_card_panel() · style_notice_panel() · floating() · box() · surface() |
todo texto e todo ícone |
Um botão com o estado lavado deixa de dizer o que é, e um badge existe para deixar dois caracteres legíveis — nenhum dos dois é um contêiner, então nenhum dos dois segue o valor.
popup_alpha 100). A engine pode hospedar um
PopupMenu em uma Window própria, e ali o sistema não o compõe com o jogo: a
translucidez sai preta em vez de transparente. Baixe o valor só em projetos que embutem suas subjanelas
(gui_embed_subwindows).
Três detalhes que vieram de telas reais
-
O valor multiplica, não substitui. A face padrão do HUD já tem alfa 0.92, então
hud_alpha80 chega a 0.736 — um tema que deliberadamente deixou uma face translúcida mantém essa decisão. O outro lado: aplique duas vezes e o painel esmaece duas vezes, e é por isso que o alfa é multiplicado em exatamente um lugar (GoSkin.surface_box()) e toda outra função de face repassa o argumento em vez de esmaecer o próprio resultado. -
Uma cor que você passou é a cor que você recebe.
GoStyle.plate(…, fill)mantém um preenchimento explícito exatamente como foi dado:Color(ink, 0.14)já declara seu alfa, e multiplicar a opacidade do painel nele cortaria duas vezes a intenção de quem chamou.GoStyle.floating(…, opaque = true)ignora o valor pelo mesmo tipo de motivo — preencher a face sólida é toda a finalidade dessa flag. -
Painéis que o gohud não construiu seguem a mesma regra.
GoStyle.fade_panel(node)— depois que o nó está na árvore, para que leia o tema que herda. É idempotente: a face original fica registrada e cada chamada recalcula a partir dela, então redesenhos repetidos nunca se acumulam. Depois de trocar de tema,GoStyle.forget_face(node)descarta essa memória para que a próxima chamada pegue a face nova.
Faces personalizadas também esmaecem — e é aí que quebra em silêncio
O painel de cantos cortados (GoStyleBoxCut) e a moldura forjada
(GoStyleBoxMedieval) não são StyleBoxFlat; elas se desenham sozinhas. Ponha a
opacidade só no ramo flat e esses temas a ignoram caladamente enquanto todo teste baseado em valor continua
passando. As duas esmaecem o fundo e mantêm brilho, rebites, gravação nos cantos e biséis com força total —
e a textura e o bisel da face medieval sempre foram proporcionais ao alfa do fundo dela, então afinam junto
com o painel.
O que leva ao ponto maior: bg_color.a == 0.8 é um número. O mundo aparece através e o
texto continua legível é o requisito. O gohud verifica o primeiro na suíte headless e o segundo
desenhando painéis sobre listras diagonais em um monitor virtual
(tests/gohud_alpha_shot.gd) — na face flat, na cortada e na forjada, tanto no tema escuro
quanto no claro.