Version courte
Existe-t-il un modèle de conception pour distribuer les étiquettes des véhicules de manière non superposée, en les plaçant le plus près possible du véhicule auquel elles se réfèrent? Sinon, l'une des méthodes que je suggère est-elle viable? Comment mettriez-vous cela en œuvre vous-même?
Version étendue
Dans le jeu que j'écris, j'ai une vision à vol d'oiseau de mes véhicules aéroportés. J'ai également à côté de chacun des véhicules une petite étiquette avec des données clés sur le véhicule. Ceci est une capture d'écran réelle:
Maintenant, comme les véhicules pouvaient voler à différentes altitudes, leurs icônes pouvaient se chevaucher. Cependant, je voudrais que leurs étiquettes ne se chevauchent jamais (ou qu'une étiquette du véhicule «A» chevauche l'icône du véhicule «B»).
Actuellement, je peux détecter les collisions entre les sprites et je repousse simplement le libellé incriminé dans une direction opposée au sprite autrement chevauché . Cela fonctionne dans la plupart des situations, mais lorsque l'espace aérien est encombré, l'étiquette peut être poussée très loin de son véhicule, même s'il existait une alternative "plus intelligente". Par exemple, je reçois:
B - label
A -----------label
C - label
où il serait préférable (= étiquette plus proche du véhicule) d'obtenir:
B - label
label - A
C - label
EDIT: Il faut également considérer qu'à côté du cas des véhicules qui se chevauchent, il pourrait y avoir d'autres configurations dans lesquelles les étiquettes des véhicules pourraient se chevaucher (les exemples de l'art ASCII montrent par exemple trois véhicules très proches dans lesquels l'étiquette de A
chevaucherait l'icône de B
et C
).
J'ai deux idées sur la façon d'améliorer la situation actuelle, mais avant de passer du temps à les mettre en œuvre, j'ai pensé me tourner vers la communauté pour obtenir des conseils (après tout, cela semble être un "problème assez courant" pour qu'un modèle de conception puisse exister).
Pour ce que ça vaut, voici les deux idées auxquelles je pensais:
Slot-isation de l'espace d'étiquette
Dans ce scénario, je diviserais tout l'écran en "fentes" pour les étiquettes. Ensuite, chaque véhicule aurait toujours son étiquette placée dans le vide le plus proche (vide = aucun autre sprite à cet endroit).
Recherche en spirale
À partir de l'emplacement du véhicule sur l'écran, j'essayerais de placer l'étiquette à des angles croissants puis à des rayons croissants, jusqu'à ce qu'un emplacement sans chevauchement soit trouvé. Quelque chose sur la ligne de:
try 0°, 10px
try 10°, 10px
try 20°, 10px
...
try 350°, 10px
try 0°, 20px
try 10°, 20px
...