Metoda stałokrokowa vs metoda zmiennokrokowa - główna pętla gry
Ostatnio zmodyfikowano 2016-04-26 13:29
aaadam Temat założony przez niniejszego użytkownika |
» 2016-04-26 13:29:47 jeszcze jedno pytanie bo chcę się upewnić, że na pewno dobrze jest, accumulator += dt/1000; dałem tak żeby przerobić milisekundy na sekundy. Teraz gdy dam sleepa 1 sekunde to update wykona sie 33 razy a gdy 0.6 to 20. Jak coś jeszcze jest źle to proszę o pomoc. float clamp( float what, float a, float b ) { return min( b, max( what, a ) ); }
int main() { float dt = 0.0f; float lastUpdateTime = GetTickCount(); float accumulator = 0.0f; const float TIME_STEP = 0.03f; const float MAX_ACCUMULATED_TIME = 1.0; while( true ) { dt = GetTickCount() - lastUpdateTime; lastUpdateTime += dt; dt = max( 0, dt ); accumulator += dt / 1000; accumulator = clamp( accumulator, 0.0f, MAX_ACCUMULATED_TIME ); GrabInput(); while( accumulator > TIME_STEP ) { UpdateGame( TIME_STEP ); accumulator -= TIME_STEP; } Sleep( pause ); RenderGame(); } }
|
|
1 « 2 » |