कुछ नेटवर्क गेम इंटरपोलेशन का उपयोग क्यों करते हैं और कुछ रिमोट मूवमेंट के लिए पाथफाइंडिंग का उपयोग करते हैं?


21

यह एक खुला सवाल है, लेकिन मैं किसी को दोनों के लिए एक अच्छे तर्क का योगदान देखना चाहता हूं।

दोनों के त्वरित उदाहरण के लिए:

प्रक्षेप मॉडल

वाल्व मॉडल के बारे में सोचें जहां क्लाइंट को बार-बार पोजिशन अपडेट मिल रहे हैं और रीमोट्स इस डेटा पर इंटरपोलेशन का उपयोग करके अपनी स्थिति को अपडेट करते हैं।

रास्ता पाना

इस मॉडल में, लगता है कि उपयोगकर्ता एक गंतव्य भेजता है और हर कोई इसे भेजता है।

किस प्रकार के खेल प्रत्येक के लिए उपयुक्त हैं और प्रत्येक को कब उपयोग करना चाहिए?


2
क्या यह जीडीएसई के लिए बहुत व्यापक नहीं है?
Kromster का कहना है कि

@KromStern मैं इसके साथ संघर्ष करता था, इसलिए "खुला प्रश्न" हालांकि, मुझे लगता है कि यह पर्याप्त और उद्देश्यपूर्ण रूप से केंद्रित है कि दोनों को करने में अनुभव वाले किसी व्यक्ति को इसका उद्देश्य उत्तर देने में सक्षम हो सकता है। अपने उत्थान /
पतन के

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

1
नियंत्रण एक बड़ा हिस्सा हैं। क्या आप WASD या जॉयस्टिक का उपयोग कर रहे हैं? प्रक्षेप अच्छी तरह से फिट बैठता है। माउस के साथ लक्ष्य गंतव्य पर क्लिक करना? पथ-खोज बहुत बेहतर लगता है।
लूआन

जवाबों:


43

मैंने दो वास्तविक समय एएए नेटवर्क वाले खेलों के लिए नेटवर्किंग कोड, एक स्मार्टफोन के लिए और एक हैंडहेल्ड कंसोल के लिए काम किया है।

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

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

दो संभावनाओं के बजाय, मैं कठिन और नरम अपडेट के बीच एक स्पेक्ट्रम का प्रस्ताव करना चाहूंगा।

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

    इस पद्धति के साथ, नेटवर्क देरी देरी से अपडेट के रूप में दिखाई देगी और चारों ओर कूदने वाले पात्रों के रूप में प्रकट होगी।

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

  • सिंक्रनाइज़ेशन अपडेट के साथ हार्ड अंतर / एक्सट्रपलेशन के साथ कठिन के समान हैं, लेकिन केवल सिंक्रनाइज़ेशन की शायद ही कभी आवश्यकता होती है। आपको इसका उपयोग ऐसे डेटा के लिए करना चाहिए जो वास्तव में अंतर / एक्सट्रपलेट करने के लिए तुच्छ हो, जैसे कि एक लड़ाई के खेल में घड़ी (दोनों तरफ एक बार सेट होने के बाद, इसे फिर से सिंक्रनाइज़ करने के लिए वास्तव में आवश्यक नहीं है)

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

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

    डेटा अपडेट की योजना बनाना स्वयं भी उतना ही कठिन / नरम हो सकता है जितना आप चाहते हैं, निश्चित रूप से।

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

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

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


1
यह कुछ गुणवत्ता अंतर्दृष्टि है। बचा लिया और धराशायी हो गया।
जित्सू

विजेता के लिए खराब हो जाता है, जानकारीपूर्ण उत्तर के लिए धन्यवाद!
वॉन हिल्ट्स

3

मुझे वाल्व की विकास प्रक्रिया पर कोई अंतर्दृष्टि नहीं है, इसलिए यह विशुद्ध रूप से मेरी राय है, लेकिन:

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

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

एक बार फिर, मैंने कभी नेटवर्क गेम या बड़े गेम स्टूडियो के लिए काम नहीं किया है, लेकिन जो मैंने कभी-कभी पढ़ा है, वह है कि मैं इसके बारे में कैसे जाऊंगा :)


0

पांडा पाजामा जवाब बहुत अच्छा है।

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

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

हालाँकि उन्होंने एक विधि का उल्लेख नहीं किया। मजबूरन परिणाम।

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

एक वास्तविक विश्व उदाहरण एक होल्डिंग पैटर्न में अन्य सभी इकाइयाँ हैं जो यह सुनिश्चित करने के लिए कि मुझे उचित मुआवजा भेजा गया है।

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