ฉันกำลังทำงานกับเอ็นจิ้นเกมมัลติเพลเยอร์เซิร์ฟเวอร์ 2D (ซึ่งคุณสามารถลองได้ที่นี่ ) มันใช้ WebRTC DataChannel
s (การเชื่อมต่อแบบเพียร์ทูเพียร์ แต่โฮสต์เพียร์ยังคงทำหน้าที่เป็นเซิร์ฟเวอร์)
ปัญหาที่ใหญ่ที่สุด (นอกเหนือจากการเชื่อมต่อ) คือการคาดการณ์อินพุตในเครื่อง เราทำตามปกติ: เมื่อกดปุ่มผู้เล่นจะย้ายทันทีบอกโฮสต์ว่ากดคีย์ใดรับข้อมูลกลับจากโฮสต์และเปรียบเทียบกับตำแหน่งทางประวัติศาสตร์ ตำแหน่งได้รับการแก้ไขเมื่อเวลาผ่านไปหากมีความแตกต่าง วิธีนี้ใช้ได้ดีกับการสูญเสียแพ็กเก็ตต่ำหรือPDVแม้ว่า ping จะสูง
หากมีการสูญเสียหรือ PDV ส่วนเบี่ยงเบนอาจมีขนาดใหญ่กว่า ฉันคิดว่าเป็นเพราะถ้าแพ็กเก็ตแรกที่ระบุว่าการเปลี่ยนแปลงของอินพุทล่าช้าหรือหลุดโฮสต์จะค้นพบในภายหลังและเริ่มเปลี่ยนผู้เล่นนั้นช้ากว่าเพรดิตันของพวกเขาในพื้นที่
หากผู้เล่นเคลื่อนไหวเราจะเพิ่มจำนวนการแก้ไขที่นำไปใช้เนื่องจากมันเป็นสิ่งที่น่าสังเกตน้อยกว่า สิ่งนี้ดูเหมือนจะปกปิดช่องว่างเมื่อเริ่มเคลื่อนที่และขณะเคลื่อนที่ อย่างไรก็ตามการแก้ไขใด ๆ ที่น่าสังเกตมากขึ้นถ้าพวกเขามาหยุดทันที จากนั้นหาก PDV หรือการสูญเสียหมายความว่าโฮสต์คิดว่าพวกเขาหยุดในเวลาต่อมาโฮสต์ overshoots ส่งข้อมูลกลับบอกว่าพวกเขากำลังไปข้างหน้าเล็กน้อยและการแก้ไขทำให้ผู้เล่นดริฟท์เล็กน้อย ในการเชื่อมต่อที่ไม่สม่ำเสมอผู้เล่นมักจะล่องลอยหลังจากหยุด
ฉันไม่ได้สังเกตเรื่องนี้ในเกมอื่น สิ่งนี้จะบรรเทาลงได้อย่างไร