ระบบเล่นซ้ำ: บันทึกอินพุตหรือเหตุการณ์?


9

ฉันอ่านสิ่งนี้: วิธีการออกแบบระบบเล่นซ้ำแต่มันไม่ได้ตอบคำถามของฉัน

เกมของฉันสร้างขึ้นด้วยไคลเอนต์ "ดู" ของเกมเป็นโปรแกรมแยกจากเซิร์ฟเวอร์ "รุ่น" และ "ตัวควบคุม" (บิตเช่น mmo หรือเกมที่มีผู้เล่นหลายคนสร้างขึ้นด้วยวิธีนี้) ฝั่งเซิร์ฟเวอร์เป็น "ความจริง" ของเกมเสมอยอมรับเฉพาะคำขอการกระทำเป็นข้อมูลจากลูกค้าและเหตุการณ์เอาท์พุทและข้อความ "สถานะปัจจุบัน"

รูปแบบและกฎของเกมได้รับการกำหนดอย่างสมบูรณ์ด้วยวัฏจักรการอัพเดท "ติ๊ก" ที่แน่นอนดังนั้นในฝั่งเซิร์ฟเวอร์ฉันสามารถบันทึกเหตุการณ์ที่ส่งไปยังมุมมองไคลเอนต์และคำขอการดำเนินการ ทั้งสองเกี่ยวข้องกับหมายเลขรอบเฉพาะ

คำถามคือ: ในกรณีนี้เพื่อติดตั้งระบบเล่นซ้ำฉันควรใช้อินพุตหรือคำขอการกระทำของผู้ใช้ (ตามที่แนะนำในที่นั่น) หรือเหตุการณ์?

ฉันคิดว่าทั้งคู่จะให้ผลลัพธ์ที่เหมือนกันทั้งหมด ความแตกต่างเดียวที่ฉันเห็นคือ:

  • เหตุการณ์ให้ผลผลิตจริงในขณะที่คำขอการดำเนินการจะต้องดำเนินการเพื่อให้เหตุการณ์
  • คำขอการดำเนินการอาจมีข้อมูลน้อยกว่าที่จะบันทึก

มีสิ่งอื่นที่ต้องพิจารณาอีกไหม?

คำตอบ:


5

เมื่อพิจารณาจากระบบที่กำหนดขึ้นพวกเขาจะมีเหตุผลเทียบเท่าดังนั้นข้อมูลสรุปของคุณนั้นค่อนข้างถูกต้อง อย่างไรก็ตามมีอีก 2 สิ่งที่จะทำให้ฉันมีอิทธิพลต่อการบันทึกการกระทำมากกว่าเหตุการณ์เอาท์พุท:

  1. หากคุณบันทึกการกระทำคุณสามารถใช้พวกเขาเป็นข้อมูลการทดสอบในภายหลังเนื่องจากพวกเขาใช้รหัสของคุณมากกว่าที่จะแสดงเหตุการณ์ซ้ำ สิ่งนี้สามารถช่วยในการวินิจฉัยข้อผิดพลาดความผิดพลาดการค้นหาการถดถอยเชิงพฤติกรรมระหว่างการสร้าง ฯลฯ
  2. ในอนาคตคุณอาจเปลี่ยนกิจกรรมที่คุณส่งเพื่อดำเนินการบางอย่างหรือคุณอาจส่งกิจกรรมที่แตกต่างไปยังไคลเอนต์ที่แตกต่างกันด้วยเหตุผลบางอย่าง ในกรณีนี้การเล่นซ้ำอาจไม่ถูกต้องหรือไม่สมบูรณ์ ในทางทฤษฎีแล้วปัญหาเดียวกันนี้สามารถนำไปใช้กับอินพุตได้ แต่โดยทั่วไปแล้วโดเมนของอินพุตนั้นมีข้อ จำกัด มากกว่าเอาท์พุทดังนั้นจึงมีโอกาสน้อยที่จะเปลี่ยนแปลงและง่ายต่อการรองรับเมื่อใช้ร่วมกันได้ (อินพุตถูก จำกัด สิ่งที่ผู้เล่นและแหล่งอินพุตอื่น ๆ (เช่นตัวสร้างตัวเลขสุ่ม) สามารถทำได้ในขณะที่เอาต์พุตนั้นรวมผลลัพธ์ทั้งหมดของอินพุตเหล่านั้นบวกกับเอาต์พุตอื่น ๆ ที่สร้างโดยกฎของเกมเช่นคำแนะนำการนำเสนอเซิร์ฟเวอร์เป็นระยะ - เหตุการณ์ข้างเคียง ฯลฯ )

คะแนนที่ดีโดยเฉพาะอย่างยิ่งคนแรก ฉันลืมเกี่ยวกับการใช้งานนี้ แต่มันมีประโยชน์มาก
Klaim

บิงโกโดยเฉพาะใน # 1 หากฉันมีเวลาในการสร้างระบบการบันทึกอินพุตฉันจะสามารถบันทึกทุกการทดสอบรวมถึงตรวจจับข้อบกพร่องที่ยากต่อการทำซ้ำ ความสามารถในการโหลดบันทึก "กรณีที่หายาก" เหล่านี้อีกครั้งทำให้การตรวจพบข้อผิดพลาดได้ง่ายขึ้นในขณะที่คุณก้าวผ่านโค้ดของคุณ
ChrisC

1

ใช้ได้ทั้งสองอย่างแม้ว่าจะมีบางสิ่งที่ต้องพิจารณา

ก่อนอื่นจำไว้ว่าคุณต้องบันทึกข้อมูลเวลา สำหรับเกมที่มีอัตราเฟรมตัวแปรใด ๆ สิ่งนี้อาจเป็นเรื่องยากอย่างยิ่ง คุณต้องมั่นใจว่าข้อมูลการเล่นซ้ำของคุณสามารถให้ข้อมูลเวลาเดียวกันกับที่เกมใช้ในการจำลอง

คุณต้องคำนึงถึงการปรับแต่งพฤติกรรมของเกมด้วย หากคุณบันทึกอินพุตและปรับแต่งส่วนใด ๆของวิธีการจัดการอินพุตวิธีแก้ไขฟิสิกส์และอื่น ๆ การบันทึกของคุณจะไม่ถูกต้อง แม้ว่าคุณจะบันทึกเหตุการณ์ในเกมหากส่วนใดส่วนหนึ่งของวิธีที่เหตุการณ์เหล่านั้นตีความการเปลี่ยนแปลงคุณยังคงติดอยู่

หากคุณเพียงแค่ต้องการเล่นวิธีที่ดีคือการบันทึกรายการตำแหน่งและการหมุนเฉพาะสำหรับเอนทิตีของผู้เล่นพร้อมกับข้อมูลเวลา ปิดการใช้งานฟิสิกส์และตรรกะการเล่นเกมอื่น ๆ ให้มากที่สุดในขณะที่ใช้งานการเล่นเท่าที่จะทำได้ ความง่ายหรือความเป็นไปได้นี้ขึ้นอยู่กับจำนวนวัตถุอื่นที่คุณต้องการซิงค์


ในคำถามที่ฉันระบุว่ารูปแบบเกมที่กำหนดอย่างเต็มที่ ไม่มีการเปลี่ยนแปลงทางฟิสิกส์และอัตราเฟรมจะเห็นได้เฉพาะฝั่งไคลเอ็นต์ไม่ใช่ในรูปแบบเกมที่ขึ้นอยู่กับ "ขีด"
Klaim
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.