我正试图找到两个矢量之间的距离。目前这是我的代码。
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