当在一个时间间隔内进行轮询时,检测变量的特定值。

问题描述 投票:0回答:1

我正在开发一个应用程序,它可以监控在赛道上比赛的汽车(计时),我需要记录汽车通过维修通道的次数。

我有代码来检测汽车何时进入维修通道,汽车在赛道上的位置通过一个名为splinePosition的变量记录下来,这个变量是一个0.00000到1.00000的浮点数。汽车在赛道上的位置(splinePosition)每隔250ms从游戏中传递到我的应用程序。

我想在每次赛车通过维修道并通过splinePosition 0.00000时添加到PitStops变量中,这就是开始和结束线。我试过这样做...

        else if (CarLocation == CarLocationEnum.Pitlane)
        {
            LocationHint = "PIT";
            if (Math.Abs(splinePosition) == 0)
                PitStops += 1;
        }

问题是我目前的代码不可靠,因为当汽车在坑道中高速行驶并通过花键位置0.00000时,在一个250ms的时间间隔内,花键位置可能是0.99000(就在终点线之前),而下一个可能是0.01000(就在终点线之后),所以从未增加PitStops变量,因为它从未看到0.00000。如果我为一个范围添加一个条件,它有时会根据车速将PitStops变量递增两次或更多(例如,它可能在该范围内有超过一个250ms的间隔)。

解决这个问题的正确方法是什么?

c#
1个回答
0
投票

我想出了这样的方法。

public class Class
{

    private double _prevPosition = 0;

    public void Sample(double splinePosition)
    {
        int prevLane = (int)Math.Floor(this._prevPosition);
        int currLane = (int)Math.Floor(this._prevPosition + splinePosition);
        int numberOfPitstops = currLane - prevLane;
        if (numberOfPitstops > 0)
        {
            //do whatever
        }
        this._prevPosition += splinePosition;
    }

}

在每一次Sample调用时(即投票结果) 函数计算当前车道和前一个车道的差异。不幸的是,这种方法的可靠性受限于轮询的间隔:你应该保证每个车道至少调用一次函数。


0
投票

如果汽车不能在时间间隔内绕过赛道,那么你要做的就是检查CurrentPos < LastPos.

© www.soinside.com 2019 - 2024. All rights reserved.