gohud

Opacità — il gioco dietro il pannello

← Temi

Popup, finestre di dialogo, sheet, schede, pannelli HUD, avvisi e snackbar disegnano la propria faccia all'80% di opacità. Il combattimento prosegue dietro una richiesta di conferma; la mappa si vede sotto lo sheet dell'inventario. In un gioco questa non è decorazione — è ciò che tiene il giocatore orientato. Un pannello del tutto opaco cancella il punto in cui si trovava nell'istante stesso in cui si apre una finestra.

Si assottiglia solo la faccia. Testo, icone, pulsanti, badge e slot rapidi restano nitidi, e con loro bordi e ombre. Un pannello traslucido si legge come vetro solo finché il suo contorno è netto; sfuma il contorno e non capisci più dove finisce il pannello. Sfuma il contenuto e l'interfaccia non si legge affatto — quella non è una finestra trasparente, è un bug. Per questo il valore non viene mai applicato tramite modulate.a.

Cinque livelli, dal più specifico

OrdineDoveUnitàPortata
l'argomento in quella chiamata — surface.alpha, GoStyle.card(…, alpha)rapporto 0.0–1.0una sola finestra
GoConfig.container_alpha_overrides[kind]rapporto 0.0–1.0un tipo di pannello, in tutto il progetto
GoConfig.metric_overrides[<kind>_alpha]percentualeprogetti che tengono tutte le misure in un unico posto
GoConfig.container_alpharapporto 0.0–1.0tutti i pannelli in una volta sola
il GoHud/constants/<kind>_alpha del temapercentualequel che decide l'aspetto — la fonte di verità

Se non ne è impostato nessuno il valore è 100, quindi in un tema più vecchio non cambia nulla.

L'opacità è un rapporto ovunque — tranne che nel tema. Ogni campo e ogni argomento alpha vuole 0.0–1.0, le stesse unità di Color.a e modulate.a, e un valore negativo significa "non impostato". L'unica eccezione sono le costanti del tema, perché una costante di Theme non può contenere un float: quelle e il canale che le sovrascrive (metric_overrides, che ne condivide i nomi e il tipo intero) si scrivono come 80. Nient'altro.
# Una sola finestra — una richiesta di conferma che non deve nascondere il combattimento dietro di sé
surface.alpha = 0.6
sheet.alpha = 0.7
dialogs.alpha = 0.9                          # anche i campi @export sono rapporti
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)

# Per tipo — tieni l'HUD quasi opaco, perché il suo testo sta direttamente sopra il mondo
GoUi.config.container_alpha_overrides = {
    GoTheme.BOX_PANEL: 0.7,                   # finestre di dialogo e sheet possono respirare
    GoTheme.BOX_HUD: 0.95,
}
GoUi.refresh()                               # ridisegna i widget già aperti

# Tutto il progetto — un mondo affollato rivuole i suoi pannelli opachi
GoUi.config.container_alpha = 1.0
GoUi.refresh()

GoUi.surface_alpha(GoTheme.BOX_PANEL)        # il rapporto risolto, ad es. 0.8

Che cosa segue il valore e che cosa no

Lo segue — i contenitoriLo ignora — le cose che premi, e i contrassegni
GoSurface (l'unico guscio dietro finestre di dialogo, sheet e menu a tendina) · GoSheet · GoDialogs · GoDrawer · GoPopover · GoNotice · GoSnackbar · GoPromptCard · GoCoachMark · GoConsole ogni pulsante · GoSlot (slot rapidi) · GoBadge · controlli segmentati · celle di scelta · chip · dischi e avatar
GoStyle.card() · hud_panel() · overlay_panel() · alert() · plate() · edge_card_panel() · style_notice_panel() · floating() · box() · surface() tutto il testo e tutte le icone

Un pulsante il cui stato è slavato non dice più che cos'è, e un badge esiste per rendere leggibili due caratteri — nessuno dei due è un contenitore, quindi nessuno dei due segue il valore.

I menu popup restano opachi (popup_alpha 100). Il motore può ospitare un PopupMenu in una Window propria, e lì il sistema operativo non lo compone con il gioco: la traslucenza viene fuori nera anziché trasparente. Abbassalo solo nei progetti che incorporano le proprie sottofinestre (gui_embed_subwindows).

Tre dettagli che vengono da schermi veri

Anche le facce personalizzate sfumano — ed è la parte che si rompe in silenzio

Il pannello dagli angoli tagliati (GoStyleBoxCut) e la cornice forgiata (GoStyleBoxMedieval) non sono StyleBoxFlat; si disegnano da sé. Metti l'opacità solo nel ramo flat e questi temi la ignorano in silenzio mentre ogni test basato sui valori continua a passare. Entrambe sfumano il proprio sfondo e tengono bagliore, rivetti, incisione agli angoli e bisellature a piena intensità — e la grana e il bisello della faccia medievale sono sempre stati proporzionali all'alpha del loro sfondo, quindi si assottigliano insieme al pannello.

Ed è questo il punto più generale: bg_color.a == 0.8 è un numero. Il mondo si vede attraverso e il testo resta leggibile è il requisito. gohud verifica il primo nella sua suite headless e il secondo disegnando pannelli sopra strisce diagonali su un monitor virtuale (tests/gohud_alpha_shot.gd) — sulla faccia flat, su quella tagliata e su quella forgiata, sia nel tema scuro sia in quello chiaro.