สำหรับโครงการปัจจุบันของฉันฉันดำเนินการองค์ประกอบระบบ / นิติบุคคลตามพื้นต่อไปมากที่สุดของการปฏิบัติที่ดีที่สุดที่มีอยู่ในนี้พื้นที่ค่อนข้างไม่ได้กำหนด
ดังนั้นฉันจึงได้ (ขยายออกไปเล็กน้อย) เอนทิตีซึ่งโดยทั่วไปแล้วจะเป็นint
ID, ชื่อที่มนุษย์อ่านได้, std::map
ของคอมโพเนนต์และlong
"ตัวบ่งชี้ประเภท" ซึ่งใช้เพื่อแสดงองค์ประกอบที่มีอยู่ (ฉันมีพลังสองenum
สำหรับองค์ประกอบทั้งหมด ประเภทและเมื่อใดก็ตามที่มีการเพิ่มองค์ประกอบลงในเอนทิตีฉันจะแก้ไขความยาวนั้นโดยอัตโนมัติผ่านการดำเนินการระดับบิตเปรียบเทียบคำตอบนี้ )
จากนั้นมีส่วนประกอบซึ่งค่อนข้างง่าย: int
ID enum
เป็นประเภทส่วนประกอบตัวชี้ Entity หลักและstd::map
คุณสมบัติทั้งหมดที่มีอยู่ในคอมโพเนนต์นี้
ในที่สุดระบบ / ผู้จัดการที่จัดการกับการประมวลผลเชิงตรรกะ พวกเขาตรวจสอบก่อนว่า Entity ที่ประมวลผลในปัจจุบันมีการจับคู่long
"type indicator" = ส่วนประกอบที่จำเป็นทั้งหมดสำหรับระบบนั้นมีอยู่หรือไม่ จากนั้นจะเข้าถึงคุณสมบัติบางอย่างถ้าจำเป็นและเรียกใช้ฟังก์ชันบางอย่างโดยตรงในองค์ประกอบที่เกี่ยวข้องหรือส่งข้อความบางอย่าง (ผ่านตัวแจกจ่ายข้อความ)
Bottom-line:จนกระทั่งถึงที่นี่เป็นส่วนประกอบที่ขับเคลื่อนด้วยเหตุการณ์ / ระบบเอนทิตีที่เป็นมาตรฐานมากกว่ารวมกับวิธีการที่ขับเคลื่อนด้วยข้อมูล (เปรียบเทียบส่วนประกอบไม่ได้มีตัวแปรข้อมูลที่มีรหัสตายตัว แต่เป็นแผนที่ทั่วไปแทน (บางส่วน) / archetypes ของส่วนประกอบจะถูกอ่านจากไฟล์ที่มีตัวเลือกในการเพิ่มข้อมูลเพิ่มเติมซึ่งไม่ได้เป็นส่วนหนึ่งของรหัสส่วนประกอบจริง
ตอนนี้ฉันอยากจะแนะนำBehavior Trees (อิงจากAiGameDev BTSK ) ในโครงการนั้น แต่ฉันไม่แน่ใจว่าควรเชื่อมโยงกับส่วนประกอบที่มีอยู่แล้วหรือไม่หรือจะรวมการออกแบบเหล่านั้นเข้าด้วยกันอย่างไร
แนวคิด / คะแนน / คำถามที่เกี่ยวข้องหลายประการอยู่ในใจ:
BT ของฉันจะถูกอ่านจากไฟล์ (อีกครั้ง) ขณะนี้ฉันมีเวลายากที่จะเห็นว่าฉันจะทำให้การเชื่อมต่อระหว่าง
BT Action
ต้นไม้และการเขียนโปรแกรมจริงของฉันดีที่สุดได้อย่างไร ฉันควรสร้างแผนผังบางส่วนระหว่างชื่อแอ็คชันที่ใช้ในไฟล์ BT และตัวชี้ฟังก์ชันเพื่อการใช้งานจริงหรือไม่? อะไรคือวิธีปกติในการแก้ปัญหานั้นฉันคิดว่าฉันจะต้องสร้าง BT สำหรับ
Entity
ประเภทที่แตกต่างกันทั้งหมดของฉัน(ดังนั้นสำหรับการรวมกันของส่วนประกอบเกมที่เกี่ยวข้องกับ AI / AI ตามที่ระบุโดยหลายครั้งที่ฉันกล่าวถึง ดังนั้นจึงไม่มีความเหมาะสมที่จะนำการBT Action
ติดตั้งไปใช้ในส่วนประกอบเนื่องจากส่วนประกอบส่วนใหญ่มีแนวโน้มที่จะมีส่วนร่วมต่อการกระทำใช่ไหมดังนั้น
BT Action
ตรรกะควรอยู่ในระบบที่แยกจากกัน (ซึ่งเป็นวิธีการที่แผนที่จากความคิดที่ # 1 ชี้ไปที่) จากนั้นระบบจะตรวจสอบlong
"ตัวบ่งชี้ประเภท" ของฉันว่าEntity
มีการตรวจสอบ BT หรือไม่และได้รับคำสั่งให้ดำเนินการบางอย่าง (= เมธอดในระบบ) ได้รับอนุญาตให้ทำเช่นนั้นจริง (= มีองค์ประกอบที่จำเป็น) แต่ถ้าไม่ใช่ (เพราะตัวอย่างเช่นผู้สร้าง BT มองข้ามสถานการณ์ที่เฉพาะเจาะจงซึ่งองค์ประกอบที่จำเป็นอาจไม่ได้แนบกับ Entity ตอนรันไทม์อีกต่อไป) จะไม่มีอะไรเกิดขึ้น
คำถาม:
- มีแนวคิดที่พิสูจน์แล้วสำหรับการรวมประเภทนั้นหรือไม่?
- สิ่งที่คุณใช้ใน 3 คะแนนของฉันคืออะไร?
- มีสิ่งอื่นใดอีกบ้างที่นึกถึงอีกทั้งเกี่ยวกับการออกแบบส่วนประกอบ / เอนทิตีของฉัน