XNA Find nearest Vector from player

﹥>﹥吖頭↗ 提交于 2019-12-23 03:53:07

问题


I have a List of vectors and a PlayerVector I just want to know how I can find the nearest Vector to my PlayerVector in my List.

Here are my variables:

List<Vector2> Positions;
Vector2 Player;

The variables are already declared and all, I just need a simple code that will search for the nearest position to my player. Isn't there a simple way?


回答1:


Create a int called distanceToPlayer, set it to 0.

Create a int called nearestObject set it to 0.

Loop through all the objects with a for loop. It is slightly faster than a foreach loop, and is more useful in this situation.

In the loop:

Get the distance with Vector2.Distance, and check it against distanceToPlayer, if less, then store the index number of the object in nearestObject, and store the new distance in distanceToPlayer.

After the loop is done, you will have the distance in whole pixels, and the index of the item in the list stored. You can access the item using Positions[index].




回答2:


Since you don't need the exact distance (just a relative comparison), you can skip the square-root step in the Pythagorean distance formula:

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



回答3:


I'm writing it from memory, because I don't have access to XNA now:

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

Little tips: In this solution you probably can use PLINQ to gain little speedup on distance computing.



来源:https://stackoverflow.com/questions/6920238/xna-find-nearest-vector-from-player

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!