gohud

HUD

← Widget'lar

İyi görünüp görünmediğine küçük şeyler karar verir

Büyük panelleri istediğiniz kadar cilalayın — göze çarpan hep küçük bir şeydir: ikiye bölünmüş bir kelime, kesilmiş bir ışıma, sıkışmış bir slot. 2026-09-13'te böyle dört şey işaret edildi ve demo ekranında değil, widget'lar ile temalarda düzeltildi; böylece her ekran aynı sonucu alıyor.

GörünenNedeniÇözüm
Rehber işaretinin Done yazısı Don/e oldu Satır kaydırması açık bir düğme, yazı genişliğini en küçük boyutundan düşer — sıkıştırın, kelimenin ortasından bölünsün GoStyle.fit_words(): tek bir kelime asla bölünmez; birden çok kelime kaydırılır ama en uzun kelime her zaman sığar — karar çeviri anahtarına göre değil görüntülenen yazıya göre verilir ve dil değiştiğinde form tarafından yeniden uygulanır
Tam genişlikteki bir düğmenin ışıması solda dikey olarak kesildi Bir kaydırma kabı kenarında istisnasız kırpar. Ray boşluğu sayesinde yalnızca sağ taraf kurtuldu GoScroll, kenarını 12dp dışarı itmek için üst öğenin iç boşluğunu ödünç alır ve içeride geri verir — içerik yerinde kalır
Bir slotta süre, simge ve adet alt alta dizildi 48dp içinde üç satır Simge ortada büyük, kısayol sol üstte, adet sağ altta bir rozet, kalan süre simgenin üstünde bir rozet — rozet panelleri kaplamanın badge_box() metodundan gelir
Seçimi görünmeyen yassı bir açılır liste Öğe vurgusu düğme panelini kullanıyordu; radyo işaretleri motorun soluk varsayılanıydı Kendine ait bir vurgu paneli (yumuşak vurgu tonu), onay kutularıyla aynı radyo grafiği, dokunmaya uygun öğe yüksekliği
Açık bir açılır liste — yumuşak vurgu tonlu vurgu paneli ve seçili öğenin radyo işareti
Açılır liste — vurgu paneli ve radyo işareti
Dört hızlı slot — sol üstte kısayol, sağ altta adet rozeti, ilkinde kalan süre rozeti
Slotlar — köşe rozetleri ve kalan süre (bilimkurgu)

Yalnızca simgeden oluşan düğmelere GoStyle.icon_button(icon, action, -1, tooltip_key) ile bir açıklama verin — fare kullananlar için ipucu ve ekran okuyucular için erişilebilirlik adı, ikisi de bu tek değerden gelir. İpucunu gohud kendisi çizer: motorun varsayılanı, genişlik hesabı bozulduğunda yazıyı satır başına tek karakter olarak böler (1dp genişlikte ölçüldü).

Rehber işareti kartı sabit parçalardan uzak durur

Yatay kipte kart eskiden tam üst ya da alt kenara gönderiliyordu — tam da başlıkların ve HUD parçalarının bulunduğu yere; demoda başlığın → × kısmının üstüne oturmuştu. Artık hedefiyle aynı hizada kalıyor, yer ayıran her GoHudAnchor'ın etrafından dolaşıyor ve kaçınılacak diğer şeyleri keep_clear üzerinden alıyor. Engeli hedefin üstünü kapatmadan aşacak en kısa mesafeyi hareket eder ve ekran her şeyden kaçınmaya yetmeyecek kadar küçükse yerinde kalır — üst üste binmek yok olmaktan iyidir. Sayfanın üstünde okunmasını sağlayan derinliği kaplama ayarlarından gelir (float_shadow_size, float_shadow_lift, float_shadow_alpha; pahlı kaplamalar float_glow_size kullanır).

tour.keep_clear = [header_bar, toolbar]   # anchor olmayan sabit parçalar

Fareli ve klavyeli ekranlar

Bir parmağın üstüne gelme durumu yoktur. Yalnızca mobili düşünerek geliştirin, yalnızca masaüstünde olan iki durum denetimsiz kalır — ve biri bozuktu: gohud'un odak halkası birincil düğmede görünmüyordu. Panel vurgu rengiydi ve halka da öyleydi: 1.00:1, kendi üstüne çizilmiş aynı renk. Klavyeyle gezinirken nerede olduğunuzu anlamanın yolu yoktu.

Aynı düğme sırası üç durumda — normal, fare üstünde, klavye odağı
Yukarıdan aşağıya: normal · üstüne gelme · odak. Dolgulu düğmeler, kendi paneliyle kontrast oluşturan bir halka alır.

Dolgulu düğmeler (GoPrimaryButton, GoDangerSolidButton) kendi paneliyle kontrast oluşturan bir halka kullanır — koyu temada koyu, açık temada beyaz, bilimkurguda koyu bir hedefleme köşeliği. Kontrast denetleyicisi odak halkasını üstünde durduğu panele karşı ölçer, bu yüzden kural bir palet değişikliğinden sağ çıkar (WCAG 2.4.11 odak göstergelerinde 3:1 ister).

