Estoy tratando de borrar una imagen con sprites, animada. Al dibujar el sprite animado, dibujo un fondo antes de los sprites. Con los sprites, el juego se ve suave y jugable, y el fondo se vuelve muy lento.
Estoy usando una imagen de 240 * 320. Hice lo mejor que pude para optimizar el código y eso es a lo que he recurrido.
void DrawSprite(sprite_ptr spr, uint8_t *fb)
{
const uint16_t* data = (spr->num_frames > 1 ) ? spr->frames[spr->curr_frame] : spr->imgData;
uint16_t spriteHeight = spr->height;
uint16_t spriteWidth = spr->width;
uint16_t x = spr->x;
uint16_t y = spr->y;
for (int i = 0; i < spriteHeight; i++)
{
for (int j = 0; j < spriteWidth; j++)
{
uint16_t color = data[j];
if (color != 0)
{
LCD_DrawPixel(fb,j + x , i + y, color);
}
}
data+=spriteWidth;
}
}
CÓDIGO MODIFICADO:
void DrawSprite(sprite_ptr spr, uint8_t *fb)
{
const uint16_t* data = (spr->num_frames > 1 ) ? spr->frames[spr->curr_frame] : spr->imgData ;
uint32_t spriteHeight = spr->height;
uint32_t spriteWidth = spr->width;
uint32_t x = spr->x;
uint32_t y = spr->y;
for (uint32_t i = 0; i < spriteHeight; i++)
{
for (uint32_t j = 0; j < spriteWidth; j++) {
uint16_t color = *data++;
if (color != 0)
{
*(__IO uint16_t*) (fb + (2*((i+y)*BSP_LCD_GetXSize() + j + x))) = color;
}
}
}
}
Todavía la velocidad de fotogramas no es aceptable