如何创建一个 "buffer" 来存储每个帧的变量的先前值
How to create a "buffer" that stores previous value of a variable for each frame
我需要知道 10 帧前变量的值。
我考虑过制作一个数组,但每帧偏移值似乎有点过分。
任何idea/thought?
你可以创建一个基于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());
我将把它留给 reader 来实现进一步的实用方法,例如 Clear()
。
我需要知道 10 帧前变量的值。 我考虑过制作一个数组,但每帧偏移值似乎有点过分。
任何idea/thought?
你可以创建一个基于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());
我将把它留给 reader 来实现进一步的实用方法,例如 Clear()
。