เพื่อให้ส่วนประกอบสามารถอัปเดตทุกเฟรม (และปล่อยให้ฟังก์ชันนี้ออกจากส่วนประกอบที่ไม่จำเป็นต้องใช้) ฉันมีแนวคิดที่จะสร้างคอมโพเนนต์ UpdateComponent ส่วนประกอบอื่น ๆ เช่นMovableComponent
(ซึ่งมีความเร็ว) จะสืบทอดมาจากIUpdatable
คลาสนามธรรม กองกำลังนี้MovableComponent
จะใช้Update(gametime dt)
วิธีการและอื่น ๆRegisterWithUpdater()
ที่จะช่วยให้ชี้ไปUpdateComponent
MovableComponent
ส่วนประกอบจำนวนมากสามารถทำสิ่งนี้ได้และUpdateComponent
สามารถเรียกใช้Update(gametime dt)
วิธีการทั้งหมดได้โดยไม่ต้องสนใจว่าเขาเป็นใครหรืออะไร
คำถามของฉันคือ:
- สิ่งนี้ดูเหมือนจะเป็นสิ่งที่ปกติหรือเคยถูกใช้โดยทุกคนหรือไม่ ฉันไม่พบสิ่งใดในหัวข้อ
- ฉันจะรักษาคำสั่งซื้อส่วนประกอบเช่นฟิสิกส์แล้วเปลี่ยนตำแหน่งได้อย่างไร มันจำเป็นหรือไม่
- มีวิธีอื่นใดในการประกันว่าส่วนประกอบที่ควรประมวลผลทุกเฟรมกำลังดำเนินการในความเป็นจริง
แก้ไข
ฉันคิดว่าฉันจะให้ความสำคัญกับรายการประเภทที่สามารถอัปเดตได้ จากนั้นองค์ประกอบทั้งหมดของประเภทนั้นสามารถอัปเดตได้มากกว่าการจัดการมันต่อเอนทิตี (ซึ่งเป็นเพียงดัชนีในระบบของฉัน)
ยังคง คำถามของฉันยังคงใช้ได้สำหรับฉัน ฉันไม่รู้ว่านี่เป็นเหตุผล / ปกติหรือสิ่งที่คนอื่นมักจะทำ
นอกจากนี้ผู้คนที่อินซอมเนียก็ยอดเยี่ยมมาก! / แก้ไข
ตัวอย่างโค้ดก่อนหน้านี้:
class IUpdatable
{
public:
virtual void Update(float dt) = 0;
protected:
virtual void RegisterAsUpdatable() = 0;
};
class Component
{
...
};
class MovableComponent: public Component, public IUpdatable
{
public:
...
virtual void Update(float dt);
private:
...
virtual void RegisterWithUpdater();
};
class UpdateComponent: public Component
{
public:
...
void UpdateAll();
void RegisterUpdatable(Component* component);
void RemoveUpdatable(Component* component);
private:
...
std::set<Component*> updatables_;
};