Bileşenlerin her kareyi güncelleyebilmeleri (ve bu işlevselliği gerekmeyen bileşenlerin dışında bırakabilmeleri) için bir UpdateComponent bileşeni yapma fikrim var. MovableComponent
(Hızı tutan) gibi diğer bileşenler IUpdatable
soyut sınıftan miras alır . Bu MovableComponent
bir Update(gametime dt)
yöntem ve bir işaretçi RegisterWithUpdater()
veren başka bir yöntem uygulamak için zorlar . Birçok bileşen bunu yapabilir ve daha sonra kim veya ne olduklarına dikkat etmeden tüm yöntemlerini çağırabilir .UpdateComponent
MovableComponent
UpdateComponent
Update(gametime dt)
Sorularım:
- Bu normal veya herkes tarafından kullanılan bir şey gibi mi görünüyor? Bu konuda hiçbir şey bulamıyorum.
- Konum değişikliği sonrasında fizik gibi bileşenlere nasıl bir emir verebilirim? Bu bile gerekli mi?
- Her kareyi işlemesi gereken bileşenlerin aslında işlenmesini sağlamanın diğer yolları nelerdir?
DÜZENLEME
Ben varlık yöneticisine güncellenebilir türlerin bir listesini vermek nasıl düşüneceğim düşünüyorum. Daha sonra, bu türdeki TÜM bileşenler varlık başına yönetmek yerine güncellenebilir (yine de sistemimdeki dizinler).
Hala. Sorularım benim için geçerli. Bunun makul / normal olup olmadığını veya başkalarının ne yapmaya meyilli olduğunu bilmiyorum.
Ayrıca, Insomniac insanlar harika! /DÜZENLE
Önceki örnek için kaynayan kod:
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_;
};