ฉันมีคำถามเกี่ยวกับสถาปัตยกรรมเกม: วิธีที่ดีที่สุดในการสื่อสารด้วยส่วนประกอบต่าง ๆ กันคืออะไร?
ฉันขอโทษจริง ๆ ถ้าคำถามนี้ถูกถามไปแล้วนับล้านครั้ง แต่ฉันไม่สามารถหาข้อมูลใด ๆ ที่ฉันต้องการได้
ฉันพยายามสร้างเกมตั้งแต่เริ่มต้น (C ++ ถ้าเป็นเรื่องสำคัญ) และได้สังเกตซอฟต์แวร์เกมโอเพ่นซอร์สเพื่อเป็นแรงบันดาลใจ (Super Maryo Chronicles, OpenTTD และอื่น ๆ ) ฉันสังเกตเห็นว่าการออกแบบเกมเหล่านี้จำนวนมากใช้อินสแตนซ์ระดับโลกและ / หรือซิงเกิลตันทั่วสถานที่ (สำหรับสิ่งต่าง ๆ เช่นการเรนเดอร์คิวผู้จัดการเอนทิตีผู้จัดการวิดีโอและอื่น ๆ ) ฉันพยายามหลีกเลี่ยงอินสแตนซ์ระดับโลกและซิงเกิลตันและสร้างเครื่องยนต์ที่มีการเชื่อมโยงอย่างหลวม ๆ เท่าที่จะเป็นไปได้ แต่ฉันตีสิ่งกีดขวางบางอย่าง (ส่วนหนึ่งของแรงจูงใจสำหรับโครงการนี้คือการแก้ไขปัญหานี้ :))
ฉันได้สร้างการออกแบบที่มีGameCore
วัตถุหลักหนึ่งชิ้นที่มีสมาชิกที่คล้ายกับอินสแตนซ์ทั่วโลกที่ฉันเห็นในโครงการอื่น ๆ (เช่นมีตัวจัดการอินพุตผู้จัดการวิดีโอวิดีโอGameStage
วัตถุที่ควบคุมเอนทิตีและการเล่นเกมทั้งหมด สำหรับขั้นตอนใดก็ตามที่โหลดอยู่ ฯลฯ ) ปัญหาคือเนื่องจากทุกอย่างรวมอยู่ในGameCore
วัตถุฉันไม่มีวิธีง่าย ๆ สำหรับส่วนประกอบต่าง ๆ ในการสื่อสารซึ่งกันและกัน
ยกตัวอย่างเช่นเมื่อมองจาก Super Maryo Chronicles เมื่อใดก็ตามที่ส่วนประกอบของเกมต้องการสื่อสารกับส่วนประกอบอื่น (เช่นวัตถุศัตรูต้องการเพิ่มตัวเองลงในคิวการเรนเดอร์ที่จะดึงออกมาในช่วงเรนเดอร์) อินสแตนซ์ระดับโลก
สำหรับฉันฉันต้องให้วัตถุเกมของฉันส่งข้อมูลที่เกี่ยวข้องกลับไปยังGameCore
วัตถุเพื่อให้GameCore
วัตถุสามารถส่งข้อมูลนั้นไปยังส่วนประกอบอื่น ๆ ของระบบที่ต้องการ (เช่น: สำหรับสถานการณ์ข้างต้นวัตถุศัตรูแต่ละชิ้น จะส่งข้อมูลการเรนเดอร์กลับไปยังGameStage
วัตถุซึ่งจะรวบรวมข้อมูลทั้งหมดและส่งกลับไปยังGameCore
ซึ่งจะส่งผ่านไปยังเครื่องมือจัดการวิดีโอเพื่อทำการเรนเดอร์) นี่ให้ความรู้สึกเหมือนการออกแบบที่น่ากลัวจริง ๆ และฉันก็พยายามที่จะคิดวิธีแก้ปัญหานี้ ความคิดของฉันเกี่ยวกับการออกแบบที่เป็นไปได้:
- อินสแตนซ์ส่วนกลาง (การออกแบบของ Super Maryo Chronicles, OpenTTD และอื่น ๆ )
- มี
GameCore
วัตถุที่ทำหน้าที่เป็นคนกลางที่วัตถุทั้งหมดสื่อสาร (การออกแบบปัจจุบันอธิบายไว้ข้างต้น) - มอบพอยน์เตอร์ให้กับส่วนประกอบอื่น ๆ ทั้งหมดที่พวกเขาจะต้องพูดคุยด้วย (เช่นในตัวอย่าง Maryo ด้านบนคลาสศัตรูจะมีตัวชี้ไปยังวัตถุวิดีโอที่จำเป็นต้องพูดคุยด้วย)
- แบ่งเกมออกเป็นระบบย่อย - ตัวอย่างเช่นมีวัตถุผู้จัดการใน
GameCore
วัตถุที่จัดการการสื่อสารระหว่างวัตถุในระบบย่อยของพวกเขา - (ตัวเลือกอื่น? ....)
ฉันจินตนาการถึงตัวเลือก 4 ด้านบนเพื่อเป็นทางออกที่ดีที่สุด แต่ฉันมีปัญหาในการออกแบบ ... อาจเป็นเพราะฉันคิดในแง่ของการออกแบบที่ฉันเคยเห็นว่าใช้ก้อนกลม ฉันรู้สึกว่าฉันกำลังประสบปัญหาเดียวกันกับที่มีอยู่ในการออกแบบปัจจุบันของฉันและจำลองมันในแต่ละระบบย่อยเพียงในระดับที่เล็กลง ตัวอย่างเช่นGameStage
วัตถุที่อธิบายไว้ข้างต้นนั้นค่อนข้างพยายาม แต่GameCore
วัตถุนั้นยังคงมีส่วนร่วมในกระบวนการ
ใครช่วยเสนอคำแนะนำการออกแบบที่นี่ได้ไหม
ขอบคุณ!