Versione breve
Esiste un modello di progettazione per distribuire le etichette dei veicoli in modo non sovrapposto, posizionandole il più vicino possibile al veicolo a cui si riferiscono? In caso contrario, uno dei metodi che suggerisco è praticabile? Come lo implementeresti tu stesso?
Versione estesa
Nel gioco che sto scrivendo ho una visione a volo d'uccello dei miei veicoli aerei. Ho anche accanto a ciascuno dei veicoli una piccola etichetta con i dati chiave sul veicolo. Questo è uno screenshot reale:
Ora, poiché i veicoli potrebbero volare a diverse quote, le loro icone potrebbero sovrapporsi. Tuttavia, non vorrei mai che le loro etichette si sovrapponessero (o un'etichetta del veicolo "A" si sovrapponga all'icona del veicolo "B").
Attualmente, posso rilevare le collisioni tra gli sprite e spingo semplicemente via l'etichetta offensiva in una direzione opposta allo sprite altrimenti sovrapposto . Funziona nella maggior parte dei casi, ma quando lo spazio aereo è affollato, l'etichetta può essere spinta molto lontano dal suo veicolo, anche se ci fosse un'alternativa "più intelligente" alternativa. Ad esempio ottengo:
B - label
A -----------label
C - label
dove sarebbe meglio (= etichetta più vicino al veicolo) ottenere:
B - label
label - A
C - label
EDIT: Va anche considerato che oltre al caso dei veicoli sovrapposti, potrebbero esserci altre configurazioni in cui le etichette dei veicoli potrebbero sovrapporsi (gli esempi di arte ASCII mostrano ad esempio tre veicoli molto vicini in cui l'etichetta di A
si sovrappone all'icona di B
e C
).
Ho due idee su come migliorare la situazione attuale, ma prima di passare il tempo a implementarle, ho pensato di rivolgermi alla comunità per un consiglio (dopo tutto sembra un "problema abbastanza comune" che possa esistere un modello progettuale).
Per quello che vale, ecco le due idee a cui stavo pensando:
Slot-isation dello spazio etichetta
In questo scenario, dividerei tutto lo schermo in "slot" per le etichette. Quindi, ogni veicolo dovrebbe sempre avere la sua etichetta posizionata nel vuoto più vicino (vuoto = nessun altro sprite in quella posizione.
Ricerca a spirale
Dalla posizione del veicolo sullo schermo, proverei a posizionare l'etichetta ad angoli crescenti e quindi a raggi crescenti, fino a trovare una posizione non sovrapposta. Qualcosa in fondo a:
try 0°, 10px
try 10°, 10px
try 20°, 10px
...
try 350°, 10px
try 0°, 20px
try 10°, 20px
...