Eine einfache Framebremse:
Damit ein Spiel auf einem sehr schnellen Computer auch noch normal spielbar
ist (man erinnere sich an "C&C I"!), muss eine sogenannte Framebremse
eingebaut werden. Sie dient dazu das Spiel so stark abzubremsen, das es auch
noch auf neueren PCs normal schnell läuft. (Was natürlich nicht heißt,
das es auf langsamen Systemen genauso schnell läuft, es wird nur eine Maximalgrenze
festgelegt.) Bei iungefähr 25 bis 30 Bildern pro Sekunde ist das menschliche
Auge zu träge um noch Einzelbilder zu erkennen, die Szene erscheint also
uns dann flüßig. Also setzen wir die Dauer eines Frames auf z.B.
28 ms fest. Also los. (Um GetTickCount nutzen zu können muss windows.h
inkludiert werden!)
startzeit = GetTickCount();
wird vor dem Rendern der Szene aufegrufen, es wird die Startzeit in der gleichnamigen
Variable gespeichert. Jetzt folgt das Rendern und alle anderen zeitintensiven
Prozesse. Am Ende der Hauptschleife wird der Ablauf solange verzögert bis
ein bestimmter Wert erreicht ist. Dieser kann zum Beispiel 35 Millisekunden betragen
( ~ 1/28 einer Sekunde = 28 Frames pro Sekunde) Es geht also genau nach 35 Millisekundenweiter
in den nächsten Frame.
while( (GetTickCount() - startzeit ) < 35);
{
// Hier passiert nichts :)
}
Und so könnte eine Spielschleife mit Framebremse in etwa aussehen:
int startzeit;
bool abbruch=false;
// Initialisierungen etc
while(!abbruch)
{
startzeit = GetTickCount();
// Alle nötigen Berechnungen (Rendering, etc )
while( (GetTickCount() - startzeit ) < 35);
{
// Hier passiert nichts ;)
}
}
Das wäre auch schon alles ;)
Hans-Jakob Schwer, 7.12.2001 codeworx.org