HUD widget'ları

GoHudAnchor — dokuz nokta

Güvenli alana ve kenar boşluklarına uyar. Ona bir landscape_spot verin, yatay kipte yer değiştirsin — dikeyde alt ortada duran denetimler bunun yerine sağ alta gidebilir.

Neden var. HUD parçası başına elle yazıldığında anchor'lar ve offset'ler birbirinden ayrışır: çentikli bir cihazda can çubuğu kamera deliğinin altında kalır, yatay kipte bir denetim düğmesi hareket çubuğunun üstüne iner. O aritmetik tek bir yerde yaşıyor.

İçeriği HUD'ın altından çıkarmak

Kaydırılan bir ekran, ekranı bir HUD ile paylaştığında içerik onun altına kayar ve iki yazı kümesi hiçbiri okunmaz hâle gelene kadar üst üste biner. Bu eklentide iki kez oldu: bir giriş alanının yer tutucu yazısı hızlı slotların arasından sıkışıp çıktı ve bir ayar anahtarının topuzu can çubuğunun üstüne indi.

form.avoid_hud = true                  # görünen her GoHudAnchor'dan uzak dur
joystick_anchor.reserve_space = false  # …yalnızca parmak altında beliren anchor'lar hariç

Her dikdörtgenden en az alana mal olan yönde kaçınılır. Sağ üstteki bir çubuğun etrafından dikey tutulan bir telefonda aşağı doğru (yüksekliğin %13'ü), yatayda ise yana doğru (genişliğin %21'i) dolaşılır — yatay kipte dikey olarak kaçınmak ekranın %27'sine mal olurdu. Zaten feda edilmiş alan, bir sonraki dikdörtgen ölçülmeden önce düşülür.

HUD parçaları birbiriyle de çarpışır

Dokuz nokta ekranı böler; parçaların birbirini ıskalayacağını garanti etmez. Üst ortadaki geniş bir snackbar, sağ üstteki can çubuğunun tam üstüne indi ve değeri gizledi — ne kadar can kaldığını okuyamıyordunuz.

notice_anchor.avoid_peers = true      # sabit HUD'ın altına yerleşir
notice_anchor.reserve_space = false   # ve görünürken sayfayı itmez

Yalnızca dikey olarak kenara çekilir — yana da kaymak, ortalanmış bir bildirimin her görünüşünde başka bir yerde belirmesine yol açardı. Üstelik yalnızca kendisi kenara çekilmeyen parçalardan kaçınır: ikisi birden çekilirse, ikisi sonsuza dek yer değiştirir.

GoBar — can, mana, deneyim

var hp := GoBar.new()
hp.label_text = "HP"
hp.ink = GoUi.color(GoTheme.DANGER_FILL)   # yalnızca dolguya özgü token
hp.set_values(320, 500)                     # "320 / 500"

Değişimler 0.18 saniyede yumuşatılır — zıplayan bir can çubuğu darbenin ne kadar sert olduğunu anlatmaz. reduce_motion bunu anında yapar. Büyük sayılar 12.3k gibi kısaltılır, böylece basamaklar gelip gittikçe çubuğun genişliği titremez.

GoSlot — tek bir hızlı slot

Simge, adet, bekleme süresi ve kısayol tek bir yüzde. Rozetleri küçük bir dairenin kenarına asmak her slotu başka genişlikte yapar ve sıra yalpalar.

Görünen boyut ile dokunma boyutu farklıdır. Sıkışık slotların 48dp'lik dokunma kutuları üst üste biner; çakışan bölge merkezi daha yakın olan slota gider — bunu birbirlerine touch_peers üzerinden bildirin.

keyboard_focus varsayılan olarak kapalıdır, böylece sekiz slotluk bir sıra, Tab sırasında klavye kullanan biriyle bütün ayar denetimlerinin arasına girmez. Girdi yalnızca klavye ya da oyun kumandasıysa açın.

GoJoystick — sanal joystick

KipDavranış
FIXEDHer zaman aynı yerde — bakmadan bulması kolay
FOLLOWBaşparmağın indiği yerde belirir
RELATIVEBelirdikten sonra başparmağı izlemeyi sürdürür — uzun hareketler için rahat

moved sinyalinden gelen Vector2'nin uzunluğu 0–1 arasındadır, yani doğrudan bir hızla çarpabilirsiniz; ekran boyutuna ya da DPI'ya göre değişmez.

GoIconButton — küçük görünür, büyük basılır

Yalnızca kardeşleri girdiyi yok saydığı sürece güvenlidir. Genişletilmiş alan bir sonraki düğmenin üstünü kaplarsa, o düğme yanıt vermeyi bırakır. Yan yana duran simge düğmelerinin touch_peers'a ihtiyacı vardır.