C - 地图包含太多元素
C++ - Map contains way too many elements
我正在尝试为正在制作的游戏创建实体经理,以便我可以轻松管理游戏中的所有实体(玩家,敌人,对象)他们的更新和渲染功能无需手动执行。我正在使用摄入INT和实体类的地图录制实体
std::map<int, Entity*> entities;
每当将实体添加到地图中时,还将为它们提供一个随机ID,该ID被添加到向量中,以便我可以记录使用的ID,以便我最终不会使用完全相同的ID实体
IDS = std::vector<int>();
void EntityManager::AddEntity(Entity* entity)
{
int ID = rand();
for(int i = 0; i < IDS.size(); i++)
{
if(IDS[i] == ID)
{
ID = rand();
i = 0;
}
}
entities.insert(pair<int, Entity*>(ID, entity));
}
我最后调用每个实体的更新和渲染功能
void EntityManager::Update(float deltaTime)
{
if(!entities.empty())
{
for(int i = 0; i < entities.size(); i++)
{
if(entities[i] != nullptr)
{
entities[i]->Update(deltaTime);
}
}
}
}
void EntityManager::Render()
{
if(!entities.empty())
{
for(int i = 0; i < entities.size(); i++)
{
if(entities[i] != nullptr)
{
entities[i]->Render();
}
}
}
}
我遇到的问题是帧速率会立即下降到2fps之类的东西,就像我在更新和渲染功能中检查地图的大小时,大小是16587,而不是它应该只有2个,因为此时我只将2个实体输入地图。我试图弄清楚原因是什么,但我只是找不到它,大小为2之后的"实体"函数" entities.insert"之后,但是一旦调用了更新和渲染函数16587或类似的数字。除了在另一类的构造函数中,我不会在其他任何地方调用其他任何地方:
entityManager->AddEntity(player);
entityManager->AddEntity(diamond);
entities
是 map
,您使用随机整数作为键。您不能使用索引循环访问地图的成员。该循环的每一次迭代都会在地图中添加另一个条目(使用nullptr
Entity
),增加了尺寸,导致循环继续。
要迭代地图,您可以使用
for (const auto &ent: entities)
ent.second->Render();
然后,您只会看到地图中的条目而不添加任何新的条目。
相关文章:
- 在没有太多条件句的情况下,我如何避免被零除
- 错误:字符数组的初始值设定项太多
- 对象实例化调用构造函数的次数太多
- 不允许在向量中添加更多元素
- Levenshtein 两个文件的距离花费了太多时间
- 我有三个 getline,但是一旦编译,输入就太多了
- 将使用太多的纹理插值器 - 带旋转的着色器
- C/C++:socket() 创建在循环中失败,打开的文件太多
- 使用Visual Studio在虚幻引擎中创建一个新的类c ++给了我太多的错误
- C++:数组<>初始值设定项太多
- GLib-ERROR:为GWakeup创建管道:打开的文件太多
- C++,从文件读取到结构,然后读取到向量(结构被推入向量太多次,而不仅仅是一次)
- 我会导致太多内存泄漏,以至于我的计算机无响应吗?
- ZeroMq:打开的文件太多.在同一对象上连续增长的fd使用数
- 读取串行命令花费太多时间
- 为什么 Boost unordered_map 在第一次插入时需要太多时间?
- 虽然循环迭代了C++中的太多元素
- C - 地图包含太多元素
- 当插入太多元素时,std::map是否自动调整大小
- 矢量的元素太多.组合程序