1

我的项目有很大的问题。我目前正在尝试制作一些在我看来像塔防游戏的东西。使用 HTML 画布元素。

我目前的问题是,我似乎无法找到一个方程来检测蠕变是否在圆形塔附近。

假设小兵在 10 上有 ax,在 10 上有 ay。然后塔在 30 上有 ax,在 30 上有 ay。现在,如果我想以直径为 20 的圆圈检测塔附近的所有小兵。

这个等式在 JavaScript 中会是什么样子?

-

万分感谢

4

2 回答 2

3

方程如下(两个向量/点之间的距离):

sqrt((x1-x2)^2 + (y1-y2)^2)

这是二维向量。祝你好运!

于 2012-05-19T22:46:23.117 回答
1

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.pow200 一次,作为回报,您永远不必调用Math.sqrt!由于您将在一秒钟内多次检查大量小兵,因此这些调用加起来,如果您比较平方距离而不是距离,它应该会让您的游戏更高效。

下面是一些示例代码,说明如何使用它们与您的目的几乎相同。它使用console.log,如果您不知道如何查看,您应该查看本教程前两部分中的视觉效果。

这是代码:

http://jsfiddle.net/4aPjB/

于 2012-05-20T04:22:43.090 回答