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来获得远程计算的加速。
- 使用ClickOnce部署自动安装更新
- System.Web.Configuration.WebConfigurationManager和System.Configuration.ConfigurationManager之间的行为差异
- 为什么我的Silverlight XAML绑定的unit testing失败了?
- 带参数的SqlCommand
- C#/ IronPython Interop和“float”数据类型
- 使用(流利)NHibernate与StructureMap(或任何IoCC)
- 我怎样才能在每两周的星期一和星期二运行石英计划?
- 图形对象到图像文件
- 我可以阻止StreamReader在使用时锁定文本文件吗?