Спливні вікна, діалоги, аркуші, картки, панелі HUD, сповіщення та снекбари малюють свій лицьовий бік із непрозорістю 80%. Бій триває за діалогом підтвердження; карта проглядає з-під аркуша інвентаря. У грі це не оздоба — це те, що тримає гравця зорієнтованим. Повністю щільна панель стирає місце, де він стояв, тієї ж миті, коли відкривається вікно.
modulate.a.
П'ять шарів, найконкретніший перший
| Порядок | Де | Одиниця | Охоплення |
|---|---|---|---|
| ① | аргумент у самому виклику — surface.alpha, GoStyle.card(…, alpha) | частка 0.0–1.0 | одне вікно |
| ② | GoConfig.container_alpha_overrides[kind] | частка 0.0–1.0 | один вид панелі, на весь проєкт |
| ③ | GoConfig.metric_overrides[<kind>_alpha] | відсоток | проєкти, які тримають усі розміри в одному місці |
| ④ | GoConfig.container_alpha | частка 0.0–1.0 | усі панелі відразу |
| ⑤ | GoHud/constants/<kind>_alpha у темі | відсоток | те, що вирішує образ, — джерело правди |
Якщо не задано жодного з них, значення дорівнює 100, тож у старішій темі не змінюється нічого.
alpha й кожен
аргумент беруть 0.0–1.0, ті самі одиниці, що Color.a та modulate.a, а
від'ємне значення означає «не задано». Єдиний виняток — константи теми, бо константа
Theme не вміє тримати дробове: їх і той канал, що їх заміщує
(metric_overrides, який поділяє з темою її назви та цілий тип), пишуть як
80. Більше ніде.
# Лише одне вікно — діалог підтвердження, який не має ховати бій за собою
surface.alpha = 0.6
sheet.alpha = 0.7
dialogs.alpha = 0.9 # поля @export теж частки
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)
# За видом — HUD лишаємо майже щільним, бо його текст лежить просто над світом
GoUi.config.container_alpha_overrides = {
GoTheme.BOX_PANEL: 0.7, # діалоги та аркуші можуть дихати
GoTheme.BOX_HUD: 0.95,
}
GoUi.refresh() # перемальовує вже відкриті віджети
# Весь проєкт — насичений світ хоче, щоб його панелі знову стали щільними
GoUi.config.container_alpha = 1.0
GoUi.refresh()
GoUi.surface_alpha(GoTheme.BOX_PANEL) # обчислена частка, напр. 0.8
Що йде за значенням, а що ні
| Іде за ним — контейнери | Ігнорує його — те, що натискають, і позначки |
|---|---|
GoSurface (єдина оболонка за діалогами, аркушами та випадними списками) · GoSheet · GoDialogs · GoDrawer · GoPopover · GoNotice · GoSnackbar · GoPromptCard · GoCoachMark · GoConsole |
кожна кнопка · GoSlot (швидкі слоти) · GoBadge · сегментовані контроли · комірки вибору · чипи · диски та аватари |
GoStyle.card() · hud_panel() · overlay_panel() · alert() · plate() · edge_card_panel() · style_notice_panel() · floating() · box() · surface() |
увесь текст та іконки |
Кнопка, чий стан вицвів, більше не каже, що вона таке, а бейдж існує, щоб два символи лишалися розбірливими, — жодне з них не контейнер, тож жодне за значенням і не йде.
popup_alpha 100). Рушій може тримати
PopupMenu у власному Window, а там ОС не змішує його з
грою: напівпрозорість виходить чорною, а не наскрізною. Знижуйте його лише в проєктах, які вбудовують свої
підвікна (gui_embed_subwindows).
Три подробиці, які взялися зі справжніх екранів
-
Значення множиться, а не заміщує. Типовий лицьовий бік HUD уже має альфу 0.92, тож
hud_alpha80 дає 0.736 — тема, яка навмисно зробила лице напівпрозорим, зберігає це рішення. Зворотний бік: застосуйте його двічі — і панель приглушиться двічі; саме тому альфу множать рівно в одному місці (GoSkin.surface_box()), а кожна інша функція лиця передає аргумент далі, замість приглушувати власний результат. -
Колір, який ви передали, — це колір, який ви дістанете.
GoStyle.plate(…, fill)тримає явну заливку рівно такою, як задано:Color(ink, 0.14)уже називає свою альфу, а домноження непрозорості панелі врізало б намір того, хто викликав, удруге.GoStyle.floating(…, opaque = true)ігнорує значення з тієї самої причини — залити лице щільно і є єдиним призначенням цього прапорця. -
Панелі, яких gohud не будував, дістають те саме правило.
GoStyle.fade_panel(node)— після того, як вузол уже в дереві, щоб він прочитав успадковану тему. Виклик ідемпотентний: початкове лице запам'ятовується, і кожен виклик перераховує від нього, тож повторні перемальовування ніколи не накладаються. Помінявши тему,GoStyle.forget_face(node)скидає цю пам'ять, і наступний виклик підхопить нове лице.
Власні лицьові боки теж приглушуються — і саме це ламається мовчки
Панель зі зрізаними кутами (GoStyleBoxCut) і кована рама
(GoStyleBoxMedieval) — не StyleBoxFlat; вони малюють себе самі. Покладіть
непрозорість лише в пласку гілку — і ці теми тихо її проігнорують, тоді як усі тести за значеннями далі
проходитимуть. Обидві приглушують своє тло й тримають сяйво, заклепки, кутове гравіювання та фаски на повній силі, —
а зернистість і фаска середньовічного лиця завжди були пропорційні альфі його тла, тож вони
тоншають разом із панеллю.
А ширша думка ось яка: bg_color.a == 0.8 — це число. Світ проглядає крізь панель, і
текст досі розбірливий — ось вимога. Перше gohud перевіряє у своєму безвіконному наборі тестів, а
друге — малюючи панелі поверх діагональних смуг на віртуальному моніторі
(tests/gohud_alpha_shot.gd): на пласкому, зрізаному та кованому лиці, і в темній
темі, і у світлій.