试图找出两点之间的距离



我正试图找到两个矢量之间的距离。目前这是我的代码。

if (((enemyOrigin.X - player.playerOrigin.X) * (enemyOrigin.X - player.playerOrigin.X) + (enemyOrigin.Y - player.playerOrigin.Y) * (enemyOrigin.Y - player.playerOrigin.Y)) < 80 * 80)
isEnemyInRange = true;

我有一个在if语句中完美工作的A*路径查找,该语句检查isEnemyInRange是否为false。因此,如果敌人在80像素外,就应该保持静止。

if (!isEnemyInRange)
{
//A*//
}

有了这一切,敌人并没有停留在80像素之外,它只是在没有其他一切的情况下找到了玩家的位置。

您的示例代码似乎是正确的,所以您的问题应该在其他地方。

我喜欢使用这样的功能:

bool AreInRange(float range, Vector2 v1, Vector2 v2)
{
var dx = v1.x - v2.x;
var dy = v1.y - v2.y;
return dx * dx + dy * dy < range * range;
}

然后像这样使用这个功能:

if (!AreInRange(80, enemyOrigin, player.playerOrigin))
{
//Your code
}

您可以使用默认的Vector2.Distance方法来计算两个向量之间的距离。

Vector2.Distance(enemyOrigin, player.playerOrigin)

假设这两个变量将各自的位置表示为Vector2

附加阅读:https://learn.microsoft.com/en-us/previous-versions/windows/xna/bb196336%28v%3dxnagamestudio.10%29

最新更新