有没有一种方法可以更有效地迭代我的碰撞槽?
因为在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));
}
}
}
最佳答案
考虑研究quadtrees(或3D,八叉树)。
这些数据结构按事物的相对位置对事物进行分组,从而通过仅将它们集中在实际上可能发生碰撞的事物上,从而减少了需要进行的比较次数。