Game Loops mit SDL
Posted by fkrauthan | Posted in Artikel, Linux, SDL, Windows | Posted on 10-01-2009
Tags: c++, gameloop, gameschleife, SDL, spielschleife, time, tutorial, zeit
4
Worum geht es?
In diesem Artikel werde ich 3 Arten von Game Loops vorstellen. Game Loops sind die Schleifen, in denen man das Spiel fortlaufend rendert und aktualisiert. Dabei gibt es zich Ansätze, wovon ich 3 hier vorstellen möchte.
Was muss man können?
Um dieses Tutorial gut durcharbeiten zu können, sollte man sich bereits mit SDL beschäftigt haben. Es sollte reichen, z.B. das Einführungstutorial auf dieser Seite gelesen zu haben.
Welche Arten gibt es?
Man kann seine Game Loops mit einer festen Framerate und mit einer dynamischen Framerate realisieren. Des weitere kann man auch die Zeitdifferenz verwenden. Alle 3 Ansätze werde ich euch hier zeigen.
Was ist überhaupt eine Framerate?
Die Framerate ist die Anzahl der gerenderten Bilder pro Sekunde.


(2 votes, average: 4.50 out of 5)
hi, warum steht c++ bei den tags wenn du komplett in c schreibst?
gibts nen grund dafür die fps zu begrenzen?
mfg nacho
Naja im Grunde kannst du auch C++ nehmen daher im Tag c++. SDL ist halt einfach eine C Lib. Der einzige Grund ist das du bei einer begrenzten FPS keine FPS Schwankungen hast. Das heißt wenn du sie unbegrenzt hast und der immer mal wieder länger und kürzer braucht für ein Frame dann merkt man das teilweise. Wenn man sie nun fest beschränkt dann ist die Gefahr solcher Schwankungen geringer, da man die Grenze meist relativ tief setzt.
Wo genau ist der Unterschied zwischen der Ersten und der Dritten Variante? Im Grunde arbeiten beide Verfahren mit einem Faktor, der einfach von der Zeit abhängig ist. Wenn ein Frame länger braucht, ist die Entfernung größer. Diese Abhängigkeit ist bei beiden vorhanden.
Ich hatte es bei meinen Spielen auch wie in der dritten Lösung gemacht. Es gibt einen Zeitfaktor, der bei gewünschter Framerate 1 ist, bei langsamen rechnern >1 und bei schnellen Rechnern <1. Alle Bewegung wird damit multipliziert. So sieht es dann flüssig aus.
Einer der größten unterschied zwischen Version1 und Version3 ist, dass man bei der Version1 eine Division braucht für die Bewegung während Version3 mit Multiplizieren arbeitet. Das macht einen gewaltigen Geschwindigkeitsunterschied aus.