C - 地图包含太多元素

C++ - Map contains way too many elements

本文关键字:太多 元素 包含 地图      更新时间:2023-10-16

我正在尝试为正在制作的游戏创建实体经理,以便我可以轻松管理游戏中的所有实体(玩家,敌人,对象)他们的更新和渲染功能无需手动执行。我正在使用摄入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);

entitiesmap,您使用随机整数作为键。您不能使用索引循环访问地图的成员。该循环的每一次迭代都会在地图中添加另一个条目(使用nullptr Entity),增加了尺寸,导致循环继续。

要迭代地图,您可以使用

for (const auto &ent: entities)
    ent.second->Render();

然后,您只会看到地图中的条目而不添加任何新的条目。