循环碰撞逻辑错误

Jac*_*ard 1 c# loops for-loop

我有一个循环,它应该检测并删除列表中与放置的对象相交的任何对象.代码如下:

for (int i = 0; i < levelObjects.Count(); i++)
{
    if (levelObjects[i].BoundingBox.Intersects(mouseBlock.BoundingBox))
    {
        levelObjects.RemoveAt(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

遇到多次碰撞的情况时,有时不会检测到碰撞.交叉功能正常.我的循环导致了什么呢?

Ree*_*sey 5

由于您正在从循环中删除,因此最终会跳过元素.更好的选择是向后循环:

for (int i=levelObjects.Count() - 1; i >= 0; --i)
{
  // ...
Run Code Online (Sandbox Code Playgroud)

这可以防止您现在丢失的"跳过"对象,因为当您删除并且索引向下移动时,您只会移动已经测试过的对象.