我的项目存在问题。 我现在正试图制作一些看起来像塔防游戏的东西。使用HTML canvas元素。
我目前的问题是,我似乎无法找到一个方程式,我可以检测到一个蠕动是否在一个圆形塔附近。
让我们说蠕变的斧头在10上,而a在10上。塔然后在30岁时斧头,在30岁时a。现在,如果我想在直径为20的圆圈中探测塔附近的所有小兵。
JavaScript中的那个等式是什么样的?
-
非常感谢
答案 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前两部分中的视觉效果。
以下是代码: