Saya telah menghabiskan 48 jam terakhir membaca tentang sistem Komponen Objek, dan merasa saya cukup siap untuk mulai mengimplementasikannya. Saya mendapat kelas Obyek dan Komponen dasar yang dibuat, tetapi sekarang saya harus mulai membuat komponen yang sebenarnya. Saya agak bingung. Ketika saya memikirkan mereka dalam hal HealthComponent atau sesuatu yang pada dasarnya hanya akan menjadi sebuah properti, itu masuk akal. Ketika itu adalah sesuatu yang lebih umum sebagai komponen Fisika / Grafik, saya agak bingung.
Kelas Object saya terlihat seperti ini sejauh ini (Jika Anda melihat ada perubahan yang harus saya buat, tolong beri tahu saya, masih baru dalam hal ini) ...
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;
};
Sekarang masalah yang saya hadapi adalah apa yang akan dimasukkan populasi umum ke dalam Komponen seperti Fisika / Grafik? Untuk Ogre (mesin render saya) Objek yang terlihat akan terdiri dari beberapa Ogre :: SceneNode (mungkin beberapa) untuk melampirkannya ke adegan, Ogre :: Entity (mungkin beberapa) untuk menampilkan jerat yang terlihat, dan sebagainya. Apakah lebih baik menambahkan beberapa GraphicComponent ke Object dan membiarkan setiap GraphicComponent menangani satu SceneNode / Entity atau apakah ide untuk memiliki satu dari setiap Komponen diperlukan?
Untuk Fisika saya bahkan lebih bingung. Saya kira mungkin membuat RigidBody dan melacak massa / interia / dll. akan masuk akal. Tetapi saya mengalami kesulitan memikirkan bagaimana sebenarnya menempatkan spesifik ke dalam Komponen.
Setelah saya menyelesaikan beberapa komponen "Diperlukan" ini, saya pikir itu akan lebih masuk akal. Sampai sekarang meskipun saya masih agak bingung.