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