SlimDX:限制帧速率以降低CPU使用率

时间:2017-07-23 15:10:58

标签: directx-9 slimdx

我正在使用SlimDX(DirectX 9)制作2D游戏引擎,但我面临两个链接在一起的问题,帧速率波动(帧频率相当高)和高CPU使用率。帧速率基本上是所有动画都运行的游戏计时器。 CPU使用率也是通过上限(20%),我想限制SlimDX绘制帧以降低CPU使用率的速度,并稳定动画和游戏速度,我怎么能这样做?

p.s我确定有更好的方法来制作游戏"计时器"与帧率分开,任何信息都将受到赞赏。

循环和inizialization:

{{1}}

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);
        }
    });