Popup, hộp thoại, bảng trượt, thẻ, tấm nền HUD, alert và snackbar vẽ mặt của mình ở mức đục 80%. Trận đánh vẫn tiếp diễn phía sau một hộp thoại xác nhận; bản đồ vẫn hiện dưới bảng trượt túi đồ. Trong một trò chơi, đây không phải chuyện trang trí — đó là thứ giữ cho người chơi biết mình đang ở đâu. Một tấm nền đặc kín xóa sạch chỗ họ vừa đứng, ngay khoảnh khắc một cửa sổ mở ra.
modulate.a.
Năm tầng, cụ thể nhất đi trước
| Thứ tự | Ở đâu | Đơn vị | Tầm với |
|---|---|---|---|
| ① | đối số ngay tại lệnh gọi đó — surface.alpha, GoStyle.card(…, alpha) | tỉ lệ 0.0–1.0 | một cửa sổ |
| ② | GoConfig.container_alpha_overrides[kind] | tỉ lệ 0.0–1.0 | một loại tấm nền, trên toàn dự án |
| ③ | GoConfig.metric_overrides[<kind>_alpha] | phần trăm | những dự án gom mọi số đo về một chỗ |
| ④ | GoConfig.container_alpha | tỉ lệ 0.0–1.0 | mọi tấm nền cùng một lúc |
| ⑤ | GoHud/constants/<kind>_alpha của theme | phần trăm | điều mà diện mạo quyết định — nguồn chân lý |
Không đặt cái nào cả thì giá trị là 100, nên một theme cũ không thay đổi gì hết.
alpha đều nhận
0.0–1.0, cùng đơn vị với Color.a và modulate.a, còn giá trị âm nghĩa là "chưa
đặt". Ngoại lệ duy nhất là các hằng số của theme, bởi một hằng số Theme không giữ được số
thực: những thứ đó và kênh ghi đè lên chúng (metric_overrides, vốn dùng chung tên gọi và
kiểu số nguyên với theme) được viết là 80. Ngoài ra không còn chỗ nào nữa.
# Chỉ một cửa sổ — hộp thoại xác nhận không được che mất trận đánh phía sau nó
surface.alpha = 0.6
sheet.alpha = 0.7
dialogs.alpha = 0.9 # trường @export cũng là tỉ lệ
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)
# Theo từng loại — giữ HUD gần như đặc, vì chữ của nó nằm thẳng trên thế giới
GoUi.config.container_alpha_overrides = {
GoTheme.BOX_PANEL: 0.7, # hộp thoại và bảng trượt có thể thoáng hơn
GoTheme.BOX_HUD: 0.95,
}
GoUi.refresh() # vẽ lại các widget đang mở
# Cả dự án — một thế giới quá rối mắt thì muốn tấm nền đặc trở lại
GoUi.config.container_alpha = 1.0
GoUi.refresh()
GoUi.surface_alpha(GoTheme.BOX_PANEL) # tỉ lệ đã tính xong, ví dụ 0.8
Cái gì đi theo giá trị này, cái gì thì không
| Đi theo — các container | Bỏ qua — những thứ bạn bấm, và những thứ đánh dấu |
|---|---|
GoSurface (lớp vỏ duy nhất nằm sau hộp thoại, bảng trượt và danh sách thả xuống) · GoSheet · GoDialogs · GoDrawer · GoPopover · GoNotice · GoSnackbar · GoPromptCard · GoCoachMark · GoConsole |
mọi nút · GoSlot (ô nhanh) · GoBadge · control chia đoạn · ô lựa chọn · chip · vòng tròn và ảnh đại diện |
GoStyle.card() · hud_panel() · overlay_panel() · alert() · plate() · edge_card_panel() · style_notice_panel() · floating() · box() · surface() |
toàn bộ chữ và biểu tượng |
Một cái nút bị nhạt mất trạng thái thì không còn nói lên nó đang là gì, còn badge sinh ra chính là để hai ký tự đọc được — cả hai đều không phải container, nên cả hai đều không đi theo giá trị này.
popup_alpha 100). Engine có thể đặt một PopupMenu
vào Window riêng của nó, và ở đó hệ điều hành không ghép nó chung với game: phần trong mờ
hiện ra màu đen chứ không nhìn xuyên qua được. Chỉ hạ giá trị này ở những dự án có nhúng cửa sổ con vào
bên trong (gui_embed_subwindows).
Ba chi tiết đến từ màn hình thật
-
Giá trị này nhân vào, chứ không thay thế. Mặt HUD mặc định vốn đã ở alpha 0.92, nên
hud_alpha80 rơi xuống 0.736 — một theme cố ý làm mặt nền trong mờ thì vẫn giữ được quyết định đó. Mặt trái: áp hai lần thì tấm nền nhạt đi hai lần, vì vậy alpha chỉ được nhân ở đúng một chỗ (GoSkin.surface_box()) còn mọi hàm dựng mặt nền khác đều chuyển tiếp đối số thay vì làm nhạt kết quả của chính mình. -
Màu bạn truyền vào là màu bạn nhận lại.
GoStyle.plate(…, fill)giữ nguyên phần tô đã nêu rõ, đúng như được đưa:Color(ink, 0.14)đã nói rõ alpha của nó rồi, nhân thêm độ đục của tấm nền vào là cắt ý định của phía gọi thêm một lần nữa.GoStyle.floating(…, opaque = true)bỏ qua giá trị này cũng vì lý do cùng loại — tô kín mặt nền chính là toàn bộ mục đích của cái cờ đó. -
Những tấm nền không do gohud dựng cũng theo đúng quy tắc ấy.
GoStyle.fade_panel(node)— gọi sau khi node đã nằm trong cây, để nó đọc được theme mà nó kế thừa. Hàm này lũy đẳng: mặt nền gốc được ghi lại và mỗi lần gọi đều tính lại từ đó, nên vẽ lại bao nhiêu lần cũng không chồng lên nhau. Sau khi đổi theme,GoStyle.forget_face(node)xóa phần ghi nhớ ấy để lần gọi kế tiếp bắt lấy mặt nền mới.
Mặt nền tự vẽ cũng nhạt đi — và đó chính là chỗ âm thầm hỏng
Tấm nền góc cắt chéo (GoStyleBoxCut) và khung rèn (GoStyleBoxMedieval) không
phải StyleBoxFlat; chúng tự vẽ lấy mình. Chỉ đặt độ đục ở nhánh flat thì các theme này lặng
lẽ bỏ qua nó, trong khi mọi bài kiểm tra dựa trên giá trị vẫn qua hết. Cả hai đều làm nhạt phần nền của
mình và giữ nguyên độ mạnh của ánh sáng tỏa, đinh tán, hoa văn khắc ở góc và vệt sáng vát cạnh — còn vân
và vệt vát của mặt trung cổ thì xưa nay vẫn tỉ lệ với alpha nền của nó, nên chúng mỏng đi cùng với tấm nền.
Và đó mới là điểm lớn hơn: bg_color.a == 0.8 là một con số. Thế giới hiện xuyên qua được
mà chữ vẫn đọc được mới là yêu cầu. gohud kiểm tra cái thứ nhất trong bộ kiểm thử headless, còn
cái thứ hai thì bằng cách vẽ các tấm nền lên những vạch chéo trên một màn hình ảo
(tests/gohud_alpha_shot.gd) — trên mặt flat, mặt góc cắt và mặt rèn, ở cả theme tối lẫn theme
sáng.