Je suis actuellement en train de créer un moteur de jeu 2D utilisant C#, GDI et j'ai configuré un simple cadre. Le jeu ne peut que rendre 60fps. Pour autant que je sache, il n'y a pas de problème avec le code, je voudrais juste une façon plus propre de rendre 60fps et pas plus.Boucle de jeu C# GDI (compteur FPS)
Voici mon code, toute aide serait grande
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);
}
}
}
}
Les gars de SlimDX (https://slimdx.org/docs/html/Managed_Message_Loop.htm) l'ont utilisé au lieu de 'Application.DoEvents()': https://blogs.msdn.microsoft.com/tmiller/ 2005/05/05/mon-dernier-post-sur-rendre-boucles-espérons-le / –