所以我基本上想要检测同一个类的两个对象之间的冲突。我在我的Main类中有这个来调用更新函数:
foreach (Ball i in Ball.Pool) i.update();
在更新功能中,我编写了以下碰撞检测:
foreach(Ball i in Pool)
{
if (Math.Sqrt(Math.Pow(i.pos.X - pos.X, 2) + Math.Pow(i.pos.Y - pos.Y, 2)) < 50)
{
//do intesect procedure
}
}
问题似乎是它一直与自己相交。
有没有办法从foreach循环中排除当前对象?
答案 0 :(得分:1)
只需添加一个等号检查:
foreach(Ball i in Pool)
{
if(i <> this)
if (Math.Sqrt(Math.Pow(i.pos.X - pos.X, 2) + Math.Pow(i.pos.Y - pos.Y, 2)) < 50)
{
//do intesect procedure
}
}
答案 1 :(得分:1)
使用LINQ:
foreach (var ball in Pool.Where(b => b != currentBall)) {}
答案 2 :(得分:0)
您应该只需使用ball
检查foreach
中的==
是否与“当前的球”相同。要跳过循环的迭代 - 使用continue
立即开始循环的下一次迭代:
foreach(Ball ball in Pool)
{
if (ball == this) // assuming code is part of Ball class
{
continue;
}
// handle collisions
....
}
附注:尽量不要将i
用于非整数循环变量,因为许多代码的读者会按照约定自动假定该类型为int
。