टाइल-आधारित खेलों में दीवारें बनाना: मुझे क्या याद आ रही है?


25

मेरे टाइल-आधारित गेम में दीवारों के कार्यान्वयन के बारे में कुछ नोटों को संक्षेप में बताने के लिए आज समय बिताने के बाद, मुझे अचानक एहसास हुआ कि यह उतना आसान नहीं है जितना मैंने पहले सोचा था। हालांकि मेरे काम का वर्तमान चरण वास्तव में दीवार से संबंधित कोड बनाने के करीब नहीं है, मैं इसे करने के लिए तीन अलग-अलग तरीकों के साथ आया हूं। अभी मैं अनिश्चित हूं कि मेरा कौन सा विचार सबसे अच्छा काम करेगा, और क्या मुझे कुछ याद आया या नहीं।

महत्वपूर्ण: एक चरित्र एक टाइल पर खड़ा हो सकता है जिसमें दीवारें होती हैं, चाहे उनका रूप कुछ भी हो।

तीनों वेरिएंट के लिए सामान्य बात: टिलमैप को एकल-आयाम std :: वेक्टर (या समान) आधारित कंटेनर में "रखा" जाएगा। इसके कारण हैं (अजीब तरह से) एक अलग सवाल के जवाब में समझाया गया है।

टाइल-आधारित खेलों में कंटेनर कक्षाएं।

वापस दीवारों पर।

ए) सरल दृष्टिकोण।

यहां कुछ भी नहीं फैंसी। प्रत्येक टाइल-कंटेनर न केवल पात्रों, बल्कि एक या कई दीवार वस्तुओं को पकड़ सकता है, जो टाइल के अंदर किनारे से जुड़े होते हैं ।

पहले दृष्टिकोण

पेशेवरों: लागू करने के लिए आसान, इंजन में बदलने के लिए कुछ भी नहीं। विपक्ष: दो बातें। एक - यह सिर्फ मेरे सिर में हो सकता है, लेकिन कुछ संयोजन सिर्फ बदसूरत दिखते हैं। दूसरा - यह दृष्टिकोण दो आसन्न टाइलों से एक डबल-दीवार बनाने की अनुमति देता है। बिल्डिंग खेल का एक महत्वपूर्ण हिस्सा होगा, और डबल-दीवारें बिल्डरों को संभवतः गेम के माध्यम से दीवारों की सामग्री को अपग्रेड करने की अनुमति देती हैं, और बस मौजूदा दीवार को दोगुना करने के साथ बढ़ी हुई स्थायित्व प्राप्त करती हैं। यह वांछनीय नहीं है। निश्चित रूप से, मैं एक ऐसी प्रक्रिया को शामिल कर सकता हूं जो डबल-वॉलिंग को मना करता है, लेकिन इसके लिए एक बुरा अनुभव होगा।

बी) स्मार्ट (?) दृष्टिकोण।

खिलाड़ियों को पूरे नक्शे को दो-दीवार करने देने के बजाय, मैं उन्हें इससे हरा सकता हूं। हर दीवार में दो हिस्सों होते हैं जो अंदर से टाइल के किनारे से जुड़े होते हैं। तो, एक एकल "वॉल यूनिट" बनाने के लिए मुझे दो आसन्न टाइलों में दो हाफ-वॉल ऑब्जेक्ट बनाने होंगे।

दूसरा तरीका

पेशेवरों: यह सममित है !!! इसके अलावा, वर्तमान इंजन चश्मा के कोई महत्वपूर्ण परिवर्तन की आवश्यकता नहीं है। विपक्ष: अधिक परेशानी, अधिक वस्तुओं और, ज़ाहिर है, "कैप्स"। जैसा कि आप तस्वीर में देख सकते हैं, एक कोने मूल रूप से "कैप" ऑब्जेक्ट के लिए रोएगा। मैं वास्तव में इसके साथ कूल हूं, इसे जोड़ना इतना कठिन नहीं है। अरे, मेरे पास पहले से ही चार कनेक्टेड कैप से बने पतले कॉलम की योजना है। मिठाई। फिर भी, मुझे संभावित फील्ड ऑफ व्यू और लाइन ऑफ साइट के मुद्दों के बारे में कुछ चिंताएं हैं।

सी) कुल ओवरहाल संस्करण।

