Próbuję napisać platformówkę, w której duszki dla poziomów tła są podzielone na kawałki 512 x 512. Trzymam w pamięci 3 porcje na raz i próbuję napisać kod, żeby wszystkie trzy były na ekranie. Oto aktualny kod, który mam:
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);
Problem, na który wpadam, polega na tym, że którykolwiek fragment zostanie zblokowany jako pierwszy, pojawia się tylko jeden. Reszta nie pojawia się na ekranie. Myślę, że problem może mieć coś wspólnego z przezroczystością alfa, ale nawet jeśli fragmenty w ogóle się nie pokrywają, nadal nie mogą się zepsuć. W innych częściach kodu ściemniam na ekranie wiele rzeczy naraz, takich jak znaki i tła, i wszystkie one wyświetlają się poprawnie. Ten konkretny segment kodu jest jedynym obszarem, w którym napotykam ten problem.
Jeśli skomentuję wiersz, który blits left_chunk, zmienia się w następujący sposób:
Odpowiedzi:
Dokumentacja SDL mówi, że SDL_BlitSurface zapisuje końcowy prostokąt do rozprostowania po blittingu. Ponowne wpisanie zmiennej gdzie rozwiązuje problem.
źródło