我不知道 XNA 具体是如何做到的,但是几年前在使用 OpenGL 时,我使用一些非常简单的代码完成了同样的事情。
在它的核心,我假设 XNA 有某种渲染循环,它可能会也可能不会与标准偶数处理循环集成,但为了举例,我们假设它不是。在这种情况下,你可以这样写。
TimeSpan FrameInterval = TimeSpan.FromMillis(1000.0/60.0);
DateTime PrevFrameTime = DateTime.MinValue;
while(true)
{
DateTime CurrentFrameTime = DateTime.Now;
TimeSpan diff = DateTime.Now - PrevFrameTime;
if(diff < FrameInterval)
{
DrawScene();
PrevFrameTime = CurrentFrameTime;
}
else
{
Thread.Sleep(FrameInterval - diff);
}
}
Run Code Online (Sandbox Code Playgroud)
实际上,您可能会使用诸如Environment.Ticks之类的东西而不是DateTimes(它会更准确),但我认为这说明了这一点。这应该每秒只调用大约 60 次drawScene,其余时间线程将处于休眠状态,因此不会产生任何 CPU 时间。
| 归档时间: |
|
| 查看次数: |
5122 次 |
| 最近记录: |