จะรักษาโครงสร้างข้อมูลให้ตรงกันบนเครือข่ายได้อย่างไร?
บริบท ในเกมที่ฉันกำลังทำอยู่ (เรียงลำดับจากจุดและคลิกการผจญภัยกราฟิก) ทุกอย่างที่เกิดขึ้นในโลกของเกมจะถูกควบคุมโดยตัวจัดการแอ็คชั่นที่มีโครงสร้างคล้าย: ตัวอย่างเช่นหากผลลัพธ์ของการตรวจสอบวัตถุควรทำให้ตัวละครพูดว่าสวัสดีเดินนิดหน่อยแล้วก็นั่งลงฉันก็วางไข่โค้ดต่อไปนี้: var actionGroup = actionManager.CreateGroup(); actionGroup.Add(new TalkAction("Guybrush", "Hello there!"); actionGroup.Add(new WalkAction("Guybrush", new Vector2(300, 300)); actionGroup.Add(new SetAnimationAction("Guybrush", "Sit")); สิ่งนี้จะสร้างกลุ่มการกระทำใหม่ (ทั้งบรรทัดในภาพด้านบน) และเพิ่มลงในผู้จัดการ กลุ่มทั้งหมดจะถูกดำเนินการแบบขนาน แต่การกระทำภายในแต่ละกลุ่มจะถูกล่ามโซ่ไว้ด้วยกันเพื่อให้กลุ่มที่สองเริ่มต้นหลังจากที่กลุ่มแรกเสร็จสิ้น เมื่อการกระทำสุดท้ายในกลุ่มเสร็จสิ้นกลุ่มจะถูกทำลาย ปัญหา ตอนนี้ฉันต้องทำซ้ำข้อมูลนี้ทั่วทั้งเครือข่ายเพื่อให้ผู้เล่นทุกคนเห็นสิ่งเดียวกันในเซสชั่นผู้เล่นหลายคน การทำให้การกระทำแต่ละอย่างเป็นอันดับไม่ใช่ปัญหา แต่ฉันเป็นผู้เริ่มต้นแน่นอนเมื่อพูดถึงเรื่องเครือข่ายและฉันมีคำถามสองสามข้อ ฉันคิดว่าเพื่อความเรียบง่ายในการสนทนานี้เราสามารถสรุปองค์ประกอบของ action manager ให้ง่ายขึ้น: var actionManager = new List<List<string>>(); ฉันจะเก็บเนื้อหาของโครงสร้างข้อมูลด้านบนให้ตรงกันระหว่างผู้เล่นทุกคนได้อย่างไร นอกจากคำถามหลักแล้วฉันยังมีข้อกังวลอื่นอีกสองสามข้อที่เกี่ยวข้อง (เช่นความหมายที่เป็นไปได้ทั้งหมดของปัญหาเดียวกันข้างต้น): ถ้าฉันใช้สถาปัตยกรรมเซิร์ฟเวอร์ / ไคลเอนต์ (หนึ่งในผู้เล่นที่ทำหน้าที่เป็นทั้งเซิร์ฟเวอร์และไคลเอนต์) และหนึ่งในไคลเอนต์ได้วางกลุ่มของการกระทำเขาควรเพิ่มพวกเขาโดยตรงไปยังผู้จัดการหรือส่งคำขอเท่านั้น ไปยังเซิร์ฟเวอร์ซึ่งจะสั่งให้ลูกค้าทุกคนเพื่อเพิ่มกลุ่มที่ ? …