Итак, в настоящее время я пишу игру, и у меня есть небольшая текстура (20×20), которая заполняет экран (1680×1050). Мой игрок движется на этом фоне, все в игровом цикле. Мне нужно, чтобы фон был статичным и рисовался только один раз, но SDL_RenderClear перерисовывает всю область, и это вызывает отставание. Как я могу нарисовать это один раз, а затем обновить его с моей фигурой игрока?
На самом деле нет никакого способа «нарисовать его один раз и оставить так». Но есть способ, которым вы можете сделать только часть для рисования, чтобы получить тот же результат, просто нарисовав часть фона, которой является персонаж, перед рисованием нового персонажа.
Более подробно, нарисуйте все «блоки», которых герой хоть немного коснулся, а затем нарисуйте над ними своего героя.
Вот пример:
//LocationX is the location of hero on the X axis
//LocationX /20 is the number of the first texture that is drawn on X axis
//LocationX +Width (width of hero) +20 (width of texture) this is the number of the last texture on X axis
//Now draw everything from first to last texture that is touched the hero (just calculate the Y axis the same way as X axis!)
for (int xxx = LocationX /20; xxx < LocationX +Width + 20; xxx++)
{
for (/*Do the same for Y axis*/)
{
draw(texture, xxx *20, yyy *20);
}
}
//Draw Hero here, the background is clear!
Буквально отвечая, вы должны использовать SDL_RenderDrawRect
«очистить часть экрана».
Однако вы упомянули, что у вас есть текстура на заднем плане — RenderClear не будет рисовать текстуру, поэтому что-то в этом описании кажется неправильным.