有没有更有效地迭代碰撞的方法?因为在250个对象的情况下,这将意味着250 * 250 == 62500碰撞检查,这会使我的游戏滞后。
int sz = (int)objects.size();
for (int i = 0 ; i < sz ; ++i) {
GameObject *iter = objects[i];
if (!(iter)->Collidable()) { continue; }
for (int i2 = i + 1 ; i2 < sz ; ++i2) {
GameObject *iter2 = objects[i2];
if (!(iter2)->Collidable()) { continue; }
if ((iter)->CheckCollisions((iter2))) {
(iter)->Collided((iter2)->GetID(), (iter2));
(iter2)->Collided((iter)->GetID(), (iter));
}
}
}发布于 2014-01-05 02:13:23
考虑一下quadtrees (或者3D、八叉树)。
这些数据结构将事物按其相对位置进行分组,从而通过只关注实际可能发生碰撞的事物来减少需要进行的比较次数。
发布于 2014-01-05 02:17:30
我将首先实现像octree这样的空间划分算法,然后实现不同级别的碰撞检测。例如,球体碰撞是最便宜的,然后是长方体碰撞,之后,只有当对象首先通过球体碰撞测试时,才能获得更精确的碰撞。
这是在两个球体3d-Sphere collisions上进行碰撞测试的链接。
https://stackoverflow.com/questions/20924696
复制相似问题