XNA में केवल कुछ संसाधनों का निपटान?


13

XNA 4.0 में ContentManager के पास केवल एक Unload () मेथड है जो सभी Assets को Unloads करता है।

मैं कुछ "ग्लोबल" एसेट्स रखना चाहता हूं जो हमेशा लोड होते हैं, लेकिन फिर मैं प्रति-लेवल एसेट्स चाहता हूं जो लेवल चेंज होने पर अनलोड हो।

क्या मुझे Level.cs वर्ग के हिस्से के रूप में ContentManager का दूसरा उदाहरण बनाना चाहिए? या मुझे Game.Content का उपयोग करना चाहिए और फिर कॉल करना चाहिए। क्या मैं एसेट्स लोड करता हूं? या मुझे यहां उल्लिखित ReadAsset फ़ंक्शन के शीर्ष पर अपना खुद का ContentManager बनाना चाहिए ?

जवाबों:


12

का दूसरा उदाहरण बनाएँ ContentManager

आपको उन चीजों से कभी नहीं लेना चाहिए Dispose()जिन्हें आप सामग्री प्रबंधक (डिफ़ॉल्ट कार्यान्वयन का उपयोग करके) से लोड करते हैं, क्योंकि ये उदाहरण साझा और पुन: उपयोग किए जाते हैं।

ContentManager का अपना संस्करण बनाना ऑर्थोगोनल की तरह है। किसी भी तरह से आप ContentManager (या इससे प्राप्त एक वर्ग) का दूसरा उदाहरण बना सकते हैं। इसलिए यदि मौजूदा कार्यान्वयन आपके उद्देश्यों के अनुकूल है - तो इसका उपयोग करें, अन्यथा जो आप बदलना चाहते हैं उसे ओवरराइड करें।

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


5
+1 और अगली बार यहां लिंक करने के लिए अपने आप को एक याद दिलाएं कि कोई मुझे यह बताने की कोशिश करता है कि संपत्ति प्रबंधकों के लिए सिंगलटन पैटर्न कितना बढ़िया है।

मुझे XNA वेब साइट पर गेम स्टेट मैनेजमेंट डेमो भी मिला, जो वास्तव में इसका उपयोग करता है (1 वैश्विक सामग्री प्रबंधक और स्क्रीन पर एक 2 की आवश्यकता होती है)। बहुत सहज ज्ञान युक्त नहीं है, लेकिन यह :) करूँगा
माइकल Stum
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.