จะชดเชยการเคลื่อนย้ายวัตถุด้วยการทำนายฝั่งไคลเอ็นต์ได้อย่างไร
ผมดำเนินการเซิร์ฟเวอร์เกมที่สนับสนุนดาวควบคุมเหมือนกันพัลวัน ดังนั้นคุณต้องมีเรือที่บินและยิงด้วยฟิสิกส์ความเร็ว / การเร่งความเร็ว / ลดแรงกระแทกที่ง่ายที่สุดในการขับเคลื่อนการเคลื่อนไหว ฉันได้อ่าน Valve, Gafferon และ Gambetta และใช้อัลกอริทึมของ Gambettaเพื่อการคาดการณ์ลูกค้า: การทำนายลูกค้าทำงานบนเรือของผู้เล่นโดยอัพเดทตำแหน่งจากเซิร์ฟเวอร์ตามที่มาและจากนั้นนำอินพุตที่ยังไม่ได้ประมวลผลโดยเซิร์ฟเวอร์ไปยังผู้เล่น น่าเสียดายที่เกมของฉันใช้งานไม่ได้ ฉันเชื่อว่ามันเกี่ยวข้องกับความจริงที่ว่าตัวอย่างของ Gambetta ไม่ได้คำนึงถึงวัตถุที่เคลื่อนไหวอยู่แล้วหรือคำสั่งที่ได้รับการปรับปรุงทีละขั้นตอน (โดย "ขั้นตอน" ฉันหมายถึงเฟรม) ดังนั้นในเกมของฉันผู้เล่นกดขึ้นเพื่อเร่งการส่ง (ที่กำลังเคลื่อนไหว) ซึ่งยังคงเคลื่อนที่บนไคลเอนต์ส่งคำสั่งไปยังเซิร์ฟเวอร์และมักจะได้รับสแนปช็อตโลกจากเซิร์ฟเวอร์ในขั้นตอนถัดไป ฉันได้รับสิ่งที่ชอบมากขึ้น: คำสั่ง player รันที่ไคลเอ็นต์ขั้นตอน 3แต่บนเซิร์ฟเวอร์จะรันที่เซิร์ฟเวอร์ขั้นตอนที่ 5เท่านั้น เมื่อถึงเวลาที่ลูกค้าได้รับสแนปชอตของโลกในขั้นตอนที่ 6ลูกค้าการคาดการณ์จะถูกปิดโดยเฉพาะอย่างยิ่งในความเร็วที่เร็วขึ้น ปมของปัญหาคือว่าลูกค้ารันคำสั่งในขั้นตอนที่ 5แต่เซิร์ฟเวอร์ทำงานมันในขั้นตอนที่ 6 ฉันคิดถึงการส่งขั้นตอนไคลเอนต์ด้วยคำสั่งและให้เซิร์ฟเวอร์ย้อนกลับและเรียกใช้คำสั่งอีกครั้งด้วยขั้นตอนเวลาของไคลเอ็นต์ สิ่งนี้อาจนำไปสู่ปัญหาอื่น ๆ ที่เกิดขึ้นเช่น - สิ่งที่เกิดขึ้นกับคำสั่งที่ได้รับตั้งแต่การย้อนกลับหรือการโกงลูกค้าสามารถใช้ประโยชน์จากการเปลี่ยนขั้นตอนการส่ง การอ่านและการดูวิดีโอเช่นนี้จาก Google กล่าวถึงวิธีการที่แตกต่างกันซึ่งคุณจะค่อยๆเปลี่ยนตำแหน่งผู้เล่นเพื่อให้ตรงกับภาพรวมในไม่กี่ขั้นตอน คำถามของฉัน: คุณสามารถทำให้อัลกอริทึมของ Gambetta ทำงานกับการเคลื่อนที่แบบสเต็ปคงที่ได้หรือไม่? หรือมันขัดกับแนวคิดของเกมของฉัน? การแก้ไขแบบค่อยเป็นค่อยไปเหนือขั้นตอนเป็นวิธีที่ถูกต้องหรือไม่? …