.NET屏幕对象触摸检测

问题描述:

如何检测屏幕(窗体)上的两个图像是否在C#中相互接触?.NET屏幕对象触摸检测

我有一个小游戏,我必须找出两个物体(物体的图像)是否相互接触。

有没有简单的方法来实现这个?

快速N”肮脏的方法是检查边界矩形:

if (a.left <= b.right && b.left <= a.right && 
    a.top <= b.bottom && b.top <= a.bottom) 

如果您想对涉及transparancy东西像素完善的检测,它就会变得更复杂了。

+0

酷!你知道我在哪里可以找到你正在谈论的像素检测的东西,只是出于兴趣? –

+1

CodeProject上有一个简单的例子:http://www.codeproject.com/KB/game/collision3.aspx –

最快的方法是将每个对象视为一个圆,其半径通常接近其周长,中心的X,Y坐标对。然后计算两个物体中心之间的距离,并将其与它们的半径之和进行比较。如果它们的半径之和大于它们的中心之间的距离,则它们是触摸的。

+1

只需添加:您可以通过比较距离平方和半径总和的平方来加速圆形碰撞检测 - 因为您不需要知道实际距离(仅限于是否大于或小于某个值),您可以通过省略昂贵的平方根节省一点时间。 –

将它们视为矩形,可以考虑获取每个图像的每个点的坐标。然后检查每个点是否大于另一个图像中的另一个点(点)。

类似:

/// each point represent the points in the images 
Point ImageAUpperLeft; 
Point ImageAUpperRight; 
Point ImageALowerLeft; 
Point ImageALowerRight; 
Point ImageBUpperLeft; 
Point ImageBUpperRight; 
Point ImageBLowerLeft; 
Point ImageBLowerRight; 
Point[] PtsList = new Point[] { ImageAUpperLeft, ImageAUpperRight, ImageALowerLeft, ImageALowerRight, ImageBUpperLeft, ImageBUpperRight, ImageBLowerLeft, ImageBLowerRight }; 

/// perform checking here, like: 
if (ImageAUpperLeft coincides with ImageBUpperLeft) || (... so on so forth 

我想你知道的算法来继续这一个,但如果仍然心不是清楚你仍然可以在这里发表您的问题作为意见。将很乐意帮助... :)