खिलाड़ी की गति में परिवर्तन करते समय मैं क्लाइंट और सर्वर को कैसे सिंक करूं?


10

मैं क्लाइंट-साइड भविष्यवाणी लागू कर रहा हूं। अधिकांश स्पष्टीकरण यह मानते हैं कि ग्राहक " मेरे खिलाड़ी को 1 स्थिति से ऊपर ले जाएँ " जैसे संदेश भेजता है । क्या होगा अगर मैं " मेरे खिलाड़ी का वेग x पर सेट करूँ " जैसे संदेश भेजूँ ?

व्याख्यात्मक ग्राफिक;  समय के साथ क्लाइंट और सर्वर पर भेजे गए संदेश और कम्प्यूटेड स्थिति दिखाना

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

मैं इससे कैसे निपट सकता हूं?

जवाबों:


8

आपको अनावश्यक डेटा भेजना चाहिए, जिसका अर्थ है कि स्थिति और वेग भेजें। यहां तक ​​कि अगर आप सिंक से बाहर हैं, तो तथ्य यह है कि आपके पास स्थिति है और वेग आपको प्रक्षेपवक्र फ़ंक्शन का उपयोग करके प्रक्षेपवक्र को सही करने की अनुमति देता है।

फिर विलंबित एनिमेशन, त्वरण आदि जैसे कुछ ट्रिक का उपयोग करके विलंबता को छिपाने की अनुमति मिलती है।

संपादित करें: मैं मानता हूं कि सर्वर आधिकारिक है।


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

1
@ user13842 क्लाइंट हमेशा सिंक से बाहर निकलेगा, आपको क्लाइंट साइड पोजिशन और स्पीड को सही करना चाहिए, जैसे कि थेलविन ने कहा कि सर्वर आपको क्या भेजता है। इस तरह से आपको हकलाने की गति नहीं मिलती है जब तक कि आपका ग्राहक पूरी तरह से बाहर नहीं है, तब आपको मूल्यों को स्नैप करना होगा क्योंकि सुधार में बहुत अधिक समय लगेगा।
dreta

यह एक प्रक्षेप समारोह का उपयोग करने का मुख्य कारण है। आप विलंबता से बच नहीं सकते, इसलिए आपको आंदोलन को सुचारू रूप से सही करना होगा। क्लाइंट और सर्वर दुनिया का अनुकरण करते हैं लेकिन क्लाइंट को सर्वर को सुनना और सुधार करना होता है। सोर्स इंजन नेटवर्किंग में उपयोग की जाने वाली कुछ तकनीकें: developer.valvesoftware.com/wiki/Source_MultICE_Networking
Thelvyn

इस गूगल टॉक में भी इसका संक्षेप में उल्लेख किया गया है, इसे youtube.com/watch?v=Prkyd5n0P7k#t=18m47s
dreta

Ive को इस विशेष समस्या का एक और समाधान मिला। मैं उस समय को जोड़ता हूं जब ग्राहक प्रत्येक पैकेट के साथ अपना इनपुट लागू करता है। अर्थ # 1 का समय होगा: 0 और दूसरी बार: 100। अब सर्वर जानता है कि क्लाइंट ने समय पर बटन दबाया: 100 और इससे पहले नहीं।
Blu3
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.