绘制的用户控件中每个像素的碰撞检测

时间:2011-07-19 09:27:39

标签: wpf collision-detection

我正在创建一个小型的wpf游戏,我需要一些碰撞检测。我有一些鱼,用表达混合物绘制,我需要知道它们何时碰撞。但我真的不知道如何实现这一点。

我想使用每像素碰撞检测,并使用边界矩形作为截止(不要在外面寻找碰撞)。

但这是实现碰撞检测的最明智的方法吗?我在每个图上都有一条路径,这个信息是否有用。在我看来,我并没有从中获得太多,因为它不是直线,而是曲线。

真的很感激任何帮助:)

1 个答案:

答案 0 :(得分:1)

这尚未经过测试,但尝试类似:

public bool CollidsWith(FrameworkElement sprite1, FrameworkElement sprite2, bool pixelPerfect)
{
    try
    {
        Rect r1 = Bounds(sprite1);
        Rect r2 = Bounds(sprite2);

        if (r1.IntersectsWith(r2))
        {
            if (!pixelPerfect)
                return true;
            else
            {
                Point pt = new Poin();                            
                for (int x = (int)r1.Left; x < (int)r1.Right; x++)
                {
                    for (int y = (int)r1.Top; y <(int)r1.Bottom; y++)
                    {
                        pt.X = x;
                        pt.Y = y;
                        if (VisualTreeHelper.HitTest(sprite2, pt) != null)
                            return true;
                    }
                }
                return false;
            }
            else
                return false;
        }
    }
    catch { }
    return false; // we should not get here
}

public Rect Bounds(FrameworkElement sprite)
{
    get
    {
        Point ptBottomRight = new Point(sprite.Position.X + sprite.RenderSize.Width, sprite.Position.Y + RenderSize.Height);
        return new Rect(sprite.Position, ptBottomRight);
    }
}