这个 C# 增量时间循环是否适合 运行 服务器端 60fps 的模拟?
Would this C# delta time loop be good for running a simulation at 60fps on server side?
对于服务器端每秒 60 次逻辑更新的 运行 模拟,您认为以下 suffice/be 足够稳定吗?这不是实时物理,而是一种温和的动作 RPG 类型的多人游戏。我不认为 Thread.Sleep 从我读过的内容来看是个好主意,但不确定如何防止它在这个循环中消耗不必要的 CPU 周期。
class Program
{
static void Main()
{
long fps = 60;
long interval = 1000 / fps * 10000;
long ticks, delta;
long prevTicks = DateTime.Now.Ticks;
long accum = 0;
while (true)
{
ticks = DateTime.Now.Ticks;
delta = (ticks - prevTicks);
prevTicks = ticks;
accum += delta;
if (accum >= interval)
{
// update logic
Console.WriteLine(accum);
accum -= interval;
}
Thread.Sleep(0);
}
}
}
根据使用“累加器”的经验,累加器只在物理模拟中有用,累加器使模拟的物理更准确,但代价是当循环 运行 缓慢时渲染更卡顿(帧率更低) ,我还建议使用双打而不是长。
对于服务器端每秒 60 次逻辑更新的 运行 模拟,您认为以下 suffice/be 足够稳定吗?这不是实时物理,而是一种温和的动作 RPG 类型的多人游戏。我不认为 Thread.Sleep 从我读过的内容来看是个好主意,但不确定如何防止它在这个循环中消耗不必要的 CPU 周期。
class Program
{
static void Main()
{
long fps = 60;
long interval = 1000 / fps * 10000;
long ticks, delta;
long prevTicks = DateTime.Now.Ticks;
long accum = 0;
while (true)
{
ticks = DateTime.Now.Ticks;
delta = (ticks - prevTicks);
prevTicks = ticks;
accum += delta;
if (accum >= interval)
{
// update logic
Console.WriteLine(accum);
accum -= interval;
}
Thread.Sleep(0);
}
}
}
根据使用“累加器”的经验,累加器只在物理模拟中有用,累加器使模拟的物理更准确,但代价是当循环 运行 缓慢时渲染更卡顿(帧率更低) ,我还建议使用双打而不是长。