Я просто ограничиваю зону рисование и рисую только от видимых границ(или чуть дальше)
Код
for (int i = min.y; i < max.y; i++) {
if (i < 0) continue;
if (i >= heightMap) break;
for (int j = min.x; j < max.x; j++) {
if (j < 0) continue;
if (j >= widthMap) break;
TileMy* tm = Tiles[idsLayer][i][j];
if (tm->Tiles == nullptr)continue;
if (tm->TilesFrame == nullptr)
target.draw(*tm->Tiles, states);
else {
tm->TilesFrame->getSprite()->setPosition(tm->Tiles->getPosition());
tm->TilesFrame->getSprite()->setScale(tm->Tiles->getScale());
target.draw(*tm->TilesFrame->getSprite(), states);
}
}
Код
void TiledMap::SetRegion(sf::Vector2i min,sf::Vector2i max) {
this->min = min;
this->max = max;
}
И при движение камеры использую
Код
view.setCenter(posTarget);
tiledMap->SetRegion(sf::Vector2i((posTarget.x / 16) - 10, (posTarget.y / 16) - 8),
sf::Vector2i((posTarget.x / 16) + 10, (posTarget.y / 16) + 8));
window->setView(view);