pętla stałokrokowa gdzie zbieranie danych
Ostatnio zmodyfikowano 2014-11-15 15:30
dek12 Temat założony przez niniejszego użytkownika |
pętla stałokrokowa gdzie zbieranie danych » 2014-11-15 10:55:26 siema, ogólnie w artykułach o pętli stałokrokowej, np w tym float dt = 0.0f; //czas od ostatniej aktualizacji float lastUpdateTime = GetCurrentTime(); //czas ostatniej aktualizacji //przykladowa funkcja GetCurrentTime() pobiera //nam od systemu aktualny czas w sekundach float accumulator = 0.0f; const float TIME_STEP = 0.03; //krok czasowy, a zarazem czas trwania ramki //fizyki w sekundach; tutaj 30 milisekund, czyli //ok. 30 aktualizacji na sekundę while(true) { dt = GetCurrentTime() - lastUpdateTime; //obliczenie czasu od ostatniej klatki lastUpdate += dt; //podmiana accumulator += dt; GrabInput(); //<-- zbieranie wejscia z klawiatury, myszki, sieci, itp. while(accumulator > TIME_STEP) { UpdateGame(TIME_STEP); //<-- aktualizacja fizyki i logiki gry accumulator -= TIME_STEP; } RenderGame(); //<-- wyswietlenie aktualnego stanu na ekranie }
zbieranie danych jest przed wejściem do pętli stałokrokowej. a gdy czytałem książkę o sfml, tą od autorów sfml, to tam zbieranie danych jest środku pętli while (timeSinceLastUpdate > TimePerFrame) { timeSinceLastUpdate -= TimePerFrame; processEvents(); update(TimePerFrame); }
i które podejście według was jest lepsze? co sądzicie? |
|
kubawal |
» 2014-11-15 11:46:30 Pętla stałokrokowa, która pokazałeś to pętla stałokrokowa, ale tylko dla fizyki. FPS'y (takie od renderowania) będą zmienne. Ten przykład pokazuje jedynie przypadek, gdy stosujesz bardziej zaawansowaną fizykę, która działa stabilniej dla stałego kroku. |
|
Quirinnos |
» 2014-11-15 15:30:34 Ale o ile rendering będzie zmienny, to jednak aktualizacja nie. Co względnie daje stabilny rendering ;) Dla mnie większej różnicy nie ma gdzie ten input będzie zbierany, ale niby dobrze, jak jest zbierany przed pętlą. |
|
« 1 » |