在C++游戏中存储所有实体的最佳方法
问题描述:
我试图创建一种方法来保存我C++游戏中的所有实体,因为它们仅限于一种类型,所以数组无法工作。我需要存储与Entity类相关的所有内容,并且它都是衍生物。我一直试图通过一种方式来存储所有游戏实体,我可以循环遍历它们并绘制它们。还没有找到解决方案。在C++游戏中存储所有实体的最佳方法
答
假设Entity
是许多事物派生出来的基类,你可以有一个容器(任何容器都可以,但std::vector
是一个很好的开始,除非你有其他特定的要求)。
class Entity
{
public:
virtual void Draw() = 0;
};
class Atom : public Entity
{
public:
void Draw() override {}
};
class Environment : public Entity
{
public:
void Draw() override {}
};
int main()
{
std::vector< std::shared_ptr<Entity> > entities;
entities.push_back(std::make_shared<Atom>());
entities.push_back(std::make_shared<Environment>());
// Draw entities:
for (size_t ent = 0; ent < entities.size(); ++ent)
{
entities[ent]->Draw();
}
return 0;
}
如果Entity
是不是有些基类,你也可以放眼boost::optional
答
您可能可以使用std :: vector。它有许多内置函数用于简单的数据操作,并且可以将它用于任何类型。
+0
'std :: vector'会和数组产生同样的问题。 – juanchopanza
你可以提供一个基本的代码?你想循环不具有相同类型的元素吗? – styko
具有'Entity'类型的数组将允许您将任何属于'Entity'的东西包括在内,包括子类,所以这实际上不是不使用数组的原因。但是固定大小通常是更多原因。 –