【问题标题】:Detect mouse collision on a 2d grid without using loops在不使用循环的情况下检测 2d 网格上的鼠标碰撞
【发布时间】:2019-08-27 21:56:28
【问题描述】:

我正在构建一个迷宫求解器,最近我希望能够在网格上绘制,而不必使用数组手动构建迷宫。无论如何,我坐下来想“必须有一种更有效的方法来确定鼠标在单击事件时与哪个单元格发生碰撞,而不是必须遍历整个网格,这在最坏的情况下会花费 @987654327 @.” 经过一番思考,我想出了以下解决方案。 我知道每个网格的大小是恒定的(在我的情况下为16x16),并且我知道鼠标的位置。所以我决定将鼠标位置除以tileSize,然后向下取整。

我的问题是,这是否比逐个单元格地迭代整个网格更好。我还没有看到有人这样做,所以我想知道是否有一些边缘情况我没有想到哪个可能不适用于此解决方案。

【问题讨论】:

  • 你将如何确定tileSize
  • @PM77-1 tileSize 是 16,如果你的方块是 16x16.. 或 32,如果它们是 32x32
  • 是的,这是一个更好的解决方案,它一直用于计算机图形学。它不是唯一的或不寻常的,它是解决这个问题的标准方法。

标签: javascript arrays performance collision-detection


【解决方案1】:

您所做的是标准的做法。老实说,我从来没有想过通过任何形式的循环来做到这一点。

由于这被标记为,我将继续推荐我的这个答案,以防您在为被拉伸或有边框的画布获取正确坐标时遇到任何问题:https://stackoverflow.com/a/27204937/607407

链接的答案完全使用您问题中的公式确定鼠标悬停的像素,tileSize 为一。对于给定的tileSize,图块为[floor(x/tileSize), floor(y/tileSize)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    相关资源
    最近更新 更多