ฉันยังไม่ได้ใช้งานจริง (ดังนั้นอาจมีปัญหาบางอย่างที่ฉันไม่เห็นทันที) แต่ฉันคิดว่าฉันจะพยายามช่วย
นี่คือสิ่งที่คุณพูดว่าเกิดขึ้น:
ลูกค้า A ส่งอินพุตที่ T0
เซิร์ฟเวอร์รับอินพุตที่ T1
ลูกค้าทั้งหมดได้รับการเปลี่ยนแปลงที่ T2
อย่างไรก็ตามที่ T2 โดยใช้การคาดการณ์ของลูกค้าลูกค้า A อยู่ในตำแหน่งที่เหมาะสมกับ T4
มันอาจจะเป็นประโยชน์ในการคิดในแง่ของเวลาเซิร์ฟเวอร์ (อาจ) คล้ายกันมากกับการแก้ไขการทำงาน
ทุกคำสั่งจะถูกส่งพร้อมกับเวลาของเซิร์ฟเวอร์ เวลาของเซิร์ฟเวอร์นี้จะถูกคำนวณเมื่อเริ่มต้นการแข่งขันโดยการสอบถามการทำเครื่องหมายเซิร์ฟเวอร์และชดเชยเวลา ping ในไคลเอนต์ที่คุณมีจำนวนท้องถิ่นของคุณและแต่ละคำสั่งที่คุณส่งจะถูกแปลงเป็นเห็บเซิร์ฟเวอร์ (เป็นการดำเนินการลบแบบง่าย)
นอกจากนี้ไคลเอนต์มักจะแสดงผล "ในอดีต" ดังนั้นคุณคิดว่าโลกที่ลูกค้าเห็นคือพูดว่าอยู่เบื้องหลัง 100ms เวลาของเซิร์ฟเวอร์จริง ๆ
งั้นลองใช้ตัวอย่างของคุณใหม่กับเวลาเซิร์ฟเวอร์ (กำหนดโดย S)
ไคลเอนต์ส่งอินพุตที่ T0 พร้อมเวลาเซิร์ฟเวอร์ S0 (ซึ่งฉันคาดเดาว่าจริงๆแล้วคือ "การแสดงไคลเอ็นต์ของเวลาเซิร์ฟเวอร์ลบด้วยเวลาการแก้ไข") ลูกค้าไม่รอการตอบสนองจากเซิร์ฟเวอร์และย้ายทันที
เซิร์ฟเวอร์รับอินพุตที่ T1 เซิร์ฟเวอร์คิดออกตำแหน่งที่มีสิทธิ์ของลูกค้าในเวลาเซิร์ฟเวอร์ S0 ที่กำหนดโดยลูกค้า ส่งให้กับลูกค้า
ลูกค้าได้รับตำแหน่งที่เชื่อถือได้ที่ T2 (ยังคงมีการกำหนดเวลาของเซิร์ฟเวอร์ S0) ลูกค้าติดตามมูลค่าเวลาที่ผ่านมาของเหตุการณ์ก่อนหน้า (อาจเป็นเพียงคิวของการทำนายที่ไม่ได้รับการยืนยันทั้งหมด)
หากตำแหน่ง / ความเร็วที่คาดการณ์ / สิ่งที่เซิร์ฟเวอร์ส่งกลับไปที่ S0 นั้นแตกต่างจากสิ่งที่ลูกค้าได้เก็บไว้ที่ S0 ลูกค้าจะจัดการกับสิ่งนี้ ไม่ว่าจะโดยการสลับผู้เล่นกลับไปยังตำแหน่งที่ผ่านมาหรือปรับขนาดอินพุตก่อนหน้าหรืออาจเป็นอย่างอื่นที่ฉันไม่ได้คิด