Estou tentando escrever um jogo de plataforma em que os sprites para os níveis de plano de fundo são divididos em pedaços de 512x512. Eu mantenho 3 pedaços de memória por vez e estou tentando escrever um código para juntar os três na tela. Aqui está o código atual que tenho:
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);
A questão que eu estou enfrentando é que, qualquer que seja o pedaço primeiro, é o único que aparece. O restante não aparece na tela. Acho que o problema pode ter algo a ver com a transparência alfa, mas mesmo que os pedaços não se sobreponham, eles ainda não conseguem entender. Em outras partes do código, estou inserindo várias coisas na tela de uma só vez, como personagens e planos de fundo, e todas elas aparecem corretamente. Esse segmento específico de código é a única área em que estou enfrentando esse problema.
Se eu comentar a linha que combina left_chunk, ela muda para o seguinte:
Respostas:
A documentação do SDL diz que SDL_BlitSurface salva o retângulo final para ser desfeito após a blitagem . A redefinição da variável where corrige o problema.
fonte