见下面我的主要游戏循环。我正在寻找一种方法将此循环限制为每秒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
我希望帧能够均匀生成我不希望游戏停止半秒钟。
我不确定如何实现这一点。
答案 0 :(得分:3)
在循环内等待50ms不会使你的游戏达到20 FPS,这将使你的游戏最多20 FPS,通常更慢,这取决于你的循环内容和当前系统/ CPU负载。只要确保你了解其中的差异。
更好的方法是根据循环开头中的当前Environment.TickCount等待所需的毫秒数。例如,你的TickCount是120毫秒,你希望下一个游戏时间为150毫秒,你需要等待30毫秒,如果它已经是160毫秒,你根本不需要等待。