या, मैं खेल की वस्तुओं के लिए अलग-अलग कंटेनरों के रूप में बस बॉर्डर और कोने बना सकता हूं। बस असे ही।

तीसरा तरीका

पेशेवरों: यकीन भी नहीं है। खैर, यह सीधा है। निश्चित रूप से। विपक्ष: यह एक ओवरहाल की आवश्यकता होगी। कोड का नहीं, शुक्र है, लेकिन वर्तमान खेल मैकेनिक मानसिकता का - यह सुनिश्चित करने के लिए है। लाभ इतने स्पष्ट नहीं हैं। इसके अलावा, इस aprroach को पिछले दो की तुलना में बहुत अधिक कंटेनरों की आवश्यकता होती है। अनुक्रमण गणित भी थोड़ा दर्द होगा।

तो यहां हमारे पास यह है - टाइल्स के बीच दीवारें बनाने के तीन अलग-अलग तरीके। अगर वहाँ कोई विकल्प है - मैं उन्हें बाहर की जाँच करने के लिए खुश हूँ। यदि मेरे द्वारा देखे गए किसी भी दृष्टिकोण के लिए कोई लाभ / कमी नहीं है - कृपया उन्हें इंगित करें।


2
A.2: A के रूप में, केवल यही दो पक्ष - उदाहरण के लिए, उत्तर और पश्चिम - एक दीवार हो सकती है। यही दृष्टिकोण एक्स-कॉम का उपयोग करता है।
मार्टिन सोज्का

@ मॉर्टिन सोजका जो दक्षिण-पूर्व कोनों में एक छेद छोड़ता है। फिर भी, इस शैली में मॉडल सी पर विचार करना उपयोगी हो सकता है, प्रत्येक टाइल में तीन अलग-अलग दीवार तत्वों का संयोजन हो सकता है, नॉट, पश्चिम और उत्तर-पश्चिम कोने।
आआआआआआआआआआआ आआआआआ आआआ आआआआआ

तो दीवारें दिखाई पड़ती हैं, मैं ले जाता हूं? न केवल टाइलों के किनारों को अवरुद्ध करना। आपको विकल्प बी में दो हिस्सों की आवश्यकता क्यों है? सिर्फ एक दीवार, दूसरी टाइल पर आधा क्यों नहीं?
रिचर्ड मार्स्केल -

@eBusiness, अगर आप सिर्फ उत्तर और पश्चिम में दीवारों की अनुमति देते हैं, तो आप उनके नीचे टाइलों के उत्तर और पश्चिम में दीवारें डालकर दक्षिण और पूर्व में दीवारों का अनुकरण कर सकते हैं।
टेट्राड

मैं सी के साथ जाने का सुझाव देता हूं। यह मैं इस jemgine.omnisu.com/wp-content/uploads/2011/06/gnomecolony.png में कर रहा हूं और यह बहुत अच्छा काम करता है। एकमात्र समस्या नक्शे के बहुत दक्षिण / पूर्व किनारे है। आपको उसके बारे में कुछ करना होगा।
ब्लेकी

जवाबों:


14

मैं आपकी विधि 'B' का उपयोग करूँगा।

'कैप' की ज़रूरत से बचने के लिए, बस दोनों दिशाओं में प्रत्येक दीवार "1/2 दीवार मोटाई" का विस्तार करें। यह ओवरलैपिंग दीवारों का निर्माण करेगा जहां वे मिलते हैं, लेकिन आपके चित्र पहले से ही यह सुझाव देते हैं कि यह कोई समस्या नहीं है।

इसलिए, मेथड 'B', Pic # 3 में, क्षैतिज दीवार थोड़ी बाईं ओर विस्तारित होगी, और ऊर्ध्वाधर दीवार थोड़ी ऊपर बढ़ेगी।

[मैं यहाँ नया हूँ, अभी पंजीकृत हूँ। क्या मुझे कुछ याद आ रहा है, क्योंकि मैं आपकी मूल पोस्ट में 'टिप्पणी जोड़ें' बटन नहीं देख सकता। क्या यह उच्च प्रतिष्ठा वाले लोगों का विशेषाधिकार है? या मैं स्पष्ट देख रहा हूँ? इसे 'उत्तर' के रूप में जोड़ने के लिए क्षमा करें।]


