Son 48 saati Nesne Bileşeni sistemlerini okumak için harcadım ve uygulamaya başlamak için yeterince hazır olduğumu hissediyorum. Oluşturulan temel Nesne ve Bileşen sınıfları var, ama şimdi ben gerçek bileşenleri oluşturmaya başlamak gerekir biraz kafam karıştı. Bunları HealthComponent veya temelde sadece bir mülk olabilecek bir şey olarak düşündüğümde, bu mükemmel bir mantıklı. Bir Fizik / Grafik bileşeni olarak daha genel bir şey olduğunda, biraz kafam karışır.
Object sınıfım şu ana kadar benziyor (Yapmam gereken herhangi bir değişiklik fark ederseniz lütfen bana bildirin, hala yeni) ...
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;
};
Şimdi karşılaştığım sorun, genel nüfusun Fizik / Grafik gibi Bileşenlere ne koyacağıdır? Ogre (oluşturma motorum) için görünür Nesneler, sahneye eklemek için birden fazla Ogre :: SceneNode (muhtemelen çoklu), görünür kafesleri göstermek için Ogre :: Entity (muhtemelen çoklu) ve benzerlerinden oluşur. Nesneye yalnızca birden fazla GraphicComponent eklemek ve her GraphicComponent'in bir SceneNode / Entity işlemesine izin vermek en iyisi midir, yoksa her bir Bileşenden birine sahip olma fikri gerekli midir?
Fizik için daha da kafam karıştı. Sanırım belki bir RigidBody yaratıyor ve kütle / interiyumu / vb. mantıklı olurdu. Ama detayları bir Bileşene nasıl koyacağımı düşünmekte güçlük çekiyorum.
Bu "Gerekli" bileşenlerden birkaçını tamamladıktan sonra, çok daha mantıklı olacağını düşünüyorum. Şu an itibariyle hala biraz gerginim.