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


Ê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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.