1
यह एक उत्तर है, और मेरा मानना ​​है कि यह टिप्पणी करने के लिए एक 100 (?) प्रतिष्ठा का स्तर है। Gamedev एसई में आपका स्वागत है! :)
द कम्युनिस्ट डक

2

आपने नोट किया कि एक पात्र एक दीवार से युक्त टाइल पर खड़ा हो सकता है लेकिन क्या आपने प्रत्येक टाइल को दीवार के रूप में माना है? यहां तक ​​कि एक क्षैतिज या ऊर्ध्वाधर फैशन में दीवार के रूप में आधा टाइल?

पेशेवरों: गणना और प्लेसमेंट तुच्छ हैं, टकराव तुच्छ है जहां सभी गणना और टकराव सिर्फ दीवारों के प्लेसमेंट के निर्देशांक पर आधारित हैं।

विपक्ष: यह आपके संपूर्ण कार्यान्वयन, कोड और ग्राफिक्स को प्रभावित कर सकता है। आप पूरी तरह से अपनी पद्धति को छोड़ना नहीं चाहते हैं, आप अभी भी विशेष मामले चाहते हैं जहां एक टाइल का केवल एक हिस्सा दीवार है (कड़ी से अतीत के साथ लिंक)।

यह है कि मैं अपने कार्यान्वयन पर आधारित कैसे होगा, आगे जा रहा है, यह जानते हुए कि मैं हमेशा एक टाइल का संदर्भ ले सकता हूं और अपने पात्रों के स्थान और यह किस तरह का टाइल है, इसके आधार पर गणना कर सकता है।

एक महल की दीवार मैं केंद्र से एक गणना कर सकता हूं जिसमें एक बॉक्स आरेखित किया जा सकता है जिसे मैं पास नहीं कर सकता हूं या यदि इसकी एक गोल चट्टान है तो मैं केंद्र से एक ही गणना कर सकता हूं लेकिन एक सर्कल के रूप में मेरा चरित्र इस तरह से घूम सकता है। गोल।


1

कहने के लिए क्षमा करें, लेकिन तीसरा तरीका वास्तव में सोचने का तरीका है, ठीक है, आपके पास पहले से ही ऐसा करने की क्षमता है ताकि हम आगे बढ़ सकें और अन्य दो के बारे में सोच सकें!

बात यह है कि एक दीवार एक शून्य चौड़ाई, दो भिन्न (ऊंचाई * लंबाई, एक 3 डी दुनिया में) दो बक्से का विभाजन है। आपको उन्हें इस तरह से समझना चाहिए लेकिन आप एक सरल समाधान का उपयोग कर सकते हैं जैसे कि अपना कालकोठरी बनाने के लिए (खासकर यदि अन्य लोग भागों का निर्माण कर सकते हैं)।

ऐसा लगता है कि यह एक टॉप-डाउन 2 डी गेम है जहां दीवारों की "चौड़ाई" है, इसलिए उन्हें उस कोने (आपकी 'कैप' ऑब्जेक्ट) की आवश्यकता होती है। यह विशेष रूप से 'ग्राफिक्स' है, इसलिए मैं किसी प्रकार के साथ जाना चाहूंगा:

टाइल्स के साथ एक 2D नक्शा (यानी टाइल का प्रकार और इस तरह)।

2 दीवारों के साथ एक 2 डी मानचित्र, पूर्व। नीचे और दाईं ओर (बाईं दीवार इस से बाईं ओर स्थित टाइल में 'दाईं दीवार' होगी)।

+ एक तर्क जो सभी दीवारों और 'कैप्स' आदि को खींचता है।

इस प्रकार तर्क और ग्राफिक्स को अलग करना। आप SetWall (ThisTile, LEFT, NowALL) जैसी चीजों का ध्यान रखते हुए एक "इंटरफ़ेस" कर सकते हैं -> ThisTile के बाएं टाइल की दाईं दीवार को "NowALL" में सेट करें ...

हो सकता है कि यह धुँधला प्रतीत हो लेकिन बात यह है कि आपको हमेशा एक तरफ तर्क (वास्तविक डेटा, बिना अतिरेक के) के लिए प्रयास करना चाहिए और दूसरी तरफ 'आरेखण का डेटा' जो गणना करता है कि 'कैप' की आवश्यकता है या नहीं ' आदि।

++

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.