मैं एक ओपन-वर्ल्ड सिंगल-प्लेयर आरपीजी बना रहा हूं जिसमें दुनिया ज्यादातर अलग-अलग क्षेत्रों से बना है, जो स्केलेबिलिटी के लिए खंडों में विभाजित हैं। दुनिया में ऐसे प्राणी होते हैं जो एक दूसरे के साथ बातचीत करते हैं। अधिकांश प्राणियों में अन्य प्राणियों के संदर्भ होंगे, संभवतः अन्य क्षेत्रों में प्राणियों सहित। being
के लिए वर्ग ऐसाखेल की दुनिया में अनलोड किए गए ऑब्जेक्ट्स के संदर्भों को संग्रहीत करना और पुनर्प्राप्त करना
class Being {
weak_ptr<Being> target;
// other members
};
बेशक लग सकता है, मैं बचाने के लिए और करने के लिए और डिस्क से खेल राज्य लोड करने में सक्षम होने की जरूरत है। अब, मैं हर समय सभी प्राणियों को लोड नहीं करना चाहता हूं। मैं केवल उन प्राणियों को लोड करना चाहता हूं जो खिलाड़ी के पास हैं या सबसे खराब, वर्तमान में लोड किए गए क्षेत्र में सभी प्राणियों को लोड करना चाहते हैं। इसे पूरा करने के लिए एक अच्छी रणनीति क्या है? यहां कुछ विचार हैं जिन्हें मैंने अभी तक फेंक दिया है।
- डिस्क पर, प्राणी प्रत्येक संदर्भित व्यक्ति के लिए एक अद्वितीय पहचानकर्ता स्टोर करेंगे। चूंकि ए को लोड किया जा रहा है, यदि संदर्भित बी बी को पहले ही लोड कर दिया गया है, तो पॉइंटर बस सेट हो गया है। यदि बी अनलोड किया गया है, तो इसे भी लोड किया जाना चाहिए। नकारात्मकता यह है कि यह कई प्राणियों को फिर से लोड कर सकता है जिनका उपयोग सीधे नहीं किया जा सकता है।
- वास्तविक पॉइंटर्स वाले प्राणियों के बजाय, उनमें पहचानकर्ता शामिल होंगे। फिर संदर्भित प्राणियों का उपयोग किया जाता है (उदाहरण के लिए, यदि किसी अन्य लक्ष्य को नुकसान पहुंचाने की आवश्यकता है), तो उन्हें केवल आवश्यकतानुसार लोड किया जाएगा। यह संदर्भों का उपयोग करके जटिल है और इसमें अधिक बचत/लोड संचालन का कारण बनने की क्षमता है, लेकिन यह अनावश्यक डेटा लोड करने से बचाता है।
क्या इन विकल्पों के बेहतर विकल्प हैं? मुझे कल्पना है कि यह एक आम समस्या है, लेकिन मैं SO पर संबंधित प्रश्न नहीं ढूंढ पा रहा हूं।
आपका दृष्टिकोण वास्तव में वस्तुओं की कैशिंग है। आप यहां एक नजर डाल सकते हैं: http://stackoverflow.com/questions/17807805/how-to-cache-1000s-of-large-c-objects मुख्य प्रश्न यह है कि वस्तुओं को लोड करने के लिए इसे कैसे कुशल बनाना है, क्योंकि यह उनकी स्थिति पर निर्भर करता है न कि उनकी आईडी पर। – Christophe