Я пытаюсь написать платформерную игру, в которой спрайты для фоновых уровней разбиты на куски 512x512. Я держу в памяти по 3 куска за раз, и я пытаюсь написать код, чтобы вывести все три на экран. Вот текущий код у меня есть:
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);
Проблема, с которой я сталкиваюсь, заключается в том, что какой-то кусок, который будет перенаправлен первым, является единственным, который появляется. Остальные не отображаются на экране. Я думаю, что проблема может иметь какое-то отношение к альфа-прозрачности, но даже если куски вообще не пересекаются, они все равно не могут вспыхнуть. В других частях кода я выкладываю на экран сразу несколько объектов, например символы и фоны, и все они отображаются правильно. Этот конкретный сегмент кода - единственная область, с которой я сталкиваюсь.
Если я закомментирую строку, которая blits left_chunk, она изменится на это:
Ответы:
В документации SDL говорится, что SDL_BlitSurface сохраняет последний прямоугольник в dstrect после блитинга. Сброс где переменные исправляет проблему.
источник