SDL borrando múltiples superficies a la vez

10

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.

Captura de pantalla

Si comento la línea que borra left_chunk, cambia a esto:

Captura de pantalla después

motor extropico
fuente
¿Está seguro de que sus valores X calculados posicionan la imagen en el área visible de la pantalla?
Zack The Human
@ZackTheHuman Están parcialmente fuera de la pantalla, ya que la pantalla tiene solo 300x175 y los fragmentos del mapa son 512x512. Al principio pensé que ese podría haber sido el problema, pero si están en la pantalla o no, parece ser irrelevante si se representa correctamente o no. Puedo subir una captura de pantalla para ayudar a ilustrar el problema.
motor extropico
1
La documentación de SDL dice que SDL_BlitSurface guarda el rectángulo final en dstrect después de borrar . ¿Has intentado restablecer la variable where después de cada blit?
Asakeron
@Asakeron ¡Eso fue! No esperaba dónde ser modificado. ¡Debes hacer que tu comentario sea una respuesta!
motor extropico

Respuestas:

8

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.

Asakeron
fuente