SDL blitting plusieurs surfaces à la fois

10

J'essaie d'écrire un jeu de plateforme où les sprites pour les arrière-plans de niveau sont divisés en morceaux de 512x512. Je garde 3 morceaux en mémoire à la fois et j'essaie d'écrire du code pour les blit tous les trois à l'écran. Voici le code actuel que j'ai:

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);

Le problème que je rencontre est que le morceau qui est blitted en premier est le seul qui apparaît. Le reste n'apparaît pas à l'écran. Je pense que le problème pourrait avoir quelque chose à voir avec la transparence alpha, mais même si les morceaux ne se chevauchent pas du tout, ils échouent toujours. Dans d'autres parties du code, j'écrase plusieurs éléments à l'écran à la fois, tels que des personnages et des arrière-plans, et ils s'affichent tous correctement. Ce segment de code particulier est le seul domaine que je rencontre ce problème.

Capture d'écran

Si je commente la ligne qui blits left_chunk, cela change à ceci:

Capture d'écran après

moteur extropique
la source
Êtes-vous sûr que vos valeurs X calculées positionnent l'image dans la zone visible de l'écran?
Zack The Human
@ZackTheHuman Ils sont partiellement hors écran, car l'écran ne fait que 300x175 et les blocs de carte sont 512x512. J'ai pensé que cela avait peut-être été le problème au début, mais le fait qu'ils soient à l'écran ou non ne semble pas pertinent pour le rendu correct ou non. Je peux télécharger une capture d'écran pour illustrer le problème.
moteur extropique
1
La documentation SDL indique que SDL_BlitSurface enregistre le rectangle final à déstructurer après le blitting . Avez-vous essayé de réinitialiser la variable where après chaque blit?
Asakeron
@Asakeron C'était tout! Je ne pensais pas à modifier. Vous devriez faire de votre commentaire une réponse!
moteur extropique

Réponses:

8

La documentation SDL indique que SDL_BlitSurface enregistre le rectangle final à déstructurer après le blitting . La réinitialisation de la variable where résout le problème.

Asakeron
la source