ฉันใช้ดาวเคราะห์น้อยแบบผู้เล่นหลายคนเพื่อเรียนรู้เกี่ยวกับสถาปัตยกรรมเครือข่ายไคลเอ็นต์ / เซิร์ฟเวอร์ในเกม ฉันใช้เวลาในการอ่านสิ่งพิมพ์ของ GafferOnGames และ Valve บนเทคโนโลยีไคลเอ็นต์ / เซิร์ฟเวอร์ของพวกเขา ฉันมีปัญหากับสองแนวคิด
ขณะนี้ฉันมีเซิร์ฟเวอร์เกมจำลองสถานการณ์จริงที่มี box2d และส่งสถานะของโลกให้กับลูกค้าประมาณ 20 ครั้งต่อวินาที ลูกค้าแต่ละรายติดตามสแน็ปช็อตสองสามครั้งสุดท้ายที่ได้รับและ lerps ระหว่างสองสถานะเพื่อให้การเคลื่อนไหวของสไปรต์ราบรื่นขึ้น อย่างไรก็ตามมันไม่ราบรื่น มันอาจจะราบรื่นสักพักหนึ่งแล้วก็กระตุกนิดหน่อยจากนั้นก็กลับมาราบรื่น ฯลฯ ฉันลองทั้ง TCP และ UDP แล้วทั้งคู่ก็เหมือนกัน ความคิดใดที่ปัญหาของฉันอาจเป็นอย่างไร (หมายเหตุ: ฉันใช้สิ่งนี้กับผู้เล่นคนแรกก่อนและการเคลื่อนไหวของสไปรต์นั้นราบรื่นที่ 60fps เมื่ออัปเดตโลกฟิสิกส์เพียง 20 ครั้งต่อวินาที)
เพื่อที่จะแก้ปัญหาแรกฉันคิดว่าบางทีไคลเอนต์ควรรันการจำลอง box2d ด้วยเช่นกันและเพียงแค่อัปเดตตำแหน่งของสไปรต์เพื่อให้ตรงกับสแนปชอตของเซิร์ฟเวอร์เมื่อพวกเขาไม่ตรงกัน ฉันคิดว่านี่อาจราบรื่นกว่าเนื่องจากการใช้ผู้เล่นคนเดียวของฉันราบรื่น นี่เป็นความคิดที่ดีหรือไม่?
แม้ว่ามันจะไม่สามารถแก้ไขปัญหาข้างต้นได้มันจำเป็นสำหรับการทำนายลูกค้าหรือไม่? ตัวอย่างเช่นหากผู้เล่นพยายามเคลื่อนย้ายเรือของพวกเขาพวกเขาจะรู้ได้อย่างไรว่าพวกเขายิงยานอวกาศดาวเคราะห์ผนังหรือศัตรูโดยไม่มีการจำลองทางฟิสิกส์? ดูเหมือนว่าเรือของพวกเขาจะปรากฏขึ้นเพื่อผ่านวัตถุที่มันควรจะชนกันก่อนที่พวกเขาจะได้รับสแนปชอตจากเซิร์ฟเวอร์ที่ระบุว่าพวกเขาชนกับวัตถุ
ขอบคุณ!