저는 현재 C#, GDI를 사용하여 2D 게임 엔진을 만들고 간단한 프레임 캡을 설정했습니다. 게임은 60fps 만 렌더링 할 수 있습니다.C# GDI 게임 루프 (FPS 카운터)
코드에 문제가 없다는 것을 알고있는 한, 나는 더 깨끗한 60fps 렌더링 방법을 원합니다. 여기
는 모자 (밀리 초) 잠을 간단하게 할 수, 도움이, 프레임 등 등, 렌더링, 대신 경과 시간을 추적하는 데에, 시나리오에 public void Run()
{
window.Show();
window.Focus();
Initialize();
isRunning = true;
canRender = true;
timer = new Stopwatch();
timer.Start();
// the amount of milliseconds needed to pass before rendering next frame
double frameCapCounter = 16.666666;
while (isRunning)
{
Application.DoEvents();
if (window.Focused)
{
if (timer.ElapsedMilliseconds >= frameCapCounter)
{
canRender = true;
frames += 1; // update amount of frames
frameCapCounter += 16.666666; // increment counter
}
else
{
canRender = false;
}
// this is used to check if a second has passed, and if so
// we set the fps variable to the amount of frames rendered
// and reset all variables.
if (timer.ElapsedMilliseconds >= 1000)
{
fps = frames;
frames = 0;
frameCapCounter = 0;
timer.Restart();
}
Update();
LateUpdate();
if (canRender)
Render();
else
{
Thread.Sleep(1);
}
}
}
}
SlimDX (https://slimdx.org/docs/html/Managed_Message_Loop.htm)의 사람들이'Application.DoEvents()'대신 이것을 사용했습니다 : https://blogs.msdn.microsoft.com/tmiller/ 2005/05/05/my-last-post-on-render-loops-hopefully / –