Kısa versiyon
Araç etiketlerini üst üste gelmeyen bir şekilde dağıtmak, atıfta bulundukları araca mümkün olduğunca yakın yerleştirmek için bir tasarım deseni var mı? Eğer değilse, önerdiğim yöntemlerden herhangi biri uygulanabilir mi? Bunu kendin nasıl uygularsın?
Genişletilmiş versiyon
Yazdığım oyunda, havadan geçen araçlarımın kuşbakışı bir vizyonu var. Ayrıca, araçların her birinin yanında araçla ilgili anahtar veriler içeren küçük bir etiket var. Bu gerçek bir ekran görüntüsü:
Şimdi, araçlar farklı irtifalarda uçabildiklerinden, simgeleri üst üste gelebilirdi. Bununla birlikte, etiketlerinin hiçbir zaman üst üste binmesini istemem (veya 'A' aracından bir etiket 'araç' B simgesinin üzerine geldiğinde).
Şu anda, sprite arasındaki çarpışmayı tespit edebiliyorum ve rahatsız edici etiketi aksi halde üst üste gelen sprite ile ters yönde itiyorum . Bu, çoğu durumda işe yarar , ancak hava sahası kalabalıklaştığında, alternatif bir "daha akıllı" alternatif olsa bile , etiket araçtan çok uzağa itilebilir . Örneğin alıyorum:
B - label
A -----------label
C - label
aşağıdakileri elde etmenin daha iyi olacağı (= araca daha yakın bir etiket):
B - label
label - A
C - label
EDIT: Örtüşen araçlar kasasının yanı sıra, araç etiketlerinin A
üst üste gelebileceği başka yapılandırmalar olabileceği de göz önünde bulundurulmalıdır (ASCII-sanat örnekleri, örneğin etiketinin simgesiyle çakıştığı üç çok yakın aracı göstermektedir . B
ve C
).
Mevcut durumun nasıl iyileştirileceği hakkında iki fikrim var, ancak bunları uygulamak için zaman harcamadan önce, tavsiye almak için topluma dönmeyi düşündüm (sonuçta bunun için "yeterince yaygın bir sorun" gibi görünüyor).
Buna değer, işte düşündüğüm iki fikir:
Etiket boşluğunun yuvalanması
Bu senaryoda, tüm ekranı etiketler için "yuvalara" bölerdim. Daha sonra, her araç kendi etiketini daima en yakın boş olana yerleştirirdi (boş = o yerde başka bir sprite yok).
Spiral arama
Aracın ekran üzerindeki konumundan, etiketi üst üste bindirmeyecek bir konum bulunana kadar artan açılarda ve sonra artan yarıçaplarda yerleştirmeye çalışacağım. Çizginin aşağısındaki bir şey:
try 0°, 10px
try 10°, 10px
try 20°, 10px
...
try 350°, 10px
try 0°, 20px
try 10°, 20px
...