frameskip
This commit is contained in:
parent
1b3f7df1ec
commit
ff0736f602
|
@ -1,5 +1,6 @@
|
|||
#pragma once
|
||||
|
||||
#define TARGET_FPS 60
|
||||
#define TILE_SIZE 16
|
||||
#define PLAYER_WIDTH 12
|
||||
#define PLAYER_HEIGHT 12
|
||||
|
|
31
src/main.c
31
src/main.c
|
@ -1,27 +1,41 @@
|
|||
#include "conf.h"
|
||||
#include "input.h"
|
||||
#include "level.h"
|
||||
#include "player.h"
|
||||
#include <gint/cpu.h>
|
||||
#include <gint/display.h>
|
||||
#include <gint/timer.h>
|
||||
|
||||
static struct Player player;
|
||||
static int timer;
|
||||
static volatile int has_ticked;
|
||||
|
||||
static void init(void);
|
||||
static void deinit(void);
|
||||
static void draw(void);
|
||||
static void update(void);
|
||||
static int timer_callback(volatile int *);
|
||||
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
extern const struct LevelBin kble_test;
|
||||
int frameskip = 1;
|
||||
|
||||
init();
|
||||
level_load(&kble_test);
|
||||
|
||||
draw();
|
||||
do {
|
||||
update();
|
||||
int i;
|
||||
draw();
|
||||
for (i = 0; i < frameskip; i++) {
|
||||
if (has_ticked > frameskip) frameskip = has_ticked;
|
||||
while (!has_ticked)
|
||||
sleep();
|
||||
while (has_ticked)
|
||||
has_ticked = 0;
|
||||
update();
|
||||
}
|
||||
} while (input_up(K_EXIT));
|
||||
|
||||
deinit();
|
||||
|
@ -31,6 +45,10 @@ main(void)
|
|||
static void
|
||||
init(void)
|
||||
{
|
||||
timer = timer_configure(TIMER_ANY, 1000000 / TARGET_FPS,
|
||||
GINT_CALL(timer_callback, &has_ticked));
|
||||
timer_start(timer);
|
||||
|
||||
input_init();
|
||||
level_init();
|
||||
player_init(&player);
|
||||
|
@ -40,6 +58,8 @@ static void
|
|||
deinit(void)
|
||||
{
|
||||
level_deinit();
|
||||
|
||||
timer_stop(timer);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -57,3 +77,10 @@ draw(void)
|
|||
player_draw(&player);
|
||||
dupdate();
|
||||
}
|
||||
|
||||
static int
|
||||
timer_callback(volatile int *arg)
|
||||
{
|
||||
*arg += 1;
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue