Fenêtres surgissantes, boîtes de dialogue, feuilles, cartes, panneaux de HUD, alertes et snackbars dessinent leur face à 80 % d'opacité. Le combat continue derrière une demande de confirmation ; la carte se voit sous une feuille d'inventaire. Dans un jeu, ce n'est pas de la décoration — c'est ce qui garde le joueur orienté. Un panneau entièrement opaque efface l'endroit où il se tenait dès qu'une fenêtre s'ouvre.
modulate.a.
Cinq couches, la plus précise en premier
| Ordre | Où | Unité | Portée |
|---|---|---|---|
| ① | l'argument passé à cet appel — surface.alpha, GoStyle.card(…, alpha) | ratio 0.0–1.0 | une seule fenêtre |
| ② | GoConfig.container_alpha_overrides[kind] | ratio 0.0–1.0 | un type de panneau, dans tout le projet |
| ③ | GoConfig.metric_overrides[<kind>_alpha] | pourcentage | les projets qui gardent toutes les mesures au même endroit |
| ④ | GoConfig.container_alpha | ratio 0.0–1.0 | tous les panneaux d'un coup |
| ⑤ | le GoHud/constants/<kind>_alpha du thème | pourcentage | ce que décide l'apparence — la source de vérité |
Si aucune n'est définie, la valeur vaut 100 : rien ne change pour un thème plus ancien.
alpha prend 0.0–1.0, les mêmes unités que Color.a et modulate.a, et une
valeur négative signifie « non définie ». La seule exception, ce sont les constantes du thème, car une
constante Theme ne peut pas contenir un flottant : celles-ci et le canal qui les remplace
(metric_overrides, qui partage les noms et le type entier du thème) s'écrivent
80. Rien d'autre.
# Une seule fenêtre — une confirmation qui ne doit pas masquer le combat derrière elle
surface.alpha = 0.6
sheet.alpha = 0.7
dialogs.alpha = 0.9 # les champs @export sont des ratios eux aussi
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)
# Par type — gardez le HUD presque opaque, car son texte se pose à même le monde
GoUi.config.container_alpha_overrides = {
GoTheme.BOX_PANEL: 0.7, # les dialogues et les feuilles peuvent respirer
GoTheme.BOX_HUD: 0.95,
}
GoUi.refresh() # redessine les widgets déjà ouverts
# Tout le projet — un monde chargé veut des panneaux redevenus opaques
GoUi.config.container_alpha = 1.0
GoUi.refresh()
GoUi.surface_alpha(GoTheme.BOX_PANEL) # le ratio résolu, par ex. 0.8
Ce qui suit la valeur, et ce qui ne la suit pas
| La suit — les conteneurs | L'ignore — ce sur quoi on appuie, et les marqueurs |
|---|---|
GoSurface (la coque unique derrière les dialogues, les feuilles et les menus déroulants) · GoSheet · GoDialogs · GoDrawer · GoPopover · GoNotice · GoSnackbar · GoPromptCard · GoCoachMark · GoConsole |
tous les boutons · GoSlot (emplacements rapides) · GoBadge · les contrôles segmentés · les cellules de choix · les puces · les disques et les avatars |
GoStyle.card() · hud_panel() · overlay_panel() · alert() · plate() · edge_card_panel() · style_notice_panel() · floating() · box() · surface() |
tout le texte et toutes les icônes |
Un bouton dont l'état est délavé ne dit plus ce qu'il est, et un badge existe pour rendre deux caractères lisibles — ni l'un ni l'autre n'est un conteneur, donc ni l'un ni l'autre ne suit la valeur.
popup_alpha 100). Le moteur peut héberger un
PopupMenu dans sa propre Window, et là le système ne le compose pas avec le
jeu : la translucidité sort en noir au lieu de laisser voir au travers. Ne l'abaissez que dans les projets qui
intègrent leurs sous-fenêtres (gui_embed_subwindows).
Trois détails qui viennent d'écrans réels
-
La valeur multiplie, elle ne remplace pas. La face du HUD est déjà à 0,92 d'alpha par défaut :
hud_alpha80 aboutit donc à 0,736 — un thème qui a délibérément rendu une face translucide garde cette décision. Le revers : appliquez-la deux fois et le panneau s'efface deux fois. C'est pourquoi l'alpha n'est multiplié qu'à un seul endroit (GoSkin.surface_box()) et que toutes les autres fonctions de face transmettent l'argument au lieu d'estomper leur propre résultat. -
Une couleur que vous avez passée est la couleur que vous obtenez.
GoStyle.plate(…, fill)conserve un remplissage explicite tel quel :Color(ink, 0.14)énonce déjà son alpha, et y multiplier l'opacité du panneau amputerait deux fois l'intention de l'appelant.GoStyle.floating(…, opaque = true)ignore la valeur pour une raison du même ordre — remplir la face de façon opaque est toute la raison d'être de ce drapeau. -
Les panneaux que gohud n'a pas construits suivent la même règle.
GoStyle.fade_panel(node)— après que le nœud est dans l'arbre, pour qu'il lise le thème dont il hérite. C'est idempotent : la face d'origine est mémorisée et chaque appel recalcule à partir d'elle, si bien que des redessins répétés ne s'accumulent jamais. Après un changement de thème,GoStyle.forget_face(node)efface cette mémoire pour que l'appel suivant reprenne la nouvelle face.
Les faces personnalisées s'estompent aussi — et c'est la part qui casse en silence
Le panneau à coins coupés (GoStyleBoxCut) et le cadre forgé
(GoStyleBoxMedieval) ne sont pas des StyleBoxFlat ; ils se dessinent eux-mêmes. Mettez
l'opacité seulement dans la branche plate et ces thèmes l'ignorent sans bruit alors que tous les tests portant sur des
valeurs passent encore. Les deux estompent leur fond et gardent le halo, les rivets, la gravure d'angle et les reflets
biseautés à pleine intensité — et le grain et le reflet biseauté de la face médiévale ont toujours été proportionnels à
l'alpha de son fond : ils s'affinent donc en même temps que le panneau.
Ce qui mène au point plus large : bg_color.a == 0.8 est un nombre. Le monde se voit au travers et le
texte reste lisible est l'exigence. gohud vérifie le nombre dans sa suite headless et l'exigence en dessinant des
panneaux par-dessus des rayures diagonales sur un moniteur virtuel
(tests/gohud_alpha_shot.gd) — sur la face plate, la face coupée et la face forgée, dans le thème sombre
comme dans le thème clair.