सबसे पहले, मुझे कहना है कि 2D आरपीजी मेरे दिल के पास और प्यारे हैं और पुराने DX7 VB6 MORPG इंजन के साथ काम कर रहे हैं (हंसो मत, यह 8 साल पहले था, अब :-)) क्या मुझे पहले खेल के विकास में दिलचस्पी है । हाल ही में, मैंने XNA का उपयोग करने के लिए उन इंजनों में से एक में काम करने वाले खेल को बदलना शुरू किया।
उस ने कहा, मेरी सिफारिश है कि आप अपने नक्शे के लिए लेयरिंग के साथ एक टाइल-आधारित संरचना का उपयोग करें। आपके द्वारा उपयोग किए जाने वाले किसी भी ग्राफिक्स एपीआई के साथ, आप अपने द्वारा लोड किए जाने वाले बनावट के आकार की सीमा तय कर सकते हैं। ग्राफिक्स कार्ड बनावट मेमोरी सीमा का उल्लेख नहीं करना। इसलिए, इस पर विचार करते हुए, यदि आप अपने मैप्स के आकार को अधिकतम करना चाहते हैं, तो न केवल आपके द्वारा मेमोरी में लोड किए गए बनावट की मात्रा और आकार को कम करना बल्कि उपयोगकर्ता की हार्ड ड्राइव और लोड समय पर अपनी संपत्ति का आकार घटाना, आप निश्चित रूप से टाइल्स के साथ जाना चाहते हैं।
जहाँ तक कार्यान्वयन होता है, मैंने विस्तार से जाना है कि कैसे मैंने इसे GameDev.SE और अपने ब्लॉग (दोनों लिंक पर नीचे) पर कुछ सवालों पर संभाला है, और यह बिल्कुल वैसा नहीं है जैसा आप पूछ रहे हैं। यहां मूल बातों में जाएं। मैं उन टाइलों की विशेषताओं पर भी ध्यान दूंगा जो उन्हें कई बड़ी पूर्व-प्रदत्त छवियों को लोड करने में लाभदायक बनाती हैं। अगर कुछ भी स्पष्ट नहीं है, तो मुझे बताएं।
- पहली चीज जो आपको करने की ज़रूरत है वह एक टाइलशीट बनाना है। यह सिर्फ एक बड़ी छवि है जिसमें आपकी सभी टाइलें ग्रिड में संरेखित हैं। यह (और शायद टाइल्स की संख्या के आधार पर एक अतिरिक्त) केवल एक चीज होगी जिसे आपको लोड करने की आवश्यकता है। सिर्फ 1 छवि! आप खेल में हर टाइल के साथ 1 प्रति नक्शा या एक लोड कर सकते हैं; जो भी संगठन आपके लिए काम करता है।
- अगला, आपको यह समझने की आवश्यकता है कि आप उस "शीट" को कैसे ले सकते हैं और प्रत्येक टाइल को एक संख्या में अनुवाद कर सकते हैं। यह कुछ सरल गणित के साथ बहुत सीधा है। ध्यान दें कि यहाँ विभाजन पूर्णांक विभाजन है , इसलिए दशमलव स्थानों को गिरा दिया जाता है (या यदि आप चाहें तो इसे नीचे किया जा सकता है)।
ठीक है, अब जब आपने टाइल्सशीट को कोशिकाओं (संख्याओं) की एक श्रृंखला में तोड़ दिया है, तो आप उन नंबरों को ले सकते हैं और आपको जो भी कंटेनर पसंद है, उसमें प्लग कर सकते हैं। सादगी के लिए, आप बस एक 2 डी सरणी का उपयोग कर सकते हैं।
int[,] mapTiles = new int[100,100]; //Map is 100x100 tiles without much overhead
अगला, आप उन्हें आकर्षित करना चाहते हैं। उन तरीकों में से एक जो आप इसे बहुत अधिक कुशल बना सकते हैं (मानचित्र आकार के आधार पर) केवल उन कोशिकाओं की गणना करना है जो कैमरा वर्तमान में देख रहा है और उन के माध्यम से लूप करता है। आप ऐसा कैमरा के ऊपरी-बाएँ ( tl
) और नीचे-दाएं ( br
) कोनों के मानचित्र टाइल सरणी निर्देशांक को प्राप्त करके कर सकते हैं । फिर लूप से tl.X to br.X
और, एक नेस्टेड लूप में, tl.Y to br.Y
उन्हें खींचने के लिए। नीचे उदाहरण कोड:
for (int x = tl.X; x <= br.X;x++) {
for (int y = tl.Y; y <= br.Y;y++) {
//Assuming tileset setup from image
Vector2 tilesetCoordinate = new Vector2((mapTiles[x,y] % 8) * 32,(mapTiles[x,y] / 8) * 32);
//Draw 32x32 tile using tilesetCoordinate as the source x,y
}
}
- जैकपॉट! यह टाइल इंजन की मूल बातें है। आप देख सकते हैं कि 1000x1000 का मैप होना बहुत आसान है, जिसमें ज्यादा ओवरहेड नहीं है। इसके अलावा, यदि आपके पास 255 से कम टाइलें हैं, तो आप प्रति सेल 3 बाइट्स द्वारा मेमोरी को काटने के लिए बाइट सरणी का उपयोग कर सकते हैं। यदि एक बाइट बहुत छोटा है, तो एक सूदखोर शायद आपकी जरूरतों के लिए पर्याप्त होगा।
नोट: मैंने दुनिया के निर्देशांक की अवधारणा को छोड़ दिया (जो कि आपके कैमरे की स्थिति पर आधारित होगा) उसके बाद से, मुझे लगता है, इस उत्तर के दायरे से बाहर है। आप GameDev.SE पर यहाँ उस पर पढ़ सकते हैं।
मेरा टाइल-इंजन संसाधन
नोट: ये सभी XNA पर लक्षित हैं, लेकिन यह किसी भी चीज़ पर बहुत अधिक लागू होता है - आपको बस ड्रॉ कॉल को बदलने की आवश्यकता है।
- इस सवाल का मेरा जवाब यह बताता है कि मैं अपने खेल में मैप सेल्स और लेयरिंग को कैसे हैंडल करता हूँ। (तीसरा लिंक देखें।)
- इस सवाल का मेरा जवाब बताता है कि मैं डेटा को बाइनरी प्रारूप में कैसे संग्रहीत करता हूं।
- यह पहला (अच्छा, तकनीकी रूप से दूसरा, लेकिन पहला "तकनीकी") ब्लॉग पोस्ट है जिस खेल के विकास के बारे में मैं काम कर रहा था। पूरी श्रृंखला में पिक्सेल शेड्स, प्रकाश व्यवस्था, टाइल व्यवहार, आंदोलन और उस सभी मज़ेदार सामान जैसी चीजों के बारे में जानकारी है। मैंने वास्तव में अपने उत्तर की सामग्री को मेरे द्वारा ऊपर पोस्ट की गई पहली लिंक में शामिल करने के लिए अपडेट किया है, इसलिए आप इसके बजाय इसे पढ़ना चाह सकते हैं (मैंने चीजें जोड़ ली हैं)। यदि आपके कोई प्रश्न हैं, तो आप वहाँ या यहाँ एक टिप्पणी छोड़ सकते हैं और मुझे मदद करने में खुशी होगी।
अन्य टाइल-इंजन संसाधन
- इस साइट से टाइल इंजन ट्यूटोरियल ने मुझे अपने नक्शे बनाने के लिए उपयोग किए जाने का आधार दिया।
- मैंने वास्तव में इन वीडियो ट्यूटोरियल को अभी तक नहीं देखा है क्योंकि मेरे पास समय नहीं है, लेकिन वे शायद सहायक हैं। :) यदि आप XNA का उपयोग कर रहे हैं, तो वे पुराने हो सकते हैं।
- इस साइट में कुछ और ट्यूटोरियल हैं (मुझे लगता है) उपरोक्त वीडियो पर आधारित हैं। यह जाँच के लायक हो सकता है।