gohud

HUD

← Widget

Sono i dettagli a decidere se sta bene

Rifinisci quanto vuoi i pannelli grandi — ciò che salta all'occhio è sempre qualcosa di piccolo: una parola spezzata in due, un bagliore tagliato, uno slot stretto. Quattro cose così sono state segnalate il 2026-09-13 e corrette nei widget e nei temi, non nella schermata della demo, così ogni schermata ottiene lo stesso risultato.

Che cosa si vedevaCausaCorrezione
Il Done del coach mark diventava Don/e Un pulsante con l'andata a capo attiva sottrae la larghezza del testo dal proprio minimo — stringilo e si spezza dentro una parola GoStyle.fit_words(): una parola sola non va mai a capo; più parole vanno a capo, ma la parola più lunga ci sta sempre — il giudizio è sul testo mostrato, non sulla chiave di traduzione, e viene riapplicato dal modulo quando cambia la lingua
Il bagliore di un pulsante a tutta larghezza risultava tagliato verticalmente a sinistra Un contenitore di scorrimento taglia al proprio bordo, senza eccezioni. Sopravviveva solo il lato destro, grazie alla corsia della barra GoScroll prende in prestito il margine interno del genitore per spingere il proprio bordo 12dp più in fuori e lo restituisce all'interno — il contenuto resta dov'è
Tempo, icona e conteggio impilati in verticale dentro uno slot Tre righe dentro 48dp Icona grande al centro, scorciatoia in alto a sinistra, conteggio come badge in basso a destra, tempo rimanente come badge sopra l'icona — i pannelli dei badge vengono dal badge_box() della skin
Un menu a tendina piatto senza selezione visibile Il passaggio del mouse sulle voci usava il pannello del pulsante; i segni dei radio erano quelli tenui predefiniti del motore Un pannello dedicato per il passaggio del mouse (velatura d'accento tenue), la stessa grafica dei radio usata per le caselle di spunta, altezza delle voci dimensionata per il tocco
Un menu a tendina aperto — pannello tenue d'accento al passaggio del mouse e segno radio della voce scelta
Menu a tendina — pannello al passaggio del mouse e segno radio
Quattro slot rapidi — scorciatoia in alto a sinistra, badge del conteggio in basso a destra, il primo con un badge del tempo rimanente
Slot — badge agli angoli e tempo rimanente (sci-fi)

Dai ai pulsanti di sola icona una descrizione con GoStyle.icon_button(icon, action, -1, tooltip_key) — il suggerimento per chi usa il mouse e il nome accessibile per i lettori di schermo vengono entrambi da quell'unico valore. gohud disegna da sé il suggerimento: quello predefinito del motore spezza il testo un carattere per riga quando il suo calcolo della larghezza va storto (misurato a 1dp di larghezza).

La scheda del coach mark sta lontana dagli elementi fissi

In orizzontale la scheda finiva sul bordo superiore o inferiore estremo — esattamente dove stanno intestazioni e pezzi dell'HUD; nella demo si posava sul → × dell'intestazione. Ora resta al livello del suo bersaglio, gira attorno a qualsiasi GoHudAnchor che riservi spazio, e accetta altri elementi da evitare tramite keep_clear. Si sposta della distanza minima che libera l'ostacolo senza coprire il bersaglio, e resta dov'è quando lo schermo è troppo piccolo per liberare tutto — sovrapporsi è meglio che sparire. La sua profondità — così da leggersi come sopra la pagina — viene dalle manopole della skin (float_shadow_size, float_shadow_lift, float_shadow_alpha; le skin smussate usano float_glow_size).

tour.keep_clear = [header_bar, toolbar]   # elementi fissi che non sono ancore

Schermi con mouse e tastiera

Un dito non ha lo stato di passaggio del mouse. Sviluppa pensando solo al mobile e due stati esclusivi del desktop restano non verificati — e uno dei due era rotto: in gohud l'anello di focus era invisibile su un pulsante primario. Il pannello è del colore d'accento e lo era anche l'anello: 1,00:1, lo stesso colore disegnato sopra sé stesso. Muovendosi da tastiera non c'era modo di capire dove ci si trovasse.

La stessa riga di pulsanti in tre stati — normale, passaggio del mouse, focus da tastiera
Dall'alto in basso: normale · passaggio del mouse · focus. I pulsanti pieni ricevono un anello che contrasta con il proprio pannello.

I pulsanti pieni (GoPrimaryButton, GoDangerSolidButton) usano un anello che contrasta con il proprio pannello — scuro su un tema scuro, bianco su uno chiaro, una staffa di mira scura in sci-fi. Il verificatore di contrasto misura l'anello di focus rispetto al pannello su cui si trova, così la regola sopravvive a un cambio di palette (la WCAG 2.4.11 chiede 3:1 sugli indicatori di focus).

I widget dell'HUD

GoHudAnchor — nove punti

Rispetta l'area sicura e i margini dei bordi. Dagli un landscape_spot e si sposta in orizzontale — controlli che in verticale stanno in basso al centro possono andare in basso a destra.

Perché esiste. Scritti a mano per ogni pezzo di HUD, ancoraggi e scostamenti si disallineano: una barra della salute finisce sotto il foro della fotocamera su un dispositivo con notch, e un pulsante di comando atterra sulla barra dei gesti in orizzontale. Quell'aritmetica vive in un unico punto.

Tenere il contenuto fuori da sotto l'HUD

Quando una schermata scorrevole condivide il display con un HUD, il contenuto scivola sotto di esso e i due insiemi di testo si sovrappongono finché nessuno dei due è leggibile. È successo due volte in questo add-on: il testo segnaposto di un campo veniva schiacciato tra gli slot rapidi, e la manopola di un interruttore delle impostazioni finiva sulla barra della salute.

form.avoid_hud = true                  # sta lontano da ogni GoHudAnchor visibile
joystick_anchor.reserve_space = false  # …tranne quelli che compaiono solo sotto un dito

Ogni rettangolo viene evitato nella direzione che costa meno area. Una barra in alto a destra viene aggirata verso il basso su un telefono in verticale (il 13% dell'altezza) e di lato in orizzontale (il 21% della larghezza) — evitarla in verticale in orizzontale costerebbe il 27% dello schermo. Il terreno già ceduto viene sottratto prima di misurare il rettangolo successivo.

Anche i pezzi dell'HUD si scontrano tra loro

I nove punti dividono lo schermo; non garantiscono che i pezzi non si incontrino. Una snackbar larga in alto al centro finiva in pieno sulla barra della salute in alto a destra, nascondendone il valore — non si riusciva a leggere quanta salute restasse.

notice_anchor.avoid_peers = true      # si posa sotto l'HUD fisso
notice_anchor.reserve_space = false   # e non spinge la pagina mentre è visibile

Si sposta solo in verticale — muoversi anche di lato farebbe comparire un avviso centrato in un punto diverso a ogni apparizione. E evita solo i pezzi che non si stanno spostando a loro volta: se entrambi cedono, i due si scambiano di posto all'infinito.

GoBar — salute, mana, esperienza

var hp := GoBar.new()
hp.label_text = "HP"
hp.ink = GoUi.color(GoTheme.DANGER_FILL)   # il token di solo riempimento
hp.set_values(320, 500)                     # "320 / 500"

Le variazioni sono smorzate su 0,18s — una barra della salute che salta di colpo non dice quanto è stato duro il colpo. reduce_motion la rende istantanea. I numeri grandi vengono abbreviati in 12.3k così la larghezza della barra non sobbalza quando le cifre entrano ed escono.

GoSlot — uno slot rapido

Icona, quantità, ricarica e scorciatoia su una sola faccia. Appendere badge a un cerchietto rende ogni slot di larghezza diversa e la riga traballa.

Dimensione visibile e dimensione di tocco sono diverse. Slot affiancati hanno riquadri di tocco da 48dp sovrapposti; la sovrapposizione va allo slot il cui centro è più vicino — comunicaglielo a vicenda tramite touch_peers.

keyboard_focus è disattivato per impostazione predefinita, così una fila di otto slot non si frappone tra chi usa la tastiera e ogni controllo delle impostazioni nell'ordine di tabulazione. Attivalo quando l'unico input è una tastiera o un gamepad.

GoJoystick — stick virtuale

ModalitàComportamento
FIXEDSempre nello stesso posto — facile da trovare senza guardare
FOLLOWCompare dove si posa il pollice
RELATIVEContinua a seguire il pollice dopo essere comparso — comodo per gli spostamenti lunghi

Il Vector2 di moved ha lunghezza 0–1, quindi puoi moltiplicarlo direttamente per una velocità; non varia con la dimensione dello schermo o con i DPI.

GoIconButton — sembra piccolo, si preme grande

Sicuro solo finché i fratelli ignorano l'input. Se l'area allargata copre il pulsante successivo, quel pulsante smette di rispondere. Pulsanti icona affiancati richiedono touch_peers.