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

本文关键字:缓冲区 一个 变量 存储 一帧 创建 何创建 | 更新日期: 2023-09-27 18:16:09

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

任何思想/想法吗?

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

您可以创建一个基于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()