否则称为硬边缘,这是鼠标无法穿过的线条。在游戏等中很有用。实现鼠标边界的边缘
目前,我有一个函数返回,如果我的鼠标光标是在屏幕上绘制的多边形。如果不是,则将光标移动到多边形中最后一个存储的点。
if (!PointInPolygon(local, polyGon))
{
Cursor.Position = safePoint;
}
else
{
safePoint = Cursor.Position;
}
我不喜欢这样的一对夫妇的原因:
由于缓慢的更新时间或出于某种原因,我有时能打破开箱。然后将该位置作为safePoint存储在多边形之外。然后我的鼠标卡在这个位置。
倾斜的边缘应该在斜坡方向上猛击鼠标。再次将鼠标向右推,一个“/”形墙应该在光标在右上角。但由于这种方法的性质,通过该行将重置光标到以前的位置。继续向右推只会继续重新设置光标,并且不会将其推上“斜坡”。
是否有任何其他方法来解决这个问题?我主要担心最后一个问题:这种斜率横向行为是我的程序的主要目标,我需要让它工作。即使我使用这种基本方法,对于特定行为的优化有什么想法?
编辑:
已经由Reed,我反而回到最接近当前出界外点的点建议。考虑到四边形的四个角点,我将如何找到形状中/上的最近点?
嗯,好主意。现在我只需要弄清楚,考虑到四边界限制四边形,那么找到最近点的最佳/最简单的方法是什么? – cksubs 2009-07-28 01:42:00
这里有一些适合你的算法:http://www.devmaster.net/forums/archive/index.php/t-103.html对于小多边形(取决于你的情况,但通常少于10个部分),只是强力搜索点 - >段通常是最快的方法。 – 2009-07-28 15:11:37