libbgi: авто-анимация спрайтов — кадровая + tween (tests/spranim все PASS)
Реализация §9г по требованиям пользователя: - sprite_anim(first,last,speed,mode): ANIM_LOOP / ANIM_PINGPONG / ANIM_ONCE (one-shot замирает на last), | ANIM_HORIZ для горизонтальных лент. Смена кадра в тике = ±an_step к оси ленты — без умножений (осевое смещение first считается в setup циклом). - sprite_moveto(tx,ty,max_step,interval): Брезенхэм порциями ≤max_step вдоль большей оси (меньшая — err-аккумулятором, нелинейные шаги Y сами собой), деления нет. - Одновременность кадровой и tween — независимые поля/биты. - Статус: sprite_anim_status() — битовое поле SPR_ANIM_ON/DONE + SPR_MOVE_ON/DONE; sprite_anim_frame() — текущий индекс кадра; sprite_moving(). - Стопы: sprite_anim_stop(frame | -1 = текущий); sprite_move_stop(0 = замереть / 1 = прыжок в цель + DONE). - Тикер _sprite_tick — проход 0 sprite_update через funcptr _spr_tick_fn (DCE: без sprite_anim/moveto код не линкуется, цена — один if на кадр; +40 Б программе с движком, sprite_t +18 Б). tests/spranim (MAME dev, все PASS): LOOP/PINGPONG (разворот на границе без удвоения краёв)/ONCE+DONE; пример (0,0)→(100,50), шаг 5, интервал 4 → ровно 80 кадров, Y идёт 3/2/3/2; стопы обоих видов. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -2,9 +2,9 @@
|
||||
accfill 3772
|
||||
argv 3431
|
||||
assrtest 3847
|
||||
atlas 9154
|
||||
atlas 9193
|
||||
attrprob 4087
|
||||
balls 6208
|
||||
balls 6249
|
||||
banked 1056
|
||||
bankedbg 1067
|
||||
banklocl 4683
|
||||
@@ -44,6 +44,7 @@ rt_test 4892
|
||||
seek 4188
|
||||
simple 955
|
||||
solidt 11531
|
||||
spranim 8752
|
||||
spriteclip 4119
|
||||
sprites 6791
|
||||
stattest 7549
|
||||
|
||||
|
@@ -700,10 +700,22 @@ Probe-тест tests/w0page (MAME dev, 2026-07-13, ВСЕ PASS):
|
||||
W1, но только tiny (в small/big/huge в W1 код) — отвергнута в пользу
|
||||
универсального W0.
|
||||
|
||||
## 9г. Авто-анимация спрайтов (ПРЕДЛОЖЕНИЕ 2026-07-13, обсуждается)
|
||||
## 9г. Авто-анимация спрайтов (РЕАЛИЗОВАНО 2026-07-13; tests/spranim PASS)
|
||||
|
||||
Идея пользователя: sprite_update (вызывается раз на кадр) сам тикает
|
||||
анимации — приложение только описывает их декларативно.
|
||||
анимации — приложение только описывает их декларативно. Реализация:
|
||||
sprite_anim(first,last,speed,mode: LOOP/PINGPONG/ONCE|HORIZ) /
|
||||
sprite_anim_stop(frame|-1) / sprite_moveto(tx,ty,max_step,interval) /
|
||||
sprite_move_stop(at_target) / статус sprite_anim_status() (биты
|
||||
SPR_ANIM_ON/DONE, SPR_MOVE_ON/DONE) / sprite_anim_frame() /
|
||||
sprite_moving(). Кадровая и tween независимы (одновременно — да);
|
||||
тикер _sprite_tick подключается указателем _spr_tick_fn (DCE),
|
||||
sprite_update зовёт его проходом 0. Кадровая — ±an_step к оси без
|
||||
умножений; tween — Брезенхэм порциями ≤max_step по большей оси.
|
||||
Проверено tests/spranim (T1 LOOP / T2 PINGPONG / T3 ONCE+DONE /
|
||||
T4 пример (0,0)→(100,50)/5/4 = ровно 80 кадров, Y 3/2/3/2 /
|
||||
T5 стопы) — все PASS. Цена: ~+40 Б программе с движком, sprite_t
|
||||
+18 Б. Ниже — исходный дизайн-разбор.
|
||||
|
||||
### Кадровая анимация (смена изображений)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user