我正在尝试用 C++ 制作一个高效的“实体系统”,我在互联网上阅读了很多博客/文章/文档以获取大量信息,但我又遇到了一些问题。
我发现了两个有趣的主题:
- 数据驱动系统
- 实体组件系统
对我来说,这两个系统看起来非常相似。
所以,我找到了亚当·史密斯的这个例子:https ://stackoverflow.com/a/2021868
我需要有一个像这样的灵活系统:
// Abstract class
class Component
{
// data here
}
// exemple
class Car : public Component
{
// Data here
}
// Entity with components
class Entity
{
std::vector<Component*> components;
}
那么,如果我的实体有以下组件:Car、Transform、Sprite, 我的组件数组是否会有像数据驱动系统这样的线性数据?
现在,我有系统:
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');
...
}
}
}
- 我读过虚拟功能很糟糕,在那种情况下很糟糕?
- 获取组件需要一个 static_cast,这很糟糕吗?
- 在数据驱动系统中,我到处都看到指针,si 哪里是“原始”变量,我需要在任何地方放置新变量,否则我将拥有一个包含相同数据数组的类?
- 我做对了吗?
在我看来,所有这些观点都显得“模糊”。