检测圆圈附近的其他物体

时间:2012-05-19 22:38:37

标签: javascript math canvas

我的项目存在问题。 我现在正试图制作一些看起来像塔防游戏的东西。使用HTML canvas元素。

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

让我们说蠕变的斧头在10上,而a在10上。塔然后在30岁时斧头,在30岁时a。现在,如果我想在直径为20的圆圈中探测塔附近的所有小兵。

JavaScript中的那个等式是什么样的?

-

非常感谢

2 个答案:

答案 0 :(得分:3)

等式如下(两个矢量/点之间的距离):

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

这是2d向量。古德勒克!

答案 1 :(得分: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进行比较。这样做的好处是,您只能在200上拨打Math.pow一次,作为回报,您永远不必再拨打Math.sqrt!因为你会每秒多次检查很多小怪物,所以如果你比较平方距离而不是距离,你应该让你的游戏更加高效。

以下是一些示例代码,说明了如何使用它们几乎完全相同。它使用console.log,如果您不知道如何查看,则应查看this tutorial前两部分中的视觉效果。

以下是代码:

http://jsfiddle.net/4aPjB/