编程语言
首页 > 编程语言> > c#-将游戏循环限制为每秒20帧

c#-将游戏循环限制为每秒20帧

作者:互联网

参见下面我的主游戏循环.我正在寻找一种方法来将此循环限制为每秒20帧

    private void renderFrame()
    {

        while (Running)
        {
            game_controls.CheckKeyPress();
            Frame = game_graphics.DrawFrame();

            Panel_Graphics.DrawImage(Frame, 0, 0,320, 320);


            ThreadMonitor.MonitorFPS();

        }

    }

下面是ThreadMonitor类:

class Monitor
{

    private int FrameCount;
    private long TickCount;

    private int PanelPosition = 2;
    private Font font = new Font(FontFamily.GenericSansSerif, 12);

    private Graphics Monitor_Graphics;

    public Monitor(Graphics g)
    {
        AllocConsole();
        Monitor_Graphics = g;
    }

    public void MonitorFPS()
    {
        FrameCount++;

        if (Environment.TickCount >= TickCount + 1000)
        {
            Console.WriteLine("Running: " + FrameCount + "fps");
            FrameCount = 0;
            TickCount = Environment.TickCount;
        }

    }

    #region ShowConsole kernel32.dll

    /// <summary>
    /// Generates Console Window for debugging purposes
    /// </summary>
    /// <returns> Console </returns>

    [DllImport("kernel32.dll", SetLastError = true)]
    [return: MarshalAsAttribute(UnmanagedType.Bool)]
    static extern bool AllocConsole();

    #endregion

我希望帧均匀生成,我不希望游戏停止半秒钟.

我不确定如何做到这一点.

解决方法:

在循环中等待50毫秒不会使您的游戏达到20 FPS,这会使您的游戏最高为20 FPS(通常较慢),具体取决于循环的内容和当前的系统/ CPU负载.只要确保您了解其中的区别即可.

更好的方法是在循环开始时根据当前的Environment.TickCount等待所需的毫秒数.例如,您的TickCount为120ms,并且您希望下一个游戏滴答时间为150ms,则需要等待30毫秒,如果已经是160ms,则根本不需要等待.

标签:game-engine,c
来源: https://codeday.me/bug/20191119/2034027.html