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.
Si je commente la ligne qui blits left_chunk, cela change à ceci:
Réponses:
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.
la source