如何检查集合中的冲突(每个元素相互之间)

时间:2014-01-18 10:43:42

标签: c# wpf collections collision

我已经定义了DispatcherTimer(每毫秒1个)。我还有Rectangle的集合和检查碰撞的方法。

public List<Rectangle> Cars { get; set; }
int time = 0;

_timer = new DispatcherTimer();
_timer.Interval = new TimeSpan(0, 0, 0, 0, 1);
_timer.Tick += _timer_Tick;
_timer.Start();

void _timer_Tick(object sender, EventArgs e)
{
    foreach(Rectangle r in Cars)
    {
        r.Move()
    }
}

public bool CheckCollision(Rectangle r1, Rectangle r2)
{
    bool result = false;
    Rect rect1 = new Rect((double)r1.GetValue(Canvas.LeftProperty),(double)r1.GetValue(Canvas.TopProperty), r1.Width, r1.Height);
    Rect rect2 = new Rect((double)r2.GetValue(Canvas.LeftProperty), (double)r2.GetValue(Canvas.TopProperty), r2.Width, r2.Height);

    if (rect1.IntersectsWith(rect2))
    {
        result = true;
    }
    else
    {
        result = false;
    }

    return result;
}

问题是如何(勾选)用碰撞方法(或任何其他方式)检查集合中的每个对象是否相互交互,例如阻止该对象移动(同时被碰撞)。 任何想法或代码都会很棒。感谢。

1 个答案:

答案 0 :(得分:1)

您可以尝试:

        foreach(Rectangle r in Cars.Where(c1 => Cars.All(c2 => !CheckCollision(c1,c2))))
            r.Move();