使用多边形作为可点击区域,而不是矩形

法斯恩

我正在使用快板库创建一个 2D 游戏,我需要在地图上创建多边形区域,玩家可以点击该区域来移动他的单位。

我是否被迫在多边形检测算法中使用某种点,或者是否有使用我已经绘制的多边形的更简单的解决方案?

到目前为止,我设法绘制了一个多边形,例如:

ALLEGRO_VERTEX v[] =
            {
                { .x = 0, .y = 0, .z = 0, .color = al_map_rgb_f(1, 0, 0) },
                { .x = 0, .y = 48, .z = 0, .color = al_map_rgb_f(1, 0, 0) },
                { .x = 32, .y = 64, .z = 0, .color = al_map_rgb_f(1, 0, 0) },
                { .x = 80, .y = 32, .z = 0, .color = al_map_rgb_f(1, 0, 0) },
                { .x = 112, .y = 0, .z = 0, .color = al_map_rgb_f(1, 0, 0) }
            };
al_draw_prim(v, NULL, NULL, 0, 5, ALLEGRO_PRIM_TRIANGLE_FAN);

编辑:好的,我想我可以使用此算法检测鼠标是否在多边形中,但我仍然觉得这不是正确的方法。我仍然需要为每个不同的多边形调用该函数,这听起来不对。

约书亚

您找到了一种算法,可以对所有多边形进行点入多边形,并告诉您用户单击了哪个多边形。干得好,你可以使用它。你想要一个内置的 API 调用来完成它,但没有得到它。由于没有其他人发布了相反的答案,我认为您不会。你应该使用你所拥有的。

我现在将说明为什么这应该感觉正确而不是感觉不正确。

如果库本身已经实现了它适合你,它仍然会通过底层操作系统原语,后者又通过问题的算法复杂性,这限制约束点在多边形每个多边形。因此,您可以投影应用程序中的所有多边形,对整个屏幕使用一个鼠标点击框,然后依次测试它们。如果有一个 API,这就是 API 必须要做的事情。

我预测你编码它的机会很大,但发现它太慢了。一个几乎总是有效的简单解决方案是首先进行面向轴的边界框测试,这很快。

BugSquasher 提出了一个替代解决方案。渲染两次,第二次渲染到每个多边形一种颜色的屏幕外缓冲区,然后对颜色进行点测试。这也有效,如果命中测试比多边形移动更常见,那么这是一个很好的加速。不过它确实会消耗内存。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ITextShape可点击的多边形或路径

来自分类Dev

多边形中的传单可点击网格

来自分类Dev

创建可点击的多边形three.js

来自分类Dev

使用多边形作为搜索区域立交桥API /立交桥涡轮

来自分类Dev

在Google地图上制作可点击的多边形(适用于Android)

来自分类Dev

如何使可点击的图例在 d3 多边形图中可见

来自分类Dev

如何使用凸包多边形裁剪脸部区域

来自分类Dev

如何使用凸包多边形裁剪脸部区域

来自分类Dev

使用点击功能绘制新的Kinetic JS多边形

来自分类Dev

多边形的边界矩形-Android / Java

来自分类Dev

可点击区域圆角矩形iOS

来自分类Dev

创建封闭区域的多边形的算法

来自分类Dev

凸多边形内的区域

来自分类Dev

填写内部多边形的外部区域

来自分类Dev

必应地图中的多边形区域

来自分类Dev

在多边形区域之间填充

来自分类Dev

计算多边形不重叠的区域

来自分类Dev

用素面查找多边形区域

来自分类Dev

按区域过滤 shapefile 多边形

来自分类Dev

使用多边形包含

来自分类Dev

使用多边形包含

来自分类Dev

Leaflet Map-第二个多边形使第一层不可点击

来自分类Dev

使用Boost生成一组矩形以形成不规则多边形的网格

来自分类Dev

Java / libGDX-如何使用矩形或圆形检查多边形碰撞

来自分类Dev

如何将某些区域均匀地调整为多边形(扩展多边形)?

来自分类Dev

指向具有多边形孔的多边形区域内部

来自分类Dev

点击时google maps多边形,显示多边形内标记的摘要

来自分类Dev

如何使用leaflet.draw从多边形获取区域字符串

来自分类Dev

在矩形(多边形)内查找sql地理点