मैं अपने गेम इंजन का एक छोटा सा हिस्सा पढ़ रहा हूं और सोच रहा हूं कि कुछ हिस्सों को कैसे अनुकूलित किया जाए।इस स्थिति के लिए बिडरेक्शनल डेटा संरचना
स्थिति काफी सरल है और यह निम्नलिखित है:
- मैं
Tile
रों का एक नक्शा (एक द्वि-आयामी सरणी में संग्रहीत) है (~ 260k टाइल्स, लेकिन कई और अधिक मान) - मैं
Item
रों की एक सूची है जो हमेशा कम से कम और अधिक से अधिक एक टाइल में हैं - एक
Tile
तार्किकItem
रों - की अनंत राशि शामिल कर सकते हैं खेल निष्पादन के दौरान कई
Item
निरंतर कर रहे हैं ly बनाया है और वे अपने स्वयं से शुरूTile
- हर
Item
लगातार बदलता है पड़ोसियों में से एक (ऊपर, ठीक है, नीचे, बाएं)
अप करने के लिए अपने Tile
अब हर Item
अपने वास्तविक Tile
के लिए एक संदर्भ है करने के लिए , और मैं सिर्फ वस्तुओं की एक सूची रखता हूं। प्रत्येक बार Item
एक आसन्न टाइल पर जाता है, मैं बस item->tile = ..
अद्यतन करता हूं और मैं ठीक हूं। यह ठीक काम करता है लेकिन यह unidirectional है।
इंजन को विस्तारित करते समय मुझे एहसास हुआ कि मुझे कई बार टाइल में निहित सभी आइटम मिलना है और यह प्रभावी रूप से प्रदर्शन को कम कर रहा है (विशेष रूप से कुछ परिस्थितियों के लिए, जिसमें मुझे टाइल्स की एक श्रृंखला के लिए सभी आइटम मिलना है, एक एक करके)।
इसका मतलब यह है मैं एक विशिष्ट Tile
के सभी आइटम्स हे (एन) में की तुलना में बेहतर लगता है उपयुक्त डेटा संरचना प्राप्त करना चाहते हैं, लेकिन मैं "करने के लिए एक टाइल से बढ़ने में ज्यादा भूमि के ऊपर से बचने के लिए चाहते हैं एक और "चरण (अब यह सिर्फ एक सूचक को असाइन कर रहा है, मैं वहां कई परिचालनों से बचना चाहता हूं, क्योंकि यह काफी बार होता है)।
मैं इस तथ्य का फायदा उठाने के लिए एक कस्टम डेटा संरचना के बारे में सोच रहा हूं कि आइटम हमेशा पड़ोसी सेल में जाते हैं लेकिन मैं वर्तमान में अंधेरे में घूम रहा हूं! किसी भी सलाह की सराहना की जाएगी, यहां तक कि मुश्किल या गुप्त दृष्टिकोण भी। दुर्भाग्य से मैं सिर्फ स्मृति बर्बाद नहीं कर सकता, इसलिए एक अच्छा व्यापार-बंद करने की आवश्यकता है।
मैं इसे सी ++ में एसटीएल के साथ विकसित कर रहा हूं लेकिन बिना बूस्ट के। (हाँ, मैं के बारे में multimap
पता है, यह मेरे को संतुष्ट नहीं है, लेकिन मैं अगर मैं कुछ भी बेहतर नहीं मिलता कोशिश करता हूँ)
'टाइल 'नक्शा पहले से ही एक कच्चे द्विपक्षीय सूचक है, उदाहरण के लिए। 'टाइल मैप [WIDTH] [HEIGHT] 'इसलिए मेरे पास पूरे मानचित्र में यादृच्छिक पहुंच है, लेकिन मैं प्रत्येक टाइल के लिए आइटमों की एक सूची नहीं लेना चाहता क्योंकि ये आइटम दुर्लभ हैं और यह एक बड़े क्षेत्र पर कब्जा नहीं करता है नक्शा खुद .. – Jack
यह सिर्फ खराब डिजाइन की तरह लगता है। सबसे पहले निश्चित आकार के सरणी से छुटकारा पाएं, और एक उचित इंटरफेस के साथ एक वेक्टर का उपयोग करें, दूसरी बार वेक्टर या जो भी स्थानीय रूप से देकर 'टाइल' अपने सामान बनाते हैं। – 111111
यह एक बुरा डिजाइन नहीं है, पूरी दुनिया के लिए मानचित्र की आवश्यकता है। प्रत्येक टाइल आइटम की वजह से नहीं बल्कि कई अन्य चीजों के कारण मौजूद होना चाहिए। जैसा कि मैंने कहा था कि यह इंजन का एक छोटा टुकड़ा है :) – Jack