मैं एक आइसोमेट्रिक व्यू फ्लैश गेम में ड्रॉ ऑर्डर कैसे निर्धारित करूं?


12

यह एक फ़्लैश गेम के लिए है, जिसमें आइसोमेट्रिक दृश्य है। मुझे यह जानना होगा कि ऑब्जेक्ट को कैसे छाँटना है ताकि ड्राइंग करते समय z- बफर जाँच की कोई आवश्यकता न हो। यह आसान लग सकता है लेकिन एक और प्रतिबंध है, एक दृश्य में 10,000+ ऑब्जेक्ट हो सकते हैं इसलिए एल्गोरिथ्म को ओ (n ^ 2) से कम में चलाने की आवश्यकता है। सभी ऑब्जेक्ट आयताकार बक्से हैं, और दृश्य में 3-4 ऑब्जेक्ट चल रहे हैं। ऐसा करने का सबसे अच्छा तरीका क्या है?

अपडेट करें

प्रत्येक टाइल में केवल ऑब्जेक्ट होता है (मेरा मतलब है कि ऑब्जेक्ट एक दूसरे के ऊपर ढेर नहीं कर सकते हैं)। और हम वस्तुओं और वस्तुओं के मानचित्र तक पहुँच प्राप्त करते हैं।

UPDATE2

ये आंकड़े देखें:

यहाँ छवि विवरण दर्ज करें यहाँ छवि विवरण दर्ज करें

पहले एक में पहली नीली वस्तु खींची जानी चाहिए फिर हरी और फिर लाल। जबकि दूसरे में आपको उन्हें उल्टे क्रम में खींचना होगा। आपको पहले लाल और फिर हरे और अंत में नीले रंग की वस्तु को खींचना होगा। जैसा कि आप देख सकते हैं कि नीले और लाल रंग की वस्तुओं की स्थिति में कोई अंतर नहीं है, वे दोनों कैमरा और इतने पर अलग-अलग दूरी रखते हैं। लेकिन हरे रंग के बॉक्स में उनकी सापेक्ष स्थिति के कारण, आपको दो छवियों के बीच उनके ड्रॉ ऑर्डर को बदलने की आवश्यकता है। यही इस समस्या को गड़बड़ बनाता है।

साइड-नोट: चूंकि सभी ऑब्जेक्ट आयताकार प्रिज़्म हैं, इसलिए यह गणितीय रूप से सिद्ध है कि समस्या की जरूरतों को पूरा करने के लिए कम से कम एक ड्रॉ ऑर्डर है।


2
आपको अधिक जानकारी पोस्ट करनी चाहिए। क्या वस्तुएं स्टैक (3D) हो सकती हैं? ऑब्जेक्ट में स्थिति है या मैप में ऑब्जेक्ट हैं? आदि
काओ


@Tetrad हाँ, लेकिन हम दृश्य में रखी गई वस्तुओं के बारे में थोड़ा अंतर है।
अली

@ गजेट (आपके अपडेट के बाद) ऑब्जेक्ट्स केवल 1 * X और X * 1 या X * Y भी हो सकते हैं? क्या आप वस्तुओं को कई उप-वस्तुओं में विभाजित करने का जोखिम उठा सकते हैं? (जैसे हरे रंग की 4 उप-हरे रंग की वस्तुएं) क्या वस्तु का अभिविन्यास तय है?
काओड

इसके अलावा: कितने आसन्न टाइल आपके ऑब्जेक्ट की ऊंचाई अस्पष्ट है?
काओड

जवाबों:


8

यह वास्तव में बहुत सरल है यदि आपकी वस्तुएं आपकी आइसोमेट्रिक टाइलों के साथ मेल खाती हैं। इस छवि पर एक नज़र डालें:

आइसोमेट्रिक ड्राइंग ऑर्डर

आपको पहले ऑब्जेक्ट को लाल स्थिति में, फिर नीले रंग की वस्तुओं, फिर हरे, फिर पीले, फिर मैजेंटा, और इसी तरह से आकर्षित करना चाहिए ... यह स्पष्ट रूप से स्पष्ट होना चाहिए कि इसे कैसे लागू किया जाए यदि आपके बोर्ड में ऑब्जेक्ट्स के बजाय इसमें ऑब्जेक्ट्स हैं एक विशेषता के रूप में स्थिति होने। यदि यह आपका मामला नहीं है, तो आपको एक अलग डेटा संरचना रखनी चाहिए, जब भी कोई वस्तु चलती है (जो कि काफी आसान होनी चाहिए) को अपडेट करना चाहिए।

यह एक नई समस्या है: आप आसानी से देख सकते हैं कि अब इसकी जटिलता ओ (एन) है जहां एन आपके बोर्ड का आकार ( N=W*H) है। इस समस्या को दूर करने के लिए बस एक नई रैखिक डेटा संरचना बनाएं जहाँ आपकी संरचना का प्रत्येक सूचकांक किसी दिए गए गहराई से मेल खाता हो, जब भी कोई वस्तु गहराई में बदलती है तो उसे अपडेट करती है।

वह मामला जहां कोई वस्तु किसी एकल टाइल के साथ मेल नहीं खाती है, थोड़ा कठिन है, इसलिए जब भी आप अपना प्रश्न अपडेट करते हैं, तो मुझे यह पोस्ट करना होगा।


वह एल्गोरिथम भी मेरे दिमाग में आया था, लेकिन मेरे अपडेट को देखें, इसीलिए आप इसे बिना बदलाव के इस्तेमाल नहीं कर सकते।
अली

1
@ गजेट और उस तरह की बात जो आपको अपने सवाल में पहली बार पोस्ट करनी है: P
kaoD

3
यह 'टाईल्स' +1 में बड़े हिस्सों को विभाजित करने का तरीका है
वेलमंड

2

मुझे इस विषय पर कोई विशेष ज्ञान नहीं है, लेकिन यहाँ एक विचार है।

प्रत्येक सेल को "तैयार नहीं" के रूप में चिह्नित करके प्रारंभ करें। (या, समतुल्य रूप से, सेल के प्रत्येक "निकट-दूर की रेखा" पर निकटतम "खींची गई" चीज़ के स्थान का प्रतिनिधित्व करने के लिए एक सरणी का उपयोग करें, या एक सेट, आदि) फिर, प्रत्येक सेल के लिए (मैं शायद उनके माध्यम से अंदर जाऊंगा आदेश kaoD वर्णित): जांचें कि क्या उस सेल को खींचा गया है; अगर इसे खींचा नहीं गया है और इसमें एक ऑब्जेक्ट है, तो जांचें कि क्या प्रत्येक सेल जो उस ऑब्जेक्ट द्वारा अस्पष्ट किया जाएगा, और यदि वह पुनरावृत्ति नहीं करता है; यदि आवश्यक हो तो उस सेल द्वारा निहित वस्तु को आकर्षित करें; और उस सेल और उसके द्वारा कब्जा की गई किसी भी कोशिका को "खींचा" के रूप में चिह्नित करें।

मैं मान रहा हूं कि आप किसी भी वस्तु के लिए सेल को तेजी से मैप कर सकते हैं, यदि कोई हो। मेरा मानना ​​है कि यह ओ (एन) समय है, हालांकि यह एक बड़े स्टैक का निर्माण कर सकता है (जिसे आप स्टैक्ड स्पेस से बाहर निकलने के बारे में चिंतित हैं, अगर आप लिंक की गई सूची में बदलना चाहते हैं)।

यदि आपको वास्तव में एक सूची की आवश्यकता है, तो आप ड्राइंग के बजाय एक सूची में जोड़ सकते हैं। मुझे संदेह है कि ज्यादातर सॉर्ट की गई सूची से शुरू करने से मदद नहीं मिलती है।


मेरा मानना ​​है कि इस एल्गोरिथ्म को समस्या के अनुकूल रूपात्मक रूप के रूप में देखा जा सकता है; मैं बस उस दिशा में खुद को अस्पष्ट रूप से इंगित करने वाला था। टोपोलॉजिकल सॉर्ट अधिकांश ऑर्डरिंग / निर्भरता समस्याओं का समाधान है।
केविन रीड

1

मैं चित्रकार के एल्गोरिथ्म का उपयोग कैमरे से दूर दूर सेल से एक टैक्सी दूरी के साथ करता हूं , जो पहले कैमरे के सबसे करीब आते हैं और फिर बाहर की ओर बढ़ते हैं।

संपादित करें: यह तब तक काम नहीं करता है जब तक आप प्रत्येक सेल की सामग्री को व्यक्तिगत रूप से आकर्षित नहीं कर सकते।


यह काम कर सकता है, लेकिन मैं यह नहीं बता सकता कि यह एल्गोरिदम बाइट 56 या काओडी से कैसे अलग है। मुझे यह लगता है कि यह अभी भी वही समस्याएं हैं जो मेरे दूसरे संपादन में वर्णित हैं।
अली

1

आपको क्या लगता है कि यह "गणितीय रूप से सिद्ध है कि समस्या की जरूरतों को पूरा करने के लिए कम से कम एक ड्रॉ ऑर्डर है"? यहाँ एक तुच्छ प्रतिरूप है जहाँ आप z- छँटाई वस्तुओं पर भरोसा नहीं कर सकते हैं:

यहाँ छवि विवरण दर्ज करें


बस जिज्ञासा से बाहर ... क्या आप पलटवार को विस्तृत कर सकते हैं? वह ग्रिड नहीं है।
काओड

अच्छी तरह से ध्यान दें कि प्रत्येक टाइल पर केवल एक ऑब्जेक्ट है, और ऑब्जेक्ट एक या अधिक टाइलों पर कब्जा कर सकता है, लेकिन उनके पास हमेशा विमान पर आयताकार प्रक्षेपण होता है। उस कथन को सिद्ध करने के लिए ये दोनों स्थितियाँ पर्याप्त हैं।
अली

ठीक है, उन प्रतिबंधों और इस तथ्य के साथ कि ग्रिड समतल है एक समाधान है। मैं इसे बाद में पोस्ट करूंगा।
सैम होसेवर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.