我已经定义了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;
}
问题是如何(勾选)用碰撞方法(或任何其他方式)检查集合中的每个对象是否相互交互,例如阻止该对象移动(同时被碰撞)。 任何想法或代码都会很棒。感谢。
答案 0 :(得分:1)
您可以尝试:
foreach(Rectangle r in Cars.Where(c1 => Cars.All(c2 => !CheckCollision(c1,c2))))
r.Move();