我正在尝试在C++中制作高效的“实体系统”,我已经阅读了很多关于这方面的博客/文章/文档来获取信息,但我仍有一些问题。
我发现了两个有趣的主题:
- 数据驱动系统 - 实体组件系统
对我来说,这两个系统看起来非常相似。
因此,我找到了Adam Smith的这个例子:https://dev59.com/bXI-5IYBdhLWcg3w3cc8#2021868 我需要一个像这样灵活的系统:
我发现了两个有趣的主题:
- 数据驱动系统 - 实体组件系统
对我来说,这两个系统看起来非常相似。
因此,我找到了Adam Smith的这个例子:https://dev59.com/bXI-5IYBdhLWcg3w3cc8#2021868 我需要一个像这样灵活的系统:
// Abstract class
class Component
{
// data here
}
// exemple
class Car : public Component
{
// Data here
}
// Entity with components
class Entity
{
std::vector<Component*> components;
}
如果我的实体具有以下组件:汽车、变形、精灵,那么我的组件数组是否会像数据驱动系统一样具有线性数据?
现在,我有系统:
class System
{
virtual void init();
virtual void clear();
virtual void update();
std::unordered_map< const char*, Entity*> entities;
}
class RendererSystem : public System
{
// Methods's definition (init, clear, …).
void update()
{
for( entity, … )
{
Sprite* s = entity->getComponent('sprite');
...
}
}
}
- 我曾经看到过虚函数很糟糕,但在这种情况下会出现什么问题吗?
- 使用 Get component 需要一个 static_cast,这是不好的吗?
- 在数据驱动系统中,我看到了指针,那原始变量在哪里,我需要到处放置新的数据还是可以使用一个数组类?
- 我的做法正确吗?
所有这些问题在我的脑海中都有些模糊。