मैंने वास्तव में इसे लागू नहीं किया है (इसलिए कुछ समस्याएं हो सकती हैं जिन्हें मैं तुरंत नहीं देख रहा हूं), लेकिन मुझे लगा कि मैं मदद करने की कोशिश करूंगा।
यहां आपने जो कहा वह हो रहा है:
क्लाइंट A, T0 पर इनपुट भेजता है
सर्वर T1 पर इनपुट प्राप्त करता है
सभी क्लाइंट T2 पर परिवर्तन प्राप्त करते हैं
T2 पर, क्लाइंट भविष्यवाणी का उपयोग करते हुए, क्लाइंट A अब T4 के लिए उपयुक्त स्थिति में है।
शायद सर्वर के समय के संदर्भ में सोचना उपयोगी होगा। इसका (शायद) बहुत ही समान है कि प्रक्षेप कैसे काम करता है।
हर कमांड को सर्वर टाइम के साथ भेजा जाता है। यह सर्वर समय एक मैच की शुरुआत में सर्वर टिक के लिए क्वेरी करके, पिंग समय के लिए क्षतिपूर्ति करके लगा है। क्लाइंट पर आपके पास अपनी स्थानीय टिक संख्या होती है, और आपके द्वारा भेजे जाने वाले प्रत्येक कमांड को सर्वर टिक में बदल दिया जाता है (यह एक साधारण घटाव ऑपरेशन है)
इसके अलावा, क्लाइंट हमेशा "अतीत में" प्रस्तुत कर रहा है। तो आप यह मान लेते हैं कि ग्राहक जिस दुनिया को देखता है, वह कहता है कि सर्वर का समय वास्तव में क्या है।
तो चलिए आपके उदाहरण को सर्वर टाइम (S द्वारा निर्दिष्ट) के साथ फिर से जोड़ते हैं।
क्लाइंट T0 पर सर्वर समय S0 के साथ इनपुट भेजता है (जो मैं अनुमान लगा रहा हूं वह वास्तव में "सर्वर टाइम माइनस इंटरपोलेशन टाइम का क्लाइंट प्रतिनिधित्व है")। क्लाइंट सर्वर से प्रतिक्रिया का इंतजार नहीं करता है और तुरंत चला जाता है।
सर्वर T1 पर इनपुट प्राप्त करता है। क्लाइंट द्वारा दिए गए सर्वर समय S0 पर सर्वर के ग्राहक की आधिकारिक स्थिति के आंकड़े। क्लाइंट को भेजता है।
क्लाइंट T2 पर आधिकारिक स्थिति प्राप्त करता है (अभी भी सर्वर समय S0 के पदनाम के साथ)। ग्राहक पिछली घटनाओं के समय की कुछ पिछली राशि का ट्रैक रखता है (शायद सभी अपुष्ट भविष्यवाणियों की सिर्फ एक कतार)।
यदि अनुमानित स्थिति / वेग / जो कुछ भी सर्वर S0 पर वापस भेजता है वह ग्राहक द्वारा S0 में संग्रहीत किए गए से भिन्न है, तो क्लाइंट इसे किसी भी तरह से संभालता है। या तो खिलाड़ी को उनके पिछले स्थान पर वापस भेज दिया जाए, या पिछले इनपुट का पुनरुत्पादन किया जाए, या शायद कुछ और जो मैंने नहीं सोचा है।