fix: use accumulator to correct game loop
This commit is contained in:
+6
-7
@@ -12,10 +12,7 @@ static void on_signal(void) { running = 0; }
|
|||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
skele_video_config_t video_cfg;
|
skele_video_config_t video_cfg;
|
||||||
uint64_t last, now, elapsed;
|
uint64_t last, now, elapsed, accum = 0;
|
||||||
|
|
||||||
(void)argc;
|
|
||||||
(void)argv;
|
|
||||||
|
|
||||||
skele_clock_init(on_signal);
|
skele_clock_init(on_signal);
|
||||||
|
|
||||||
@@ -58,10 +55,12 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
now = skele_time_ns();
|
now = skele_time_ns();
|
||||||
elapsed = now - last;
|
elapsed = now - last;
|
||||||
|
accum += elapsed;
|
||||||
|
last = now;
|
||||||
|
|
||||||
if (elapsed >= skele_tick_ns) {
|
while (accum >= skele_tick_ns) {
|
||||||
game_tick();
|
skele_tick();
|
||||||
last = now;
|
accum -= skele_tick_ns;
|
||||||
}
|
}
|
||||||
|
|
||||||
skele_video_present();
|
skele_video_present();
|
||||||
|
|||||||
@@ -12,10 +12,7 @@ static void on_signal(void) { running = 0; }
|
|||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
skele_video_config_t video_cfg;
|
skele_video_config_t video_cfg;
|
||||||
uint64_t last, now, elapsed;
|
uint64_t last, now, elapsed, accum = 0;
|
||||||
|
|
||||||
(void)argc;
|
|
||||||
(void)argv;
|
|
||||||
|
|
||||||
skele_clock_init(on_signal);
|
skele_clock_init(on_signal);
|
||||||
|
|
||||||
@@ -58,10 +55,12 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
now = skele_time_ns();
|
now = skele_time_ns();
|
||||||
elapsed = now - last;
|
elapsed = now - last;
|
||||||
|
accum += elapsed;
|
||||||
|
last = now;
|
||||||
|
|
||||||
if (elapsed >= skele_tick_ns) {
|
while (accum >= skele_tick_ns) {
|
||||||
game_tick();
|
skele_tick();
|
||||||
last = now;
|
accum -= skele_tick_ns;
|
||||||
}
|
}
|
||||||
|
|
||||||
skele_video_present();
|
skele_video_present();
|
||||||
|
|||||||
Reference in New Issue
Block a user