检测Canvas上的两个控件是否发生碰撞

时间:2014-09-10 06:07:46

标签: c# xaml windows-store-apps microsoft-metro windows-store

我的Windows应用商店项目可以使用CanvasManipulationDelta上移动控件。我想创建“可附加”控件,当您将控件拖到Canvas上的另一个控件上时,在其中一个上应用的旋转变换也将应用到另一个上。

最简单的碰撞检测是检查两个控件的矩形是否相交,但是因为它们可以旋转任何不可能的角度。

如何做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以使用Intersect类的Windows.Foundation.Rect方法来确定元素是否具有共同点。

使用我的例子:

private Rect DetectCollisions(FrameworkElement rect1, FrameworkElement rect2)
{
   var r1 = new Rect(Canvas.GetLeft(rect1), Canvas.GetTop(rect1), rect1.ActualWidth, rect1.ActualHeight);
   var r2 = new Rect(Canvas.GetLeft(rect2), Canvas.GetTop(rect2), rect2.ActualWidth, rect2.ActualHeight);
   r1.Intersect(r2);
   return r1;
}

在此示例中,2个Rect个对象是从2个传入的FrameworkElement个对象创建的。 然后我们使用Intersect首先Rect的方法来确定rects是否有共同点。 如果是这样,方法会将新的交集Rect存储到r1变量,而不是它返回Rect.Empty结构。