मैं एक 2D सर्वर-क्लाइंट मल्टीप्लेयर गेम इंजन पर काम कर रहा हूं (जिसे आप यहां आज़मा सकते हैं )। यह WebRTC DataChannel
s का उपयोग करता है । (कनेक्शन पीयर-टू-पीयर हैं, लेकिन होस्ट पीयर अभी भी सर्वर के रूप में कार्य करता है।)
सबसे बड़ी समस्या (कनेक्टिविटी के अलावा) स्थानीय इनपुट भविष्यवाणी है। हम सामान्य रूप से करते हैं: कुंजी प्रेस पर, खिलाड़ी तुरंत चलते हैं, मेजबान को बताते हैं कि किस कुंजी को दबाया जाता है, मेजबान से डेटा वापस प्राप्त करें और इसे ऐतिहासिक स्थिति से तुलना करें। अंतर होने पर समय के साथ स्थिति को ठीक किया जाता है। यह कम पैकेट नुकसान या पीडीवी के साथ अच्छी तरह से काम करता है , भले ही पिंग अधिक हो।
यदि नुकसान या पीडीवी है, तो विचलन बड़ा हो सकता है। मुझे लगता है कि ऐसा इसलिए है क्योंकि यदि पहला पैकेट इनपुट में बदलाव का संकेत देता है, तो देरी हो जाती है या गिर जाती है, मेजबान को बाद में पता चलता है, और बाद में उस खिलाड़ी को अपने स्थानीय इनपुट पेडिकिटोन शो से बदलना शुरू कर देता है।
यदि खिलाड़ी आगे बढ़ रहा है, तो हम लागू सुधार की मात्रा को क्रैंक करते हैं, क्योंकि यह कम ध्यान देने योग्य है। यह शुरू होने पर और चलते समय अंतराल को कवर करने के लिए लगता है। हालांकि, किसी भी सुधार में अधिक ध्यान देने योग्य है यदि वे अचानक रोकते हैं। फिर अगर PDV या नुकसान का मतलब है कि मेजबान को लगता है कि वे बाद में रुक गए हैं, तो मेजबान ओवरशूट डेटा को यह कहते हुए वापस भेज देता है कि वे थोड़ा आगे हैं, और सुधार खिलाड़ी को थोड़ा बहाव देता है। परतदार कनेक्शन पर, खिलाड़ी अक्सर एक स्टॉप पर आने के बाद ध्यान से बहाव करते हैं।
मैंने अन्य खेलों में इस पर ध्यान नहीं दिया है। इसे कैसे कम किया जा सकता है?