我有一个循环,它应该检测并删除列表中与放置的对象相交的任何对象.代码如下:
for (int i = 0; i < levelObjects.Count(); i++)
{
if (levelObjects[i].BoundingBox.Intersects(mouseBlock.BoundingBox))
{
levelObjects.RemoveAt(i);
}
}
Run Code Online (Sandbox Code Playgroud)
遇到多次碰撞的情况时,有时不会检测到碰撞.交叉功能正常.我的循环导致了什么呢?
由于您正在从循环中删除,因此最终会跳过元素.更好的选择是向后循环:
for (int i=levelObjects.Count() - 1; i >= 0; --i)
{
// ...
Run Code Online (Sandbox Code Playgroud)
这可以防止您现在丢失的"跳过"对象,因为当您删除并且索引向下移动时,您只会移动已经测试过的对象.