如何创建一个"缓冲区"为每个帧存储变量的先前值

时间:2015-10-06 11:38:33

标签: c# variables unity3d buffer

我需要知道10帧前变量的值。 我想过制作一个数组,但每帧的偏移值似乎有点过分。

任何想法/想法?

1 个答案:

答案 0 :(得分:5)

您可以根据System.Collections.Generic.Queue<T>创建数据结构,以存储每个帧的变量。

优于Array的优点是您不需要在每个帧上移动每个变量,只需添加最新的变量即可。这使其成为O(1)操作,而不是O(n)

class History<T>
{
    Queue<T> data;
    public int MaxCapacity { get; private set; }

    public History(int maxCapacity) 
    {
        MaxCapacity = maxCapacity; 
        data = new Queue<T>(maxCapacity);
    }

    public void AddEntry(T newData)
    {
        if (data.Count >= MaxCapacity)
        {
            data.Dequeue();
        }
        data.Enqueue(newData);
    }

    public T Peek()
    {
        return data.Peek();
    }
}

用法

var h = new History<float>(10);

//on each frame
h.AddEntry(0.12345f);

//get the value 10 frames ago (or the earliest one recorded)
Console.WriteLine(h.Peek());

我将把它留给读者来实现更进一步的实用方法,例如Clear()