我正在使用SlimDX(DirectX 9)制作2D游戏引擎,但我面临两个链接在一起的问题,帧速率波动(帧频率相当高)和高CPU使用率。帧速率基本上是所有动画都运行的游戏计时器。 CPU使用率也是通过上限(20%),我想限制SlimDX绘制帧以降低CPU使用率的速度,并稳定动画和游戏速度,我怎么能这样做?
p.s我确定有更好的方法来制作游戏"计时器"与帧率分开,任何信息都将受到赞赏。
循环和inizialization:
{{1}}
答案 0 :(得分:0)
NVM我有一个有用的想法,因为我想要60帧/秒,这意味着每帧之间大约16ms,所以我测量渲染帧所需的时间然后Thread.Sleep为16 - 渲染时间(如果大于0) ,现在CPU使用率为零,如果引擎需要超过16ms来绘制一个帧,那么它将直接绘制下一帧。
var form = new RenderForm(World.WindowTitle);
form.ClientSize = new Size(World.WindowWidth, World.WindowHeight);
var device = new Device(new Direct3D(), 0, DeviceType.Hardware, form.Handle, CreateFlags.HardwareVertexProcessing, new PresentParameters()
{
BackBufferWidth = form.ClientSize.Width,
BackBufferHeight = form.ClientSize.Height
});
//Some stuff here, irrelevant to DirectX
MessagePump.Run(form, () =>
{
Stopwatch stopwatch = Stopwatch.StartNew();
device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0);
device.BeginScene();
sprite.Begin(SlimDX.Direct3D9.SpriteFlags.AlphaBlend);
//Stuff here
sprite.End();
device.EndScene();
device.Present();
stopwatch.Stop();
int ms = 16 - (int)(stopwatch.ElapsedMilliseconds);
if (ms > 0)
{
Thread.Sleep(ms);
}
});