Estoy tratando de escribir un juego de plataformas donde los sprites para los fondos de nivel se dividen en fragmentos de 512x512. Mantengo 3 fragmentos en la memoria a la vez e intento escribir código para borrar los tres en la pantalla. Aquí está el código actual que tengo:
SDL_Rect where;
where.y = -game->camera->y;
where.x = -game->camera->x - MAP_WIDTH;
SDL_BlitSurface(left_chunk, NULL, screen, &where);
where.x = -game->camera->x;
SDL_BlitSurface(center_chunk, NULL, screen, &where);
where.x = -game->camera->x + MAP_WIDTH;
SDL_BlitSurface(right_chunk, NULL, screen, &where);
El problema con el que me encuentro es que cualquier fragmento que se borre primero es el único que aparece. El resto no aparece en la pantalla. Creo que el problema podría tener algo que ver con la transparencia alfa, pero incluso si los trozos no se superponen en absoluto, todavía no se borran. En otras partes del código, escribo varias cosas en la pantalla a la vez, como los personajes y los fondos, y todos se muestran correctamente. Este segmento particular de código es la única área en la que me encuentro con este problema.
Si comento la línea que borra left_chunk, cambia a esto:
Respuestas:
La documentación de SDL dice que SDL_BlitSurface guarda el rectángulo final en dstrect después de borrar . Restablecer la variable where soluciona el problema.
fuente