Сразу оговорюсь: данный метод не панацея от всех бед, но львиную долю проблем, связанных со столкновениями объектов solid (твердых), поможет избежать.
Далее все названия условные, новички смогут перевести,а кто успел немного поработать с сфмл -смогут адаптировать информацию под свои нужды.
Итак,для примера имеем класс персонажа со своим спрайтом(player.sprite) и класс условной твердой преграды(stone.sprite)
в конструкторе персонажа создаем sf::Vector2f oldpos; – она будет дублировать позицию спрайта игрока все время, пока тот не столкнется с преградой
В классе преграды создаем bool solid и через конструктор делаем ее true
if((player.sprite.getGlobalBounds().intersects(stone.sprite.getGlobalBounds())) && stone.solid)
{
player.sprite.setPosition(oldpos);
}
else
{
oldpos = player.sprite.getPosition();
};