首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更高效地迭代

更高效地迭代
EN

Stack Overflow用户
提问于 2014-01-05 02:08:24
回答 2查看 88关注 0票数 0

有没有更有效地迭代碰撞的方法?因为在250个对象的情况下,这将意味着250 * 250 == 62500碰撞检查,这会使我的游戏滞后。

代码语言:javascript
复制
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));
        }
    }
}
EN

回答 2

Stack Overflow用户

发布于 2014-01-05 02:13:23

考虑一下quadtrees (或者3D、八叉树)。

这些数据结构将事物按其相对位置进行分组,从而通过只关注实际可能发生碰撞的事物来减少需要进行的比较次数。

票数 2
EN

Stack Overflow用户

发布于 2014-01-05 02:17:30

我将首先实现像octree这样的空间划分算法,然后实现不同级别的碰撞检测。例如,球体碰撞是最便宜的,然后是长方体碰撞,之后,只有当对象首先通过球体碰撞测试时,才能获得更精确的碰撞。

这是在两个球体3d-Sphere collisions上进行碰撞测试的链接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20924696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档