Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 |
if ( get_ticks() < 1000 / FPS ) ) { //FPS = 60 Sleep( ( 1000 / FPS ) - get_ticks() ); } |
Anonymous
unregistriert
Anonymous
unregistriert
Aber das resultiert doch häufig in zusätzlichen Abfragen, weil dadurch Konflikte entstehen können. Beispielsweise mit der Kollision; wenn die Framerate gerade niedrig ist, können Objekte durch andere hindurchrutschen...Zitat von »"unsigned long"«
Darum ist es immer hilfreich die Zeit vor dem Rendern und nach dem Rendern zu erfassen und den daraus resultierenden Delta für deine Bewegungen usw. zu benutzen.
Anonymous
unregistriert
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 |
//update input //clear screen //rechnen,rendern if ( get_ticks() < 1000 / FPS ) ) { //FPS = 60 Sleep( ( 1000 / FPS ) - get_ticks() ); } //update screen //input anfrage |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 |
//update input //clear screen if(get_frames() % 60 <= 0){ //bei jeden 60tel frame rendern //rechnen,rendern } //update screen //input anfrage |
Anonymous
unregistriert
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
::MSG message = { 0 }; ::DWORD time_current = 0L; ::DWORD time_next = 0L; // Zeit-Stempel initialisieren time_current = time_next = ::timeGetTime (); // Erste Message holen: ::PeekMessage (&message, NULL, 0, 0, PM_NOREMOVE); // Programm durchstarten: while (message.message != WM_QUIT) { // Ist eine Nachricht bereit für die Verarbeitung? if (::PeekMessage (&message, NULL, 0, 0, PM_REMOVE)) { ::TranslateMessage (&message); ::DispatchMessage (&message); } // Alle Nachrichten sind verarbeitet, jetzt sind wir dran else { // Aktuelle Zeit holen. time_current = ::timeGetTime (); // Delta-Zeit berechnen. const ::DWORD time_delta = time_current - time_next; // Updaten und Zeichnen update (time_delta); render (time_delta); // Die aktuelle Zeit ist die Alte. time_next = time_current; } } // [...] void update (::DWORD delta) { const double millisecond_elapsed = static_cast<double>(delta) / 1.000; // Mach was mit der Zeit: (Objekt bewegt sich 200 Einheiten pro Sekunde. object.x += 200.0 * millisecond_elapsed; } |
Werbeanzeige