O tym, czy wygląda dobrze, decydują drobiazgi
Dopieszczaj duże panele, ile chcesz — w oczy i tak rzuca się zawsze coś małego: słowo przełamane na pół, ucięta poświata, ciasny slot. Cztery takie rzeczy wskazano 2026-09-13 i naprawiono je w widżetach i motywach, a nie na ekranie demo, więc każdy ekran dostaje ten sam efekt.
| Co się pokazało | Przyczyna | Naprawa |
|---|---|---|
Napis Done na wskazówce instruktażowej zmienił się w Don/e |
Przycisk z włączonym zawijaniem odejmuje szerokość swojego tekstu od minimum — ściśnij go, a złamie się w środku słowa | GoStyle.fit_words(): jedno słowo nigdy się nie zawija; kilka słów zawija się, ale najdłuższe słowo zawsze się mieści — sądzone po tekście wyświetlanym, a nie po kluczu tłumaczenia, i nakładane ponownie przez formularz przy zmianie języka |
| Poświata przycisku na pełną szerokość została ucięta pionowo po lewej | Kontener przewijania przycina na swojej krawędzi, bez wyjątków. Przetrwała tylko prawa strona, dzięki rynience na pasek | GoScroll pożycza margines rodzica, by wypchnąć swoją krawędź o 12 dp na zewnątrz, i oddaje go w środku — treść zostaje na miejscu |
| Czas, ikona i liczba ustawiły się w slocie jedno pod drugim | Trzy rzędy wewnątrz 48 dp | Ikona duża na środku, skrót w lewym górnym rogu, liczba jako plakietka w prawym dolnym, pozostały czas jako plakietka na ikonie — panele plakietek pochodzą z badge_box() skórki |
| Płaska lista rozwijana bez widocznego zaznaczenia | Najechanie na pozycję używało panelu przycisku; znaczniki wyboru były bladą domyślną grafiką silnika | Dedykowany panel najechania (miękkie zabarwienie akcentem), ta sama grafika przycisku radiowego co przy polach wyboru, wysokość pozycji dobrana pod dotyk |
Daj przyciskom z samą ikoną opis przez GoStyle.icon_button(icon, action, -1, tooltip_key) —
podpowiedź dla użytkowników myszy i nazwa dostępności dla czytników ekranu biorą się z tej jednej wartości.
gohud rysuje podpowiedź sam: domyślna z silnika łamie tekst po jednym znaku na linię, gdy jego
obliczenie szerokości idzie źle (zmierzone przy 1 dp szerokości).
Karta wskazówki trzyma się z dala od stałych elementów
W orientacji poziomej karta trafiała kiedyś na samą górną albo dolną krawędź — dokładnie tam, gdzie mieszkają
nagłówki i elementy HUD; w demie siadała na → × nagłówka. Teraz trzyma się na wysokości swojego
celu, omija każdy GoHudAnchor, który rezerwuje miejsce, a inne rzeczy do omijania przyjmuje przez
keep_clear. Przesuwa się o najkrótszy dystans, który uwalnia przeszkodę, nie zasłaniając celu,
i zostaje na miejscu, gdy ekran jest za mały, by uwolnić wszystko — nachodzenie jest lepsze niż znikanie.
Jej głębia — żeby czytała się jako ponad stroną — pochodzi z pokręteł skórki
(float_shadow_size, float_shadow_lift, float_shadow_alpha; skórki ze ściętymi narożnikami używają float_glow_size).
tour.keep_clear = [header_bar, toolbar] # stałe elementy, które nie są kotwicami
Ekrany z myszą i klawiaturą
Palec nie ma stanu najechania. Buduj wyłącznie pod urządzenia mobilne, a dwa stany występujące tylko
na komputerze zostaną niesprawdzone — i jeden z nich był zepsuty: pierścień fokusu gohud był niewidoczny
na przycisku głównym. Panel miał kolor akcentu i pierścień też: 1.00:1, ten sam kolor
narysowany sam na sobie. Poruszając się klawiaturą, nie dało się poznać, gdzie się jest.
Wypełnione przyciski (GoPrimaryButton, GoDangerSolidButton) używają pierścienia,
który kontrastuje z ich własnym panelem — ciemnego w ciemnym motywie, białego w jasnym, ciemnej
ramki celowniczej w sci-fi. Kontroler kontrastu mierzy pierścień fokusu względem panelu, na którym leży,
więc reguła przeżywa zmianę palety (WCAG 2.4.11 wymaga 3:1 dla wskaźników fokusu).
Widżety HUD
GoHudAnchor — dziewięć miejsc
Szanuje bezpieczny obszar i marginesy przy krawędziach. Daj mu landscape_spot, a przesunie się
w orientacji poziomej — kontrolki, które w pionie siedzą na dole pośrodku, mogą trafić na dół po prawej.
Jak trzymać treść spod HUD
Gdy przewijany ekran dzieli wyświetlacz z HUD, treść wsuwa się pod niego i oba zestawy tekstu nachodzą na siebie, aż żadnego nie da się odczytać. W tym dodatku zdarzyło się to dwa razy: tekst zastępczy pola wprowadzania wyciskał się między szybkimi slotami, a gałka przełącznika w ustawieniach lądowała na pasku zdrowia.
form.avoid_hud = true # omijaj każdy widoczny GoHudAnchor
joystick_anchor.reserve_space = false # …poza tymi, które pojawiają się dopiero pod palcem
Każdy prostokąt omijany jest w tym kierunku, który kosztuje najmniej powierzchni. Pasek w prawym górnym rogu omijany jest w dół na telefonie w pionie (13% wysokości) i na bok w poziomie (21% szerokości) — omijanie go pionowo w orientacji poziomej kosztowałoby 27% ekranu. Oddany już teren odejmuje się, zanim zmierzony zostanie następny prostokąt.
Elementy HUD zderzają się także ze sobą
Dziewięć miejsc dzieli ekran; nie gwarantuje, że elementy miną się wzajemnie. Szeroki snackbar na górze pośrodku wylądował dokładnie na pasku zdrowia w prawym górnym rogu i zasłonił wartość — nie dało się odczytać, ile zdrowia zostało.
notice_anchor.avoid_peers = true # osiada pod stałym HUD
notice_anchor.reserve_space = false # i nie przesuwa strony, dopóki jest widoczny
Ustępuje tylko w pionie — przesuwanie się także na boki sprawiłoby, że wyśrodkowane powiadomienie pojawiałoby się za każdym razem gdzie indziej. I omija wyłącznie te elementy, które same nie ustępują: gdyby ustąpiły oba, w nieskończoność zamieniałyby się miejscami.
GoBar — zdrowie, mana, doświadczenie
var hp := GoBar.new()
hp.label_text = "HP"
hp.ink = GoUi.color(GoTheme.DANGER_FILL) # token tylko do wypełnień
hp.set_values(320, 500) # "320 / 500"
Zmiany wygładzają się przez 0,18 s — pasek zdrowia, który przeskakuje, nie mówi ci, jak mocno oberwałeś.
reduce_motion sprawia, że zmiana jest natychmiastowa. Duże liczby skracają się do
12.3k, więc szerokość paska nie drga, gdy cyfry przybywają i ubywają.
GoSlot — jeden szybki slot
Ikona, liczba, odnowienie i skrót na jednym licu. Wieszanie plakietek na małym kółku sprawia, że każdy slot ma inną szerokość, a rząd faluje.
touch_peers.
keyboard_focus jest domyślnie wyłączony, żeby rząd ośmiu slotów nie stanął w kolejności Tab między
użytkownikiem klawiatury a wszystkimi kontrolkami ustawień. Włącz go, gdy klawiatura albo pad są jedynym wejściem.
GoJoystick — wirtualny joystick
| Tryb | Zachowanie |
|---|---|
FIXED | Zawsze w tym samym miejscu — łatwo trafić bez patrzenia |
FOLLOW | Pojawia się tam, gdzie ląduje kciuk |
RELATIVE | Po pojawieniu się nadal podąża za kciukiem — wygodne przy długim ruchu |
Vector2 z sygnału moved ma długość 0–1, więc możesz przemnożyć go wprost przez
prędkość; nie zmienia się wraz z rozmiarem ekranu ani DPI.
GoIconButton — wygląda na mały, naciska się duży
touch_peers.