XNA从播放器中查找最近的矢量

我有一个向量列表和一个PlayerVector我只想知道如何在我的列表中找到最接近我的PlayerVector的Vector。

这是我的变量:

List Positions; Vector2 Player; 

变量已经声明了所有,我只需要一个简单的代码来搜索我的播放器最近的位置。 有没有一个简单的方法?

创建一个名为distanceToPlayer的int,将其设置为0。

创建一个名为nearestObject的int,将其设置为0。

使用for循环遍历所有对象。 它比foreach循环稍快,在这种情况下更有用。

在循环:

使用Vector2.Distance获取距离,并针对distanceToPlayer进行检查,如果更少,则将对象的索引号存储在nearestObject中,并将新距离存储在distanceToPlayer中。

循环完成后,您将获得整个像素的距离,并存储列表中项目的索引。 您可以使用Positions [index]访问该项目。

由于您不需要精确的距离(只是相对比较),您可以跳过毕达哥拉斯距离公式中的平方根步骤:

 Vector2? closest = null; var closestDistance = float.MaxValue; foreach (var position in Positions) { var distance = Vector2.DistanceSquared(position, Player); if (!closest.HasValue || distance < closestDistance) { closest = position; closestDistance = distance; } } // closest.Value now contains the closest vector to the player 

我是从内存写的,因为我现在无法访问XNA:

 Vector2 nerrest = Positions.Select(vect => new { distance= vect.Distance(Player), vect}) .OrderBy(x => x.distance) .First().vect; 

小技巧:在这个解决方案中,你可能可以使用PLINQ来获得远程计算的加速。