gohud

Độ đục — game ở phía sau tấm nền

← Theme

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.

Chỉ riêng mặt nền mỏng đi. Chữ, biểu tượng, nút, badge và ô nhanh vẫn sắc nét, viền và bóng đổ cũng vậy. Một tấm nền trong mờ chỉ đọc ra là kính khi đường viền của nó còn sắc; làm nhạt đường viền thì không còn biết tấm nền kết thúc ở đâu. Làm nhạt nội dung thì UI không đọc được nữa — đó không phải cửa sổ trong suốt, đó là lỗi. Chính vì vậy giá trị này không bao giờ được áp qua 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.0một cửa sổ
GoConfig.container_alpha_overrides[kind]tỉ lệ 0.0–1.0một loại tấm nền, trên toàn dự án
GoConfig.metric_overrides[<kind>_alpha]phần trămnhững dự án gom mọi số đo về một chỗ
GoConfig.container_alphatỉ lệ 0.0–1.0mọi tấm nền cùng một lúc
GoHud/constants/<kind>_alpha của themephầ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.

Độ đục ở đâu cũng là tỉ lệ — trừ trong theme. Mọi trường và đối số alpha đều nhận 0.0–1.0, cùng đơn vị với Color.amodulate.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 containerBỏ 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.

Menu popup vẫn đặc (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

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.