二维等距网格中的点击检测?

2023-12-25

我从事网络开发已经很多年了,我正在慢慢地参与游戏开发,对于我当前的项目,我有这个等轴测图,我需要使用算法来检测正在单击哪个字段。顺便说一句,这一切都是在浏览器中使用 Javascript 实现的。

The map
看起来像this https://i.stack.imgur.com/W4cPq.jpg我添加了一些数字来向您展示字段(图块)的结构及其 ID。所有字段都有一个中心点(x,y 数组),四个角在绘制时都基于该中心点。
正如您所看到的,它不是菱形,而是锯齿形地图,并且没有角度(自上而下的视图),这就是为什么我自己找不到答案,因为考虑到所有文章和计算通常都基于菱形有一个角度。

号码
这是一个动态地图,所有尺寸和数字都可以更改以生成新地图。
我知道这不是很多数据,但地图是根据地图和字段大小生成的。
- 地图尺寸:x:800 y:400
- 场地大小:80x80(角落之间)
- 所有字段的中心位置 (x,y)

The goal
提出一种算法,告诉客户端(游戏)鼠标在任何给定事件(点击、移动等)时位于哪个字段。

免责声明
我确实想提一下,我自己已经提出了一个可行的解决方案,但是我 100% 确定它可以用更好的方式编写(我的解决方案涉及大量嵌套的 if 语句和循环),那就是为什么我在这里问。

Here's https://i.stack.imgur.com/h8zRj.jpg我的解决方案的一个例子,我基本上找到一个在最近的 4 个已知位置有角的正方形,然后根据 2 个最近的字段之间的最小正方形得到结果。这有任何意义吗?

问我是否错过了什么。


这就是我想出的,

function posInGrid(x, y, length) {
xFromColCenter = x % length - length / 2;
yFromRowCenter = y % length - length / 2;
col = (x - xFromColCenter) / length;
row = (y - yFromRowCenter) / length;
if (yFromRowCenter < xFromColCenter) {
    if (yFromRowCenter < (-xFromColCenter))--row;
    else++col;
} else if (yFromRowCenter > xFromColCenter) {
    if (yFromRowCenter < (-xFromColCenter))--col;
    else++row;
}
return "Col:"+col+", Row:"+row+", xFC:"+xFromColCenter+", yFC:"+yFromRowCenter;
}

X和Y是图像中的坐标,长度是网格的间距。

现在它返回一个字符串,只是为了测试..结果应该是行和列,这些是我选择的坐标:你的图块1有坐标(1,0)图块2是(3,0),图块10是( 0,1),图块 11 是 (2,1)。您可以将我的坐标转换为您的一两行编号图块。

和一个用于测试的 JSFiddlehttp://jsfiddle.net/NHV3y/ http://jsfiddle.net/NHV3y/

Cheers.

EDIT:更改了返回语句,保留了一些用于调试的变量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二维等距网格中的点击检测? 的相关文章

