Tôi đã dành 48 giờ qua để đọc các hệ thống Thành phần đối tượng và cảm thấy tôi đã sẵn sàng để bắt đầu thực hiện nó. Tôi đã tạo các lớp Đối tượng và Thành phần cơ bản được tạo, nhưng bây giờ tôi cần bắt đầu tạo các thành phần thực tế, tôi hơi bối rối. Khi tôi nghĩ về chúng theo HealthComponent hoặc thứ gì đó về cơ bản chỉ là một tài sản, nó có ý nghĩa hoàn hảo. Khi nó là một cái gì đó tổng quát hơn như là một thành phần Vật lý / Đồ họa, tôi có một chút bối rối.
Lớp Object của tôi trông như thế này cho đến nay (Nếu bạn nhận thấy bất kỳ thay đổi nào tôi nên thực hiện, vui lòng cho tôi biết, vẫn còn mới đối với điều này) ...
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;
};
Bây giờ vấn đề tôi đang gặp phải là dân số nói chung sẽ đưa gì vào các Thành phần như Vật lý / Đồ họa? Đối với Ogre (công cụ kết xuất của tôi), các Đối tượng hiển thị sẽ bao gồm nhiều Ogre :: SceneNode (có thể là nhiều) để gắn nó vào cảnh, Ogre :: Entity (có thể là nhiều) để hiển thị các lưới có thể nhìn thấy, v.v. Sẽ là tốt nhất khi chỉ cần thêm nhiều GraphicComponent vào Object và để mỗi GraphicComponent xử lý một SceneNode / Entity hoặc ý tưởng cần có một trong mỗi Thành phần cần thiết?
Đối với môn Vật lý tôi lại càng bối rối hơn. Tôi cho rằng có thể tạo RigidBody và theo dõi khối lượng / interia / vv. sẽ có ý nghĩa Nhưng tôi gặp khó khăn khi nghĩ làm thế nào để thực sự đưa chi tiết cụ thể vào Thành phần.
Khi tôi nhận được một vài thành phần "Bắt buộc" này, tôi nghĩ nó sẽ có ý nghĩa hơn nhiều. Ngay bây giờ mặc dù tôi vẫn còn hơi bối rối.