ฉันกำลังสร้างระบบเกมวัตถุ component-based เคล็ดลับบางอย่าง:
GameObject
Components
เป็นเพียงรายการGameSubsystems
มี ยกตัวอย่างเช่นการแสดงผลฟิสิกส์ ฯลฯ แต่ละมีตัวชี้ไปยังบางส่วนของGameSubsystem
เป็นนามธรรมที่ทรงพลังและยืดหยุ่นมาก: มันแสดงถึงส่วนใด ๆ ของเกม (หรือแง่มุม)Components
GameSubsystem
มีความต้องการในกลไกของการลงทะเบียนComponents
ในGameSubsystems
(เมื่อGameObject
ถูกสร้างและสงบ) มี4 วิธีคือ:
- 1: รูปแบบของความรับผิดชอบ ทุกคนมีให้แก่ทุกคน
Component
ตัดสินใจในการลงทะเบียน (และวิธีการจัดระเบียบ) ตัวอย่างเช่น GameSubsystemRender สามารถลงทะเบียน Renderable Components ได้GameSubsystem
GameSubsystem
Components
มือโปร. Components
ไม่รู้อะไรเกี่ยวกับวิธีการใช้งาน คลัปต่ำ A.GameSubsystem
เราสามารถเพิ่มใหม่ ตัวอย่างเช่นให้เพิ่ม GameSubsystemTitles ที่ลงทะเบียน ComponentTitle ทั้งหมดและรับประกันว่าทุกชื่อจะไม่ซ้ำกันและมีส่วนต่อประสานในการสอบถามวัตถุตามชื่อ แน่นอน ComponentTitle ไม่ควรเขียนใหม่หรือสืบทอดในกรณีนี้ B.GameSubsystems
เราสามารถจัดระเบียบที่มีอยู่ ตัวอย่างเช่น GameSubsystemAudio, GameSubsystemRender, GameSubsystemParticleEmmiter สามารถผสานเข้ากับ GameSubsystemSpatial (เพื่อวางเสียง emmiter ทั้งหมดให้Components
อยู่ในลำดับชั้นเดียวกันและใช้การแปลงแบบญาติสัมพันธ์)
แย้ง ทุกการตรวจสอบ ไม่มีประสิทธิภาพมาก
แย้ง รู้เกี่ยวกับSubsystems
Components
- 2:
Subsystem
การค้นหาแต่ละComponents
ประเภทที่เฉพาะเจาะจง
มือโปร. Approach 1
ประสิทธิภาพที่ดีขึ้นกว่าใน
แย้ง ยังรู้เกี่ยวกับSubsystems
Components
- 3: ลงทะเบียนตัวเองใน
Component
GameSubsystem(s)
เรารู้เวลารวบรวมว่ามี GameSubsystemRenderer ดังนั้น ComponentImageRender จะเรียกสิ่งที่เรียกว่า GameSubsystemRenderer :: register (ComponentRenderBase *)
มือโปร. ประสิทธิภาพ. Approach 1
ไม่มีการตรวจสอบที่ไม่จำเป็นในขณะที่
แย้ง เป็นคู่ที่ไม่ดีด้วยComponents
GameSubsystems
- 4: รูปแบบคนกลาง
GameState
(ที่มีGameSubsystems
) สามารถใช้ registerComponent (Component *)
มือโปร. Components
และGameSubystems
ไม่รู้อะไรเกี่ยวกับกันและกัน
แย้ง ใน C ++ มันจะดูน่าเกลียดและช้า typeid-switch
คำถาม:
วิธีใดดีกว่าและส่วนใหญ่ใช้ในการออกแบบที่อิงส่วนประกอบ สิ่งที่ฝึกพูด ข้อเสนอแนะใด ๆ เกี่ยวกับการใช้Approach 4
?
ขอขอบคุณ.
Components
ในการGameObjects
อยู่นอกขอบเขตของคำถามของฉัน อ่านบทความเกี่ยวกับวิธีการใช้ส่วนประกอบหรือถามคำถามของคุณเองในเว็บไซต์นี้หากคุณสนใจ สิ่งที่คุณคิดว่าGameSubsystem
ผิดทั้งหมด