私が作っているゲームのエンティティマネージャを作成しようとしているので、ゲーム内のすべてのエンティティ(プレイヤー、敵、オブジェクト)を簡単に管理でき、それらのUpdateとRenderの機能を手動で行う必要はありません。 エンティティがマップに追加されているときはいつでも、彼らはまた、そのIDが追加されていると、ランダムなIDを与えられるだろう、私はint型にかかるマップとEntityクラスC++ - マップには多すぎる要素が含まれています
std::map<int, Entity*> entities;
を使用してエンティティを記録していますベクトルはちょうどので、私は
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));
}
私は最終的に各エンティティの機能を更新を呼び出すとレンダーまったく同じエンティティを使用して終了していないので、IDのは、使用されていたものを記録することができます
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つのエンティティを入力しています。 私は原因が何であるか把握しようとしましたが、見つからず、AddEntity関数の "entities.insert"の後のサイズは2ですが、UpdateおよびRender関数が呼び出されると、サイズは即座に16587またはそれに相当する数字です。
entityManager->AddEntity(player);
entityManager->AddEntity(diamond);
マップ(ID)のキーがランダムである必要があるのはなぜですか?それを簡単な増分数(例えば1,2,3など)にする方が簡単ではないでしょうか? – Robb
http://en.cppreference.com/w/cpp/container/map/operator_at –