【发布时间】:2011-12-27 14:27:36
【问题描述】:
我正在尝试对我的游戏对象进行碰撞检查。我有一个多重映射,它在每个键中包含相同类型的对象。键代表对象的类型。但是,所有类型都派生自同一个类。我需要将它们分开,以便对象知道当一种类型的对象接触到另一种类型的另一个对象时要做什么。但似乎我检查碰撞的方式很慢,因为我注意到我添加的对象越多,它们移动的越慢。谁能帮我? :(
这是确切的代码:
void CheckCollisions()
{
if (!Actors.empty())
{
std::multimap<std::string, boost::shared_ptr<std::vector<PActor>>>::const_iterator it;
it = Actors.begin();
while (it != Actors.end())
{
for (int i = 0; i < static_cast<int>(it->second->size()); i++)
{
std::multimap<std::string, boost::shared_ptr<std::vector<PActor>>>::const_iterator it2;
it2 = Actors.begin();
while(it2 != Actors.end())
{
for (int j = 0; j < static_cast<int>(it2->second->size()); j++)
{
if (i != j)
{
if (Touch(it->second->at(i), it2->second->at(j)))
{
it->second->at(i)->Touch(it2->first, it2->second->at(j));
it2->second->at(j)->Touch(it->first, it->second->at(i));
}
}
}
it2++;
}
}
it++;
}
}
}
注意: PActor 只是 Actor 的一个 shared_ptr;
【问题讨论】:
标签: c++ nested iteration multimap