Versi pendek
Apakah ada pola desain untuk mendistribusikan label kendaraan dengan cara yang tidak tumpang tindih, menempatkannya sedekat mungkin dengan kendaraan yang dimaksud? Jika tidak, adakah metode yang saya sarankan dapat digunakan? Bagaimana Anda menerapkannya sendiri?
Versi diperpanjang
Dalam game yang saya tulis ini, saya memiliki visi mata-burung dari kendaraan udara saya. Saya juga memiliki label kecil dengan kunci-data di samping masing-masing kendaraan. Ini adalah tangkapan layar aktual:
Sekarang, karena kendaraan bisa terbang di ketinggian yang berbeda, ikon mereka bisa tumpang tindih. Namun saya tidak ingin label mereka tumpang tindih (atau label dari kendaraan 'A' tumpang tindih dengan ikon kendaraan 'B').
Saat ini, saya dapat mendeteksi tabrakan antara sprite dan saya cukup menjauhkan label yang menyinggung ke arah yang berlawanan dengan sprite yang tumpang tindih . Ini berfungsi dalam sebagian besar situasi, tetapi ketika wilayah udara penuh sesak, label dapat didorong sangat jauh dari kendaraannya, bahkan jika ada alternatif "cerdas" alternatif. Misalnya saya mendapatkan:
B - label
A -----------label
C - label
di mana akan lebih baik (= label lebih dekat ke kendaraan) untuk mendapatkan:
B - label
label - A
C - label
EDIT: Ini juga harus dipertimbangkan bahwa di samping kasus kendaraan yang tumpang tindih, mungkin ada konfigurasi lain di mana label kendaraan bisa tumpang tindih (contoh ASCII-art menunjukkan misalnya tiga kendaraan yang sangat dekat di mana label A
akan tumpang tindih dengan ikon B
dan C
).
Saya punya dua ide tentang bagaimana memperbaiki situasi saat ini, tetapi sebelum menghabiskan waktu untuk mengimplementasikannya, saya berpikir untuk meminta saran kepada masyarakat (setelah semua itu kelihatannya seperti "masalah yang cukup umum" sehingga pola desain untuk itu bisa ada).
Untuk apa nilainya, inilah dua ide yang saya pikirkan:
Slot-isasi ruang label
Dalam skenario ini saya akan membagi semua layar menjadi "slot" untuk label. Kemudian, setiap kendaraan akan selalu menempatkan labelnya di tempat kosong terdekat (kosong = tidak ada sprite lain di lokasi itu).
Pencarian spiral
Dari lokasi kendaraan di layar, saya akan mencoba untuk menempatkan label pada sudut yang meningkat dan kemudian pada peningkatan radius, sampai lokasi yang tidak tumpang tindih ditemukan. Sesuatu di baris:
try 0°, 10px
try 10°, 10px
try 20°, 10px
...
try 350°, 10px
try 0°, 20px
try 10°, 20px
...