我的项目有很大的问题。我目前正在尝试制作一些在我看来像塔防游戏的东西。使用 HTML 画布元素。
我目前的问题是,我似乎无法找到一个方程来检测蠕变是否在圆形塔附近。
假设小兵在 10 上有 ax,在 10 上有 ay。然后塔在 30 上有 ax,在 30 上有 ay。现在,如果我想以直径为 20 的圆圈检测塔附近的所有小兵。
这个等式在 JavaScript 中会是什么样子?
-
万分感谢
我的项目有很大的问题。我目前正在尝试制作一些在我看来像塔防游戏的东西。使用 HTML 画布元素。
我目前的问题是,我似乎无法找到一个方程来检测蠕变是否在圆形塔附近。
假设小兵在 10 上有 ax,在 10 上有 ay。然后塔在 30 上有 ax,在 30 上有 ay。现在,如果我想以直径为 20 的圆圈检测塔附近的所有小兵。
这个等式在 JavaScript 中会是什么样子?
-
万分感谢
方程如下(两个向量/点之间的距离):
sqrt((x1-x2)^2 + (y1-y2)^2)
这是二维向量。祝你好运!
Sheesh,你们中的一些评论者需要让提问者更加放松。对于很多人来说,这甚至可以分解为一个关于直角三角形的问题并不一定很明显。
Marjin 的回答是正确的,但实际上你可以更进一步,效率更高,这将有助于最终提高游戏的整体性能。
Math.sqrt(Math.pow((x1 - x2), 2) + Math.pow((y1 - y2), 2));
会给你 x1,y1 和 x2,y2 之间的距离,但你实际上不需要做平方根部分。
你看,你并不真正关心距离是多少,你只关心它是否大于或小于另一个距离。因此,您将始终比较两个距离,在这种情况下,您将与上述公式的距离与 200 进行比较。由于您正在比较距离,您可以改为平方 200:
Math.pow(200, 2)
得到距离的平方。然后你可以使用上面没有平方根的公式:
Math.pow((x1 - x2), 2) + Math.pow((y1 - y2), 2);
并将公式与 40000 而不是 200 进行比较。这样做的好处是您只需调用Math.pow
200 一次,作为回报,您永远不必调用Math.sqrt
!由于您将在一秒钟内多次检查大量小兵,因此这些调用加起来,如果您比较平方距离而不是距离,它应该会让您的游戏更高效。
下面是一些示例代码,说明如何使用它们与您的目的几乎相同。它使用console.log
,如果您不知道如何查看,您应该查看本教程前两部分中的视觉效果。
这是代码: