examples/rpgwalk: FPS-метр
Плашка слева-сверху (значение раз в секунду, рисуется на обеих страницах — fps_draw=2, как в examples/space). ~39 fps на 8 ходящих персонажах (кадр на грани 20 мс — частично двухvsync'овые кадры). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -41,7 +41,7 @@ mouse 4382
|
|||||||
openenv 6124
|
openenv 6124
|
||||||
palfile 5406
|
palfile 5406
|
||||||
ptime 5744
|
ptime 5744
|
||||||
rpgwalk 9484
|
rpgwalk 9683
|
||||||
rt_test 4892
|
rt_test 4892
|
||||||
seek 4188
|
seek 4188
|
||||||
simple 955
|
simple 955
|
||||||
|
|||||||
|
@@ -101,6 +101,22 @@ static void turn_90(uint8_t i)
|
|||||||
go_edge(i);
|
go_edge(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* FPS-плашка слева-сверху: значение раз в секунду, рисуется на ОБЕИХ
|
||||||
|
* страницах (fps_draw = 2 кадра), банк 0x50 — heal её учитывает. */
|
||||||
|
static void show_fps(uint8_t v)
|
||||||
|
{
|
||||||
|
char buf[4];
|
||||||
|
|
||||||
|
buf[0] = (char)('0' + (v / 100) % 10);
|
||||||
|
buf[1] = (char)('0' + (v / 10) % 10);
|
||||||
|
buf[2] = (char)('0' + v % 10);
|
||||||
|
buf[3] = 0;
|
||||||
|
setcolor(WHITE);
|
||||||
|
setfillstyle(SOLID_FILL, BLACK);
|
||||||
|
bar(0, 0, 27, 9);
|
||||||
|
outtextxy(2, 1, buf);
|
||||||
|
}
|
||||||
|
|
||||||
static void draw_field(void)
|
static void draw_field(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@@ -124,6 +140,7 @@ static void draw_field(void)
|
|||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
uint8_t i, page, hidden;
|
uint8_t i, page, hidden;
|
||||||
|
uint8_t frames = 0, last_sec, fps_val = 0, fps_draw = 0;
|
||||||
datetime_t dt;
|
datetime_t dt;
|
||||||
|
|
||||||
if (atlas_load(&at1, "bard1.atl") != 0 &&
|
if (atlas_load(&at1, "bard1.atl") != 0 &&
|
||||||
@@ -161,6 +178,7 @@ int main(void)
|
|||||||
gfx_set_visible_page(0);
|
gfx_set_visible_page(0);
|
||||||
getdatetime(&dt);
|
getdatetime(&dt);
|
||||||
srand((unsigned)(dt.second * 77u + dt.minute));
|
srand((unsigned)(dt.second * 77u + dt.minute));
|
||||||
|
last_sec = dt.second;
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if (kbhit() && getch() == 27)
|
if (kbhit() && getch() == 27)
|
||||||
@@ -176,6 +194,18 @@ int main(void)
|
|||||||
|
|
||||||
hidden = gfx_get_visible_page() ^ 1;
|
hidden = gfx_get_visible_page() ^ 1;
|
||||||
gfx_set_draw_page(hidden);
|
gfx_set_draw_page(hidden);
|
||||||
|
frames++;
|
||||||
|
getdatetime(&dt);
|
||||||
|
if (dt.second != last_sec) {
|
||||||
|
last_sec = dt.second;
|
||||||
|
fps_val = frames;
|
||||||
|
frames = 0;
|
||||||
|
fps_draw = 2;
|
||||||
|
}
|
||||||
|
if (fps_draw) {
|
||||||
|
fps_draw--;
|
||||||
|
show_fps(fps_val);
|
||||||
|
}
|
||||||
sprite_update(sp, NCHR);
|
sprite_update(sp, NCHR);
|
||||||
gfx_wait_vsync();
|
gfx_wait_vsync();
|
||||||
gfx_set_visible_page(hidden);
|
gfx_set_visible_page(hidden);
|
||||||
|
|||||||
Reference in New Issue
Block a user