From 02f7afe76583af37961030a08fd2bd6da3d7d9bc Mon Sep 17 00:00:00 2001 From: Alexander Petrov Date: Mon, 13 Jul 2026 17:38:04 +0300 Subject: [PATCH] =?UTF-8?q?examples/rpgwalk:=20FPS-=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Плашка слева-сверху (значение раз в секунду, рисуется на обеих страницах — fps_draw=2, как в examples/space). ~39 fps на 8 ходящих персонажах (кадр на грани 20 мс — частично двухvsync'овые кадры). Co-Authored-By: Claude Fable 5 --- docs/size_baseline.tsv | 2 +- examples/rpgwalk/rpgwalk.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/docs/size_baseline.tsv b/docs/size_baseline.tsv index a2d3a04..1427363 100644 --- a/docs/size_baseline.tsv +++ b/docs/size_baseline.tsv @@ -41,7 +41,7 @@ mouse 4382 openenv 6124 palfile 5406 ptime 5744 -rpgwalk 9484 +rpgwalk 9683 rt_test 4892 seek 4188 simple 955 diff --git a/examples/rpgwalk/rpgwalk.c b/examples/rpgwalk/rpgwalk.c index dc65549..ea54bda 100644 --- a/examples/rpgwalk/rpgwalk.c +++ b/examples/rpgwalk/rpgwalk.c @@ -101,6 +101,22 @@ static void turn_90(uint8_t 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) { int i; @@ -124,6 +140,7 @@ static void draw_field(void) int main(void) { uint8_t i, page, hidden; + uint8_t frames = 0, last_sec, fps_val = 0, fps_draw = 0; datetime_t dt; if (atlas_load(&at1, "bard1.atl") != 0 && @@ -161,6 +178,7 @@ int main(void) gfx_set_visible_page(0); getdatetime(&dt); srand((unsigned)(dt.second * 77u + dt.minute)); + last_sec = dt.second; for (;;) { if (kbhit() && getch() == 27) @@ -176,6 +194,18 @@ int main(void) hidden = gfx_get_visible_page() ^ 1; 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); gfx_wait_vsync(); gfx_set_visible_page(hidden);