मल्टीप्लेयर कार्यान्वयन, क्या मैं इसे बाद में लागू कर सकता हूं यदि मैंने चुना है?


15

मैं एक गेम प्रोजेक्ट बनाने के लिए XNA का उपयोग करने की योजना बना रहा हूं। मुझे इस समय पूरी तरह से यकीन नहीं है कि क्या मैं मल्टीप्लेयर कार्यक्षमता को जोड़ना चाहता हूं या नहीं, मुझे लगता है कि मुझे अभी भी नया है कि हल करने के लिए कई अन्य समस्याएं हैं। मैं नहीं चाहता कि परियोजना जरूरी रूप से हाथ से निकल जाए।

मेरा सवाल है, अगर मैं मल्टीप्लेयर सपोर्ट को जोड़ने की कोई योजना के साथ अपने प्रोजेक्ट में शामिल हूं, तो क्या पीछे की ओर जाना आसान है (यह आमतौर पर नहीं है) और मल्टीप्लेयर गेम को पकड़ने के लिए आवश्यक कोड जोड़ते हैं?

जवाबों:


24

यहाँ Zoidcom नेटवर्किंग लाइब्रेरी मैनुअल से ली गई ध्वनि सलाह है :

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

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

इसका मतलब यह है कि एक एकल गेम में भी, पृष्ठभूमि में एक अदृश्य सर्वर चल रहा है। उसी गेम के मल्टीप्लेयर संस्करण को स्थानीय वन एट वॉयला के बजाय रिमोट सर्वर से कनेक्ट करने की आवश्यकता है, मल्टीप्लेयर किया गया। इसके फायदे हैं:

एकल और मल्टीप्लेयर के लिए कोई अलग कोड नेटवर्क कोड का परीक्षण और विकास पूरे प्रोजेक्ट क्लीन कोड के दौरान नहीं किया जाता है

इस योजना का उपयोग करने वाले प्रोजेक्ट्स लगभग सभी गेम हैं जो कि किसी भी क्वेक इंजन, सभ्यता 4, नेवरविन नाइट्स और कई अन्य का उपयोग कर रहे हैं।

क्लाइंट और सर्वर को एक ही प्रक्रिया में शून्य विलंबता से जोड़ने के लिए, स्थानीय सॉकेट्स का उपयोग किया जा सकता है। ये Zoidcom और पास पैकेट द्वारा प्रदान किए जाते हैं सीधे एक ZCom_Control से दूसरे में, ओएस स्तर के सॉकेट के माध्यम से जाने के बिना।


ऐसा लगता है कि यह शुद्ध सर्वर प्राधिकरण के लिए एक सेटअप है जिसे मैं नफरत करता हूं। यदि सर्वर पर आपका पिंग कम है तो यह ठीक चलता है। लेकिन जब पिंग बहुत अधिक हो जाता है, तो आपके स्क्रीन पर होने वाले कार्यों में देरी हो जाती है। मैं उस विधि को बहुत पसंद करता हूं जो स्रोत इंजन का उपयोग करता है, ग्राहक भौतिक विज्ञान और चीजों को स्थानीय रूप से चलाता है और कोई भी कार्रवाई तुरंत दिखाई देती है, लेकिन सर्वर अभी भी यह सुनिश्चित करने के लिए जांचता है कि लोग हैकिंग नहीं कर रहे हैं, और यदि कोई गड़बड़ी हुई है तो क्या होना चाहिए। सर्वर खिलाड़ी को सही स्थिति भेजता है और नए डेटा के साथ क्लाइंट सिमुलेशन को ओवरराइड करता है।
अटैकिंगहोबो

8
@AttackingHobo: आप बस ग्राहक भविष्यवाणी का वर्णन कर रहे हैं। आपके पास क्लाइंट की भविष्यवाणी और सर्वर प्राधिकरण एक साथ ठीक हो सकते हैं, और यह Zoidcom मैनुअल में वर्णित वास्तुकला को बिल्कुल भी नहीं रोकता है।

@AttackingHobo @Joe: और Zoidcom वास्तव में क्लाइंट-साइड भविष्यवाणी का समर्थन करता है ^ ^
लेफ्टियम

2

मैं वामपंथी के जवाब में दी गई सलाह से सहमत हूं; इसे शुरू से नेटवर्किंग के लिए डिज़ाइन करें, क्योंकि आप इसे बाद में जोड़ नहीं पाएंगे

पहली बार जब मैंने मल्टीप्लेयर गेम बनाने की कोशिश की (मैं एक भी खिलाड़ी गेम बनाने की कोशिश नहीं कर रहा था!), मुझे लगा कि मैं पहले गेम को काम करूंगा और फिर नेटवर्किंग जोड़ूंगा। बुरा विचार। मैं एक बहुत उबाऊ एकल खिलाड़ी खेल के प्रोटोटाइप के साथ छोड़ दिया गया था और कोई सुराग नहीं कि कैसे इसे मल्टीप्लेयर गेम में बदलना है। मैंने इसे पूरी तरह से खत्म कर दिया और शुरू कर दिया, इस बार शुरू से ही मल्टीप्लेयर नेटवर्किंग कोड लिखना। सब कुछ क्लिक किया।

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

मुझे लगता है कि एक मध्य मैदान है (हालांकि मैंने कभी इसकी कोशिश नहीं की है)। आप नेटवर्किंग / मल्टीप्लेयर सुविधाओं के लिए कुछ डमी कक्षाएं लिख सकते हैं, और एकल खिलाड़ी गेम लिख रहे हैं। फिर बाद में, यदि आप मल्टीप्लेयर को लागू करने का निर्णय लेते हैं, तो बस डमी कक्षाओं को भरें और आप सबसे अधिक काम करेंगे। यह बहुत ही सर्वर / क्लाइंट विधि से संपर्क करता है, लेकिन आप कम काम से दूर हो सकते हैं; आखिरकार, एक एकल खिलाड़ी खेल मल्टीप्लेयर गेम की तुलना में बनाना आसान है, इसलिए यदि आप अपने एकल खिलाड़ी गेम को मल्टीप्लेयर गेम की तरह लिखने जा रहे हैं तो क्यों न इसे मल्टीप्लेयर बनायें?

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