लघु संस्करण
क्या एक गैर-अतिव्यापी फैशन में वाहन के लेबल को वितरित करने के लिए एक डिज़ाइन पैटर्न है, उन्हें उस वाहन के जितना संभव हो उतना निकट रखना? यदि नहीं, तो क्या कोई ऐसी विधि है जो मैं व्यवहार्य होने का सुझाव दूं? आप इसे खुद कैसे लागू करेंगे?
विस्तारित संस्करण
खेल में मैं लिख रहा हूँ मैं अपने हवाई वाहनों की एक पक्षी-दृष्टि है। मेरे पास प्रत्येक वाहन के पास एक छोटा लेबल है जिसमें वाहन के बारे में कुंजी-डेटा है। यह एक वास्तविक स्क्रीनशॉट है:
अब, चूंकि वाहन विभिन्न ऊंचाई पर उड़ सकते हैं, इसलिए उनके आइकन ओवरलैप हो सकते हैं। हालाँकि मैं कभी भी उनके लेबल को ओवरलैप नहीं करना चाहूंगा (या वाहन 'ए' का लेबल वाहन 'बी' के आइकन को ओवरलैप कर सकता हूं)।
वर्तमान में, मैं स्प्राइट्स के बीच टकरावों का पता लगा सकता हूं और मैं केवल अन्यथा ओवरलैप किए गए स्प्राइट के विपरीत एक दिशा में आक्रामक लेबल को हटा देता हूं । यह ज्यादातर स्थितियों में काम करता है, लेकिन जब हवाई क्षेत्र में भीड़ हो जाती है, तो लेबल को अपने वाहन से बहुत दूर धकेल दिया जा सकता है , भले ही कोई वैकल्पिक "होशियार" विकल्प हो। उदाहरण के लिए मुझे मिलता है:
B - label
A -----------label
C - label
जहां बेहतर होगा (= वाहन के करीब लेबल) पाने के लिए:
B - label
label - A
C - label
संपादित करें: यह भी माना जाता है कि ओवरलैपिंग वाहनों के मामले के अलावा, ऐसे अन्य कॉन्फ़िगरेशन हो सकते हैं जिनमें वाहन ओवरलैप हो सकते हैं (उदाहरण के लिए ASCII- कला उदाहरण तीन बहुत करीबी वाहन दिखाते हैं जिसमें लेबल का A
आइकन ओवरलैप होता है। B
और C
)।
वर्तमान स्थिति को कैसे बेहतर बनाया जाए, इस पर मेरे दो विचार हैं, लेकिन उन्हें लागू करने में समय व्यतीत करने से पहले, मैंने सलाह के लिए समुदाय की ओर रुख करने का विचार किया (आखिरकार यह "एक सामान्य पर्याप्त समस्या" जैसा लगता है कि इसके लिए एक डिज़ाइन पैटर्न मौजूद हो सकता है)।
इसके लायक क्या है, यहाँ दो विचार मैं सोच रहा था:
लेबल स्थान का स्लॉट-अलगाव
इस परिदृश्य में मैं सभी स्क्रीन को "स्लॉट" में लेबल के लिए विभाजित करूंगा। फिर, प्रत्येक वाहन के पास हमेशा उसका लेबल निकटतम खाली एक में रखा जाता है (खाली = उस स्थान पर कोई अन्य छिड़काव नहीं होता है)।
सर्पिल खोज
स्क्रीन पर वाहन के स्थान से, मैं लेबल को बढ़ते कोणों पर और फिर बढ़ते त्रिज्याओं में रखने की कोशिश करूंगा, जब तक कि एक गैर-अतिव्यापी स्थान न मिल जाए। की लाइन के नीचे कुछ:
try 0°, 10px
try 10°, 10px
try 20°, 10px
...
try 350°, 10px
try 0°, 20px
try 10°, 20px
...