एक वास्तविक समय मल्टीप्लेयर platformer खेल बनाने में क्या शामिल है?


13

मैं एक प्लेटफ़ॉर्म गेम बना रहा हूं जिसमें "सहकारी" सुविधा है जो मैं नेटवर्क / इंटरनेट पर काम करना चाहता हूं।

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

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

यह क्लाइंट की भविष्यवाणी को छोड़ देता है, लेकिन यहां तक ​​कि एक प्लेटफ़ॉर्मर जैसे सरल गेम के लिए यह अभी भी बहुत जटिल लगता है।

मैं एक मल्टीप्लेयर प्लेटफ़ॉर्म गेम के लिए काम करने वाले क्लाइंट प्रेडिक्टिव सिस्टम बनाने के बारे में कैसे जाऊँगा?


1
एक चीज़ जो आपको सहकारी खेल में धोखा देने के बारे में चिंता करने के लिए बहुत कम होगी;)
जोनाथन कॉनेल

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

-1, "कितना काम" व्यक्तिपरक है।
तेतराद

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

@Tetrad क्षमा करें - मैंने इस प्रश्न को यथासंभव उद्देश्यपूर्ण बनाने की बहुत कोशिश की, लेकिन मेरा प्रश्न "वाई के खेल के लिए एक वर्किंग क्लाइंट प्रेडिक्टिव सिस्टम बनाना मुश्किल है" - अगर नहीं तो मैं जैसा मैं सीखूँगा जाओ, लेकिन मेरा समय इतना सीमित है कि एक्स के खेलने के बाद बहुत अधिक काम सीखने में बहुत देर हो चुकी है। मैं Y पर अधिक जानकारी देने का प्रयास करूंगा, लेकिन मैं इस प्रश्न को "बहुत स्थानीयकृत" नहीं करना चाहता। यहां मुख्य समस्या आंदोलन है, जो सभी प्लेटफ़ॉर्मर्स के लिए आम है (मैं चाहता हूं कि अन्य लोग इस प्रश्न को उपयोगी समझें)। अगर मैं इस सवाल को सुधार सकता हूं तो सुझावों की सराहना की जाएगी।
जस्टिन

जवाबों:


5

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

मेरी राय में, ऐसा करने का सबसे सरल तरीका, एक "केंद्रीय" सर्वर सेटअप करना है (भले ही इसका मतलब है कि एक खिलाड़ी खेल को "होस्ट" और फिर अपने स्वयं के सर्वर से जोड़ता है) जो सभी उपयोगकर्ता इनपुट को जितनी जल्दी हो सके स्वीकार करता है , और इसे प्रत्येक ग्राहक को वापस भेजता है।

क्लाइंट पर, आप इसे अलग तरीके से लागू नहीं करते हैं यदि आप दो खिलाड़ियों के लिए स्थानीय रूप से सह-ऑप खेल कर रहे थे, जब आप कीबोर्ड से पी 1 और नेटवर्क से पी 2 पढ़ते हैं।

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


जो क्लाइंट सर्वर के दृष्टिकोण के रूप में आसान है (एक क्लाइंट को छोड़कर सर्वर को होस्ट करता है -> आपको एक समर्पित सर्वर की आवश्यकता नहीं है लेकिन आपको कुछ लाइन यूडीपी + एनएटी पंचथ्रू पर जाना होगा जिसमें किसी भी तरह से एक समर्पित सर्वर की आवश्यकता होती है)। दूसरे, आप लॉकस्टेप पद्धति का प्रस्ताव करते हैं (जैसा कि आप पूरी तरह से गेमस्टेट्स भेजने के बारे में बात कर रहे हैं), यह नहीं है, IMHO, सबसे अच्छा तरीका अगर गेम इंटरनेट पर चलता है (यह संभवतः लैन पर है हालांकि) जहां क्लाइंट-सर्वर बहुत आसान है लागू करने के लिए।
वैलमंड

1
नहीं, मैं सुझाव दे रहा हूं कि आप कभी-कभार पूर्ण गेम स्टेट्स भेजते हैं, इसलिए क्लाइंट यह सुनिश्चित कर सकता है कि यह बहुत दूर नहीं है।
नैट

2

मेरे पास क्लाइंट प्रेडिक्शन के साथ एक पूरी तरह से कार्यशील mMORPG स्टाइल गेम है (गेम समाप्त होने से बहुत दूर है, लेकिन यह 'ओके' चलाता है) और मेरे पास सर्वर के लिए कोड की 40.000 लाइनें और क्लाइंट के लिए डबल (टूल आदि के लिए समान राशि जोड़ें) है। ।)। भविष्यवाणी शायद कुछ सौ लाइनों (यदि वह भी है) से अधिक नहीं है और पूरे नेटवर्क में कुछ हजार लाइनें हैं लेकिन 5.000 से अधिक नहीं कहते हैं (यह थोड़ा निर्भर करता है कि आप कहां रेखा खींचते हैं)।

फजी सवाल फजी जवाब ;-)


2

नेटवर्किंग कोड का एक महत्वपूर्ण अनुपात उस गेम से स्वतंत्र हो सकता है जो आप खेल रहे हैं। उसके कारण, और क्योंकि आप नेटवर्किंग के लिए नए हैं, पहली बात जो मैं आपको सुझाऊंगा वह है पुस्तकालयों को खोजना जो आपके लिए वह काम करेंगे। उदाहरण के लिए RakNet।

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

यह भी ध्यान दें कि यदि आप अजनबियों को इंटरनेट पर सहकर्मी का खेल खेलने के लिए प्राप्त करना चाहते हैं, तो आपको शायद कम से कम एक सर्वर की आवश्यकता होगी जो लॉबी / मैचमेकिंग को संभालता है।

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