随机推荐

  • Python:如果在 try 或 if 中定义变量仍然可以访问? [复制]

    这个问题在这里已经有答案了 我是 Python 初学者 有 C C 背景 我正在使用Python 2 7 我读了这篇文章 Python 命名空间 范围解析和 LEGB 规则的初学者指南 http spartanideas msu edu 2
  • 继续断言

    Assert后有办法继续测试吗 我需要查看断言引起的所有情况 foreach var ex in data Assert AreEqual ex1 ex msg 不 你不能 Assert如果失败就会抛出异常 并且你不能在异常之后继续执行 你
  • 无法绑定地址 [0]:php 错误

    无法绑定地址 0 通常只允许每个套接字地址 协议 网络地址 端口 使用一次 错误是由我的 php 服务器页面给出的 我尝试了不同的端口号 如从 cmd 中查看和编写 netstat an 我也在谷歌上搜索但没有解决方案 我正在使用 wamp
  • 如何在 Swift 中捕获异常

    我知道并理解 swift 中的错误处理 没有例外 但在 Cocoa 和 Cocoa Touch 中 有些情况除了捕获异常之外没有其他方法可以处理错误 例如 如果您在可用空间不足时写入文件句柄 这不是我们希望应用程序崩溃的情况 如何处理这种情
  • 二阶颂歌系统的庞加莱截面

    这是我第一次尝试用 Python 编写庞加莱节代码 我从这里借用了一段代码 https github com williamgilpin rk4 blob master rk4 demo py https github com willia
  • Facebook API SDK 撤销访问权限

    如何允许用户使用其 API 服务 SDK 撤销对我的应用程序的访问权限 http developers facebook com docs sdks http developers facebook com docs sdks 查看文档 我
  • 如何在 C++ 中发送或保存函数以及接收或恢复函数并执行它?

    有什么方法可以将函数发送或保存为文件吗 我想在 Windows 平台上用 C 执行此操作 我假设读者和发件人或保存者之间存在某种约定 如果我像下面这样发送可以吗 服务器端 label1 int func1 int somevar int a
  • AngularJS:从列表动态添加组件

    因此 我正在开发一个允许用户修改模板的项目 基本模板将由组件组成 用户将能够添加或删除组件 我在网上找到了一些东西 例如grapeJS 但对于这个简单的应用程序来说 它的强度还远远不够 寻找一些有关解决此问题的方法的建议 或任何有帮助的资源
  • 为什么 django 网站上的日志功能不起作用?

    这就是我尝试过的 在我的 view py 文件中 import logging logger logging getLogger mylog logging basicConfig format name s levelname s mes
  • Dart - Base64 字符串不等于 python

    当我使用Python生成一个base64将在中使用的字符串raw key raw value GMAIL API 发送电子邮件完美发生 但是当我使用 Dart 生成相同的base64string 该字符串与 python 不同 因此我无法发
  • 如何使 Orientdb 的优势变得独特

    如何使 Edge 在 Orientdb 中独一无二 我想出的解决方案 删除边缘 再次创建它 但这并不好 Edge 没有任何属性 Example create edge is friend from 12 0 to 12 3 如果我再次调用它
  • PyTorch RuntimeError:DataLoader 工作线程(pid(s) 15332)意外退出

    我是 PyTorch 的初学者 我只是尝试一些示例在这个网页上 https github com pytorch examples 但由于此错误 我似乎无法运行 super resolution 程序 RuntimeError DataLo
  • 球与球的碰撞 - 检测和处理

    在 Stack Overflow 社区的帮助下 我编写了一个非常基本但有趣的物理模拟器 您单击并拖动鼠标来发射球 它会弹来弹去 最终停在 地板 上 我想添加的下一个重要功能是球与球的碰撞 球的运动被分解为 x 和 y 速度矢量 我有重力 每
  • lambda 演算、正规阶、正规形式、

    在 lambda 演算中 如果一项具有范式 则范阶缩减策略将始终产生它 我只是想知道如何严格证明上述命题 您提到的结果是所谓标准化定理的推论 该定理指出 对于任何归约序列 M gt N 相同项 M 和 N 之间存在另一个 标准 序列 其中您
  • 编译需要参数的表达式

    好吧 我确信这很简单 但我正在经历一个高级时刻 我有一个简单的 BinaryExpression 大于 左侧是 ParameterExpression 右侧是 ConstantExpression 我想将此表达式编译为一个函数 我可以调用该
  • 如何在 python-socketio 中将消息从 python 服务器发送到 javascript 客户端?

    socketio客户端成功连接到服务器并发送消息emit到服务器 但到客户端的另一个方向服务器失败 我找不到错误的根源 这是 这是服务器 pythonapp py基于中的示例python socketio https python sock
  • 类型错误:“_VirtualList”对象不可调用

    当我运行此代码时 我的 GUI 显示此错误 VirtualList 对象不可调用 我哪里错了 import PyPDF2 pdf open the alchemist paulo coelho pdf rb reader PyPDF2 Pd
  • 如何限制docker容器上传的速率?

    我需要防止长时间运行的多 TB 上传耗尽我的所有网络带宽 但我只能在进程级别限制其带宽使用 这意味着减慢整个计算机的网络接口或减慢该用户的网络流量不会工作 幸运的是 上传是用 Docker 容器化的 我该怎么做才能减慢 docker 容器的
  • PHP后台进程

    我写了一个 php irc 机器人 但我需要它在后台工作 有了这个 就不会有退出之类的事情了 做这个的最好方式是什么 感谢致敬 看看下面的网站 关于如何编写 PHP 守护进程有一个相当深入的解释 http kevin vanzonnevel
  • 二维等距网格中的点击检测?

    我从事网络开发已经很多年了 我正在慢慢地参与游戏开发 对于我当前的项目 我有这个等轴测图 我需要使用算法来检测正在单击哪个字段 顺便说一句 这一切都是在浏览器中使用 Javascript 实现的 The map看起来像this https