【问题标题】:How to track racing Game Car position using orderdBy List ? (Position based on Lap also)如何使用 orderdBy List 跟踪赛车游戏车的位置? (位置也基于Lap)
【发布时间】:2021-09-02 05:25:16
【问题描述】:

在我的 Race Game 中,我使用的是基于航路点的位置跟踪系统。我正在使用有序列表。 下面是我的代码,它工作正常。

IOrderedEnumerable<KeyValuePair<string, Player>> sortedPlayer = players.OrderBy(x => x.Value.distanceToWaypoint).OrderByDescending(x => x.Value.activeWaypointIndex);

我的问题是在第一圈之后,它的行为是有线的。它工作不正常。意味着考虑到游戏有 10 个航点。在玩家通过 10 个航路点到达第一个航路点后,它开始进行有线连接。

我有一个圈数计数器脚本,可以计算正确通过的圈数。是否有任何方法可以使用该圈数来解决此问题

【问题讨论】:

标签: c# unity3d position sortedlist waypoint


【解决方案1】:

一般而言,您可能更愿意使用ThenByThenByDescending,因此新查询不会完全推翻您已经对上一次调用进行的排序,而是仅在使用前一次排序时使用下一次排序两个或更多元素将在相同的位置。

那么排序顺序应该是

  1. 完成的圈数(下降)

    如果一个玩家已经完成了更多圈数,那么其他两个类别根本就无关紧要。你已经知道这个玩家更领先了。

  2. 有效航路点(下降)

    如果两名玩家完成的圈数相同,但活动航点不同,那么您知道航点指数较高的球员已经领先更多。

  3. 到活动航路点的距离

    最后,如果两个玩家完成的圈数相同且活动航路点索引相同,那么距离越短的玩家越领先。

所以你的代码可能应该是类似的东西,例如

var sortedPlayer = players
                   .OrderByDescending(x => x.Value.amountOfCompletedLaps)
                   .ThenByDescending(x => x.Value.activeWaypointIndex)
                   .ThenBy(x => x.Value.distanceToWaypoint);

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
相关资源
最近更新 更多