2
ระบบสแนปชอตของเกมจะใช้งานอย่างไรสำหรับเกมเรียลไทม์บนเครือข่าย
ฉันต้องการสร้างเกมแบบเรียลไทม์แบบมัลติ - เพลย์เยอร์ไคลเอ็นต์เซิร์ฟเวอร์เป็นโปรเจ็กต์สำหรับคลาสเครือข่ายของฉัน ฉันได้อ่านมากมายเกี่ยวกับโมเดลเครือข่ายผู้เล่นหลายคนแบบเรียลไทม์และฉันเข้าใจความสัมพันธ์ระหว่างไคลเอนต์กับเซิร์ฟเวอร์และเทคนิคการชดเชยความล่าช้า สิ่งที่ฉันต้องการทำคือสิ่งที่คล้ายกับโมเดลเครือข่าย Quake 3: โดยทั่วไปแล้วเซิร์ฟเวอร์จะเก็บภาพรวมของสถานะเกมทั้งหมด เมื่อได้รับข้อมูลจากลูกค้าเซิร์ฟเวอร์จะสร้างสแน็ปช็อตใหม่ที่สะท้อนถึงการเปลี่ยนแปลง จากนั้นจะคำนวณความแตกต่างระหว่างสแน็ปช็อตใหม่และสแน็ปช็อตสุดท้ายและส่งไปยังไคลเอนต์เพื่อให้สามารถซิงค์ได้ วิธีการนี้ดูเหมือนจะแข็งแกร่งสำหรับฉัน - หากไคลเอนต์และเซิร์ฟเวอร์มีการเชื่อมต่อที่เสถียรจะมีการส่งข้อมูลจำนวนเล็กน้อยที่จำเป็นเพียงเล็กน้อยเพื่อให้ข้อมูลตรงกัน หากไคลเอ็นต์ไม่ซิงค์กันคุณสามารถร้องขอสแน็ปช็อตเต็มรูปแบบได้เช่นกัน อย่างไรก็ตามฉันไม่สามารถหาวิธีที่ดีที่จะใช้ระบบ snapshot ฉันพบว่ามันยากมากที่จะย้ายออกจากสถาปัตยกรรมการเขียนโปรแกรมผู้เล่นเดี่ยวและคิดว่าฉันจะเก็บสถานะของเกมในลักษณะที่: ข้อมูลทั้งหมดจะถูกแยกออกจากตรรกะ สามารถคำนวณความแตกต่างระหว่างสแน็ปช็อตของสถานะเกม เอนทิตีของเกมสามารถจัดการได้อย่างง่ายดายผ่านรหัส ว่าเป็นภาพรวมระดับการดำเนินการ? เอนทิตีและข้อมูลถูกจัดเก็บอย่างไร เอนทิตีของลูกค้าทุกคนมีรหัสที่ตรงกับ ID บนเซิร์ฟเวอร์หรือไม่ คำนวณความแตกต่างของสแนปชอตได้อย่างไร โดยทั่วไป: ระบบสแนปชอตของเกมจะมีการนำไปใช้อย่างไร