【发布时间】:2011-04-10 13:16:17
【问题描述】:
我从事网络开发已有多年,我正在慢慢参与游戏开发,对于我当前的项目,我有这张等距地图,我需要使用算法来检测哪个领域正在点击。顺便说一句,这一切都在带有 Javascript 的浏览器中。
地图
它看起来像this,我添加了一些数字来向您展示字段(图块)及其 ID 的结构。所有字段都有一个中心点(x,y 数组),绘制时四个角都基于该中心点。
如您所见,它不是菱形,而是锯齿形地图并且没有角度(自上而下的视图),这就是为什么考虑到所有文章和计算通常都基于菱形,我自己找不到答案的原因有一个角度。
数字
这是一张动态地图,所有大小和数字都可以更改以生成新地图。
我知道这不是很多数据,但地图是根据地图和字段大小生成的。
- 地图大小:x:800 y:400
- 字段大小:80x80(角落之间)
- 所有字段的中心位置 (x,y)
目标
提出一种算法,告诉客户端(游戏)在任何给定事件(点击、移动等)中鼠标位于哪个字段。
免责声明
我确实想提一下,我自己已经提出了一个可行的解决方案,但是我 100% 肯定它可以用更好的方式编写(我的解决方案涉及很多嵌套的 if 语句和循环),那就是为什么我在这里问。
Here's 我的解决方案示例,我基本上在最近的 4 个已知位置找到一个有角的正方形,然后根据两个最近字段之间的最小正方形得到我的结果。这有意义吗?
问我是否遗漏了什么。
【问题讨论】:
-
等一下……你是说图中图形的角不相邻?
-
@albert 如果您的意思是所有单元格是否相互接触,那么是的,但如果您要问地图之外是否还有更多,那么没有。我发布的图片显示了确切的地图大小,无需任何滚动。
-
嗯,它是菱形地图的子集。您可以使用稀疏数组并只剪掉角落,或者您不打算使用的任何东西吗?
-
当然,还要将网格坐标旋转 45 度。
-
问题是,我不会在任何时候旋转。我有一个包含所有单元格位置(中心点)的数组,并且基本上知道每个单元格的大小。我的图像显示了单元格的形状,但它们实际上并不存在于游戏中,并且除了中心点之外没有使用。
标签: javascript click 2d detection isometric