【问题标题】:Detect whether two controls on a Canvas collide检测 Canvas 上的两个控件是否发生碰撞
【发布时间】:2014-11-03 16:30:38
【问题描述】:

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

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

如何做到这一点?

【问题讨论】:

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


    【解决方案1】:

    你可以使用Windows.Foundation.Rect类的Intersect方法来判断元素是否有共同点。

    使用我的例子:

    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 对象创建的。 然后我们使用第一个RectIntersect 方法来找出rects 是否有共同点。 如果是这样,方法会将新的交集Rect 存储到r1 变量中,而不是返回Rect.Empty 结构。

    【讨论】:

    • FrameworkElements 处于不同角度并对其应用了变换时,此方法是否考虑了旋转?我相信当我们制作一个具有左、上、宽和高的矩形时,只会返回一个轴对齐的矩形,其边角为 90 度。
    • @AniruddhaVarma,看this文章
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 2014-08-12
    相关资源
    最近更新 更多