А прикол. До сих пор среди примеров идущих в комплекте нет такой банальной штуки, как тайл-анимашка. Даже в примере с Саником фон статичен [даже стеф не осилил ]
Да, это бы не помешало!
В случае с анимациями придётся наверное свой велосипед делать. Две стратегии:
1. Перезаписывать весь тайл. DMA поможет.
2. Перезаписывать участок VRAM, отведённый под TileMap (1 байт)
Первый способ более медленный, зато есть возможность подгружать тайлы с ROM.
---
Столкнулся с такой проблемой. Делаю переключение персов (1 перс - свой атлас анимаций, своя палитра, свои спрайты). Список спрайтов заполняется(идёт вниз) до конца по мере переключения между персами. В настоящее время нужен только один перс.
Спасла дефрагментация Sprite VRAM. С ней перс пересоздаётся в той же VRAM и перерасхода нет:
void Person_Create(struct Person *p,const SpriteDefinition *sd)
{
SPR_releaseSprite(p->sprite);
SPR_defragVRAM();
p->sprite=SPR_addSprite(sd,p->X,p->Y,TILE_ATTR(PAL0,FALSE,FALSE,p->H));
SPR_setAnim(p->sprite,0); //always 0
SPR_setFrame(p->sprite,27); //IDLE
SPR_update();
SYS_doVBlankProcess();
VDP_setPalette(PAL0,sd->palette->data);
}
Ещё пришлось костыль поставить перед переключением палитры:
SPR_update();
SYS_doVBlankProcess();
Потому что палитра меняется сразу, а спрайты только после SPR_Update.
Иначе видно переключение палитры во время смены персонажа и старого персонажа с новой палитрой.
Переключение персонажей сделал - так же как в Bucky O'Hare. По нажатию кнопки.
Есть ли в SGDK способ отложенно апдейтнуть палитру синхронно с SPR_Update ? Просто у меня уже один SPR_Update в цикле есть, а при пересоздании перса приходится его вызывать ещё раз, чтобы избежать артефактов с палитрой.
Можно конечно, программными флагами, но а вдруг есть более красивое решение?
ИМХО немного нелогично получается: палитра перезаписывается сразу, а спрайты после SPR_Update.