我正在创建一个小型wpf游戏,我需要一些碰撞检测。我有一些鱼,它们是用混合表情画的,我需要知道它们什么时候相撞。但是我真的不知道如何实现它。
我想使用每像素碰撞检测,并使用边界矩形作为截止点(不要在外部寻找碰撞)。
但是这是实现碰撞检测的最聪明的方法吗?我在每个图形上都有一条路径,这个信息有用吗?在我看来,我并没有从中得到什么,因为它不是直线,而是曲线。
任何帮助都将非常感激:)
这还没有经过测试,但是试试这样做:
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);
}
}