मैं अपने मौजूदा प्रोजेक्ट के लिए कुछ इसी तरह काम कर रहा हूं। यह एक त्वरित रन डाउन है कि मैं यह कैसे कर रहा हूं, कुछ साइड नोट्स के साथ चीजों को अपने आप पर थोड़ा आसान कैसे बनाया जाए।
मेरे लिए, पहली समस्या दुनिया को छोटे-छोटे टुकड़ों में तोड़ना था जो उड़ने पर लोड करने और उतारने के लिए उपयुक्त होगी। चूंकि आप टाइल आधारित मानचित्र का उपयोग कर रहे हैं, इसलिए यह कदम काफी आसान हो जाता है। स्तर में प्रत्येक 3 डी ऑब्जेक्ट के पदों पर विचार करने के बजाय, आपके पास पहले से ही अपने स्तर को अच्छी तरह से टाइलों में विभाजित किया गया है। यह आपको बस Y टाइल के टुकड़े द्वारा दुनिया को एक्स में तोड़ देता है, और उन्हें लोड करता है।
आप हाथ से नहीं, बल्कि स्वचालित रूप से ऐसा करना चाहते हैं। चूंकि आप XNA का उपयोग कर रहे हैं, आपके पास अपने स्तर की सामग्री के लिए कस्टम निर्यातक के साथ सामग्री पाइपलाइन का उपयोग करने का एक विकल्प है। जब तक आप recompiling के बिना निर्यात प्रक्रिया को चलाने का कोई तरीका नहीं जानते, मैं ईमानदारी से इसके खिलाफ सिफारिश करूंगा। हालांकि C # लगभग उतना धीमा नहीं है जितना C ++ के संकलन के लिए है, फिर भी आप विज़ुअल स्टूडियो को लोड करना नहीं चाहते हैं और हर बार जब आप नक्शे में मामूली बदलाव करते हैं, तो अपने गेम को फिर से जोड़ सकते हैं।
यहां एक और महत्वपूर्ण बात यह सुनिश्चित करना है कि आप अपने स्तर के चंक्स वाली फाइलों के लिए एक अच्छे नामकरण सम्मेलन का उपयोग करें। आप यह जानना चाहते हैं कि आप chunk C को लोड या अनलोड करना चाहते हैं, और फिर रन टाइम में ऐसा करने के लिए आपको जो फाइल लोड करना है, उसे जेनरेट करें। अंत में, किसी भी छोटी चीजों के बारे में सोचें जो आपको सड़क पर आने में मदद कर सकती हैं। यह बदलने में सक्षम होना बहुत अच्छा है कि एक चंक कितना बड़ा है, फिर से निर्यात करता है, और फिर प्रदर्शन पर उस के प्रभाव को तुरंत देखें।
रन समय में, यह अभी भी बहुत सीधा है। आपको अतुल्यकालिक रूप से लोड और अनलोड करने के लिए किसी तरह की आवश्यकता होगी, लेकिन यह इस बात पर बहुत निर्भर करता है कि आपका गेम या इंजन कैसे काम करता है। आपकी दूसरी छवि बिल्कुल सही है - आपको यह निर्धारित करने की आवश्यकता है कि क्या चंक को लोड या अनलोड किया जाना चाहिए, और यह सुनिश्चित करने के लिए उचित अनुरोध करें कि यदि यह पहले से ही नहीं है। आपके द्वारा एक समय में कितने चक्कों को लोड किए जाने के आधार पर, आप ऐसा तभी कर सकते हैं जब खिलाड़ी एक बाउंड से दूसरे छोर तक एक सीमा पार करता है। सब के बाद, किसी भी तरह से, आप यह सुनिश्चित करना चाहते हैं कि पर्याप्त लोड हो गया है कि सबसे खराब (उचित) लोड समय में भी, खिलाड़ी को देखने से पहले ही चंक को लोड किया जाता है। आप शायद इस संख्या के साथ खेलना चाहते हैं जब तक आपको प्रदर्शन और स्मृति खपत के बीच एक अच्छा संतुलन नहीं मिलता।
जहां तक वास्तविक आर्किटेक्चर की बात है, आप वास्तव में लोडिंग / अनलोड किए जाने के निर्धारण की प्रक्रिया से डेटा को मेमोरी से लोड और अनलोड करने की प्रक्रिया को अमूर्त करना चाहते हैं। आपके पहले पुनरावृत्ति के लिए, मैं लोडिंग / अनलोडिंग के प्रदर्शन के बारे में भी चिंता नहीं करूंगा और बस सबसे सरल चीज प्राप्त कर सकता हूं जो संभवतः काम कर सकती है, और यह सुनिश्चित कर सकती है कि आप उचित समय पर उचित अनुरोधों को उत्पन्न कर रहे हैं। उसके बाद, आप अनुकूलन को देख सकते हैं कि आप कचरे को कम करने के लिए कैसे लोड करते हैं।
मैं इंजन का उपयोग करने के कारण बहुत सी अतिरिक्त जटिलता में भाग गया, लेकिन यह बहुत विशिष्ट कार्यान्वयन है। यदि आपने मेरे बारे में कोई प्रश्न किया है, तो कृपया टिप्पणी करें और मैं वह करूँगा जो मैं कर सकता हूँ।