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 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
while (!Finish) { SDL_Event Event; while(SDL_PollEvent(&Event)) { switch(Event.type) { case SDL_QUIT: Finish = true; break; case SDL_KEYDOWN: if (Event.key.keysym.sym == SDLK_ESCAPE) Finish = true; break; } } if((SDL_GetTicks() - Duration) >= DefinedLoopDuration) { Duration = SDL_GetTicks(); //Hier soll alles gerendert werden... SDL_GL_SwapBuffers(); } } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 |
// pseudocode sende_timer_nachrichten(10); // alle 10 sekunden if(nachricht_an_das_programm()) { if(nachricht == timer_nachricht) zeichne_frame(); } |
Zitat von »"rewb0rn"«
Also man kann natürlich in einer Schleife bleiben bis die Frametime abgelaufen ist, das ist aber sehr ineffektiv, weil man wertvolle CPU-Zeit verschwendet, man sollte also lieber die CPU abgeben. Logischerweise ist da die einzige vernünftige Möglichkeit eine Funktion vom Betriebssystem zu verwenden, weil das die CPU verwaltet. Unter Windows also Sleep(). Wenn dir das zu ungenau ist, benutz doch Sleep einfach nur solange, bis die Framezeit einen bestimmten Wert erreicht hat, und ab dann eine Schleife.
Zitat von »"Osram"«
Re usleep: Gleich der erste Google Hit sieht gut aus.
Re Sleep: Es ist nach meiner Erfahrung genau genug für den Zweck. Wir haben in unserem FluSi eine ähnliche Funktion drin (und optional sogar genau die "Nagel die framerate auf einen hardcodierten Wert fest" Methode die Tobb anstrebt, aber aus anderen Gründen) und nutzen Sleep. Das Program ist nur für Win32.
Zitat von »"Osram"«
Auf jeden Fall muss man sich sowohl bei Tobbs Ansatz als auch bei Timern überlegen was passiert wenn in einer Situation (z.B. viele Feinde auf dem Bildschirm) die vorgegebene FPS rate nicht eingehalten werden kann. Dann ist ja das in die PhysikEngine hardcodierte delta-t nicht mehr richtig.
Werbeanzeige