有没有一种方法可以更有效地迭代我的碰撞槽?
因为在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,八叉树)。

这些数据结构按事物的相对位置对事物进行分组,从而通过仅将它们集中在实际上可能发生碰撞的事物上,从而减少了需要进行的比较次数。

10-04 14:27