SDL que cega várias superfícies de uma só vez

10

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.

Captura de tela

Se eu comentar a linha que combina left_chunk, ela muda para o seguinte:

Captura de tela Depois

motor extrópico
fonte
Tem certeza de que seus valores X calculados posicionam a imagem na área visível da tela?
Zack The Human
@ZackTheHuman Eles estão parcialmente fora da tela, pois a tela tem apenas 300x175 e os pedaços do mapa são 512x512. Eu pensei que esse poderia ter sido o problema a princípio, mas se eles estão na tela ou não parece ser irrelevante se está sendo renderizado corretamente ou não. Posso fazer o upload de uma captura de tela para ajudar a ilustrar o problema.
motor extrópico 22/10/12
1
A documentação do SDL diz que SDL_BlitSurface salva o retângulo final para ser desfeito após a blitagem . Você já tentou redefinir a variável where após cada blit?
Asakeron 22/10/12
@Asakeron Era isso! Eu não esperava onde ser modificado. Você deve fazer do seu comentário uma resposta!
motor extrópico 22/10/12

Respostas:

8

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.

Asakeron
fonte