ฉันใช้เวลา 48 ชั่วโมงในการอ่านข้อมูลเกี่ยวกับระบบ Object Component และรู้สึกว่าฉันพร้อมที่จะเริ่มนำไปใช้งานแล้ว ฉันได้รับคลาส Object และ Component พื้นฐานแล้ว แต่ตอนนี้ฉันต้องเริ่มสร้างส่วนประกอบจริงฉันสับสนเล็กน้อย เมื่อฉันนึกถึงพวกเขาในแง่ของ HealthComponent หรืออะไรบางอย่างที่โดยพื้นฐานแล้วจะเป็นเพียงแค่คุณสมบัติมันก็สมเหตุสมผลดี เมื่อมันเป็นเรื่องทั่วไปมากขึ้นในส่วนของฟิสิกส์ / กราฟิกฉันสับสนเล็กน้อย
คลาส Object ของฉันมีลักษณะเช่นนี้จนถึงตอนนี้ (หากคุณสังเกตเห็นการเปลี่ยนแปลงใด ๆ ที่ฉันควรทำโปรดแจ้งให้เราทราบยังใหม่ต่อเรื่องนี้) ...
typedef unsigned int ID;
class GameObject
{
public:
GameObject(ID id, Ogre::String name = "");
~GameObject();
ID &getID();
Ogre::String &getName();
virtual void update() = 0;
// Component Functions
void addComponent(Component *component);
void removeComponent(Ogre::String familyName);
template<typename T>
T* getComponent(Ogre::String familyName)
{
return dynamic_cast<T*>(m_components[familyName]);
}
protected:
// Properties
ID m_ID;
Ogre::String m_Name;
float m_flVelocity;
Ogre::Vector3 m_vecPosition;
// Components
std::map<std::string,Component*> m_components;
std::map<std::string,Component*>::iterator m_componentItr;
};
ตอนนี้ปัญหาที่ฉันพบคือประชากรทั่วไปจะใส่อะไรลงในส่วนประกอบเช่นฟิสิกส์ / กราฟิก สำหรับ Ogre (เครื่องมือเรนเดอร์ของฉัน) วัตถุที่มองเห็นจะประกอบด้วย Ogre :: SceneNode (อาจมีหลายตัว) ที่จะแนบกับฉาก Ogre :: Entity (อาจมีหลายตัว) เพื่อแสดงตาข่ายที่มองเห็นและอื่น ๆ เป็นการดีที่สุดหรือไม่ที่จะเพิ่ม GraphicComponent หลาย ๆ อันลงใน Object และปล่อยให้แต่ละ GraphicComponent จัดการหนึ่ง SceneNode / Entity หรือเป็นความคิดที่จะมีหนึ่งในแต่ละองค์ประกอบที่จำเป็น?
สำหรับวิชาฟิสิกส์ฉันรู้สึกสับสนมากขึ้น ฉันคิดว่าบางทีการสร้าง RigidBody และติดตามมวล / interia / ฯลฯ จะทำให้รู้สึก แต่ฉันกำลังมีปัญหาในการคิดวิธีการใส่ข้อมูลจำเพาะลงในคอมโพเนนต์อย่างแท้จริง
เมื่อฉันทำส่วนประกอบที่จำเป็นเหล่านี้เสร็จแล้วฉันคิดว่ามันจะสมเหตุสมผลมากขึ้น ณ ตอนนี้แม้ว่าฉันจะยังคงนิ่งเงียบเล็กน้อย