SFMl:konstante Framerate
-
Hi,
im sfml-Toturial wird ein beispiel gezeigt, welche die Framerate anscheind auf jedem rechner Konstant halten soll, jedoch verstehe ich nicht ganz wie das funktioniert.hier das Beipsiel
Whereas this one will ensure constant speed on every hardware :
sf::Clock Clock;
const float Speed = 50.f;
float Left = 0.f;
float Top = 0.f;while (App.IsOpened())
{
float ElapsedTime = Clock.GetElapsedTime();
Clock.Reset();if (App.GetInput().IsKeyDown(sf::Key::Left)) Left -= Speed * ElapsedTime;
if (App.GetInput().IsKeyDown(sf::Key::Right)) Left += Speed * ElapsedTime;
if (App.GetInput().IsKeyDown(sf::Key::Up)) Top -= Speed * ElapsedTime;
if (App.GetInput().IsKeyDown(sf::Key::Down)) Top += Speed * ElapsedTime;
}könnte mir das einer erklären ? wollte bei meinem spiel auch eine konstante framerate einbringen, damit das spiel auf jedem rechner gleich schnell läuft. oder gibt es da noch eine andere möglichkeit?
-
Hey!
Was du meinst, ist wohl:
sf::RenderWindow::SetFramerateLimit()

Dein Codebeispiel oben multipliziert Bewegungen mit der Frametime, somit sollen Objekt auf schwächeren Computern trotzdem gleichen Weg zurücklegen.
Allerdings ist das nicht ganz so einfach...MfG
-
hab es jetzt so gemacht :
fenster.SetFramerateLimit(60);
also quasi das selbe was du geschrieben hast
sollte doch damit wohl auf allen rechnern konstant laufen, da es ja auch nur nen kleines spiel ist (ähnlich wie tetris)
-
Nein, das sagt nur, dass es auf keinem Rechner schneller als mit 60FPS läuft (vorausgesetzt, der GraKa-Treiber erlaubt es, ein Limit zu setzen). Langsamer wird es sehr wohl laufen können, also keine konstante Framerate. Bei unkomplexen Spielen kein Problem, aber mehr, je komplexer die Darstellung wird.
Was man braucht, um ein Spiel auf verschiedenen Rechnern gleich schnell laufen zu lassen (konstante Updaterate der Logik, nicht die FPS, die sind im Bereich 25-60 uninteressant), ist eine Möglichkeit des frameunabhängigen Timings.
Schön wird das z.B. hier erklärt:
http://www.experimentsingameprogramming.com/chapter6.phpOb das der Weisheit letzter Schluss ist, weiß ich allerdings nicht. Persönlich finde ich sowas weitaus schöner als dieses x = speed * deltaTime.
Hoffentlich äußert sich Herr rapso noch dazu, der scheint eine Menge Ahnung davon zu haben
