c# - 从通用列表中测试 BoundingBox

标签 c# xna collision fbx

我想测试两个 BoundingBox 是否相交。我有一个列表:

List<BoundingBox> Mapa_BB = new List<BoundingBox>();

然后我将边界框添加到这个列表中,效果很好——我通过将它更改为一个字符串然后绘制它来测试它——所以我确信它们存在。 BoundingBox hero; 是我的英雄的边界框。

接下来,我做了一个函数来测试是否发生了碰撞:

public void Collision()
{
    foreach (BoundingBox BB_map in Map_BB)
    {
        if (hero.Intersects(BB_map))
        { test = "true"; }
        else
        { test = "false"; }
    }
}

如您所见,如果发生碰撞,我想将字符串变量 test 设置为 "true";如果不是,则为 "false"。我会认为我的列表有问题,但如果我的英雄与列表中的最后一个边界框发生碰撞,那么它就可以正常工作;对于任何其他边界框,它不会。

最佳答案

如果你发现了一个相交的盒子,你需要打破foreach循环:

public void Colision()
{
    foreach (BoundingBox BB_map in Map_BB)
    {
        if (hero.Intersects(BB_map))
        {
            test = "true";
            break;
        }
        else
            test = "false";
    }
}

如果没有 break;,以下不匹配的框会将 test 设置回 "false"

关于c# - 从通用列表中测试 BoundingBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19383146/

相关文章:

video - 如何从 XNA 中的文件加载视频? (仅限电脑)

Java LibGDX ArrayList<矩形> 无法使碰撞工作

events - Zend框架2 : Add different authentication adapter for two different modules

c# - Web 应用程序模块化设计实践

c# - 获取已删除的 DataGridView 行的单元格值

c# - 按住按钮时在文本框中显示密码

performance - XNA - 如何更有效地绘制顶点?

c# - 如何获取 OData 可查询 Web API 端点过滤器并将其映射到 DTO 对象?

c# "OR"事件委托(delegate)返回 bool

c++ - 体素世界中的碰撞检测?