Warning: session_start(): open(/var/lib/php/sessions/sess_d2526756afd21315fadae0a6f2b3af4d, O_RDWR) failed: No such file or directory (2) in /var/www/web1319/html/cwx/phpwebed/config.inc.php on line 1

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /var/www/web1319/html/cwx/phpwebed/config.inc.php:1) in /var/www/web1319/html/cwx/phpwebed/config.inc.php on line 1
codeworx.org - GameDev - Tutorials - Framebremse

www.codeworx.org/game-dev/Framebremse

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

 
 

Warning: Unknown: open(/var/lib/php/sessions/sess_d2526756afd21315fadae0a6f2b3af4d, O_RDWR) failed: No such file or directory (2) in Unknown on line 0

Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php/sessions) in Unknown on line 0