Guarda en alguna variable el sitio por el que ha chocado y, en función de eso, permite los movimientos en todos los sentidos menos en el que ha chocado.
Algo así:
Código:
bool chocar [4] = {false,false,false,false}; //Norte, sur, este y oeste
if(rect.intersects(rect2)){
comprobarIntersecta(); //Una función que compruebe dónde está intersectando y lo meta en el array chocar
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up)){
if(!chocar[0])
rec.move(0, -1);
}
else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down)){
if(!chocar[1])
rec.move(0, 1);
}
else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left)){
if(!chocar[2])
rec.move(-1, 0);
}
else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right)){
if(!chocar[3])
rec.move(1, 0);
}
Para la función comprobarIntersecta() deberás restar las posiciones. Imagina que tienes la figura A y la B.
Supongo que cuanto más abajo y a la derecha de la pantalla vayas, mayor es el valor de las coordenadas (no sé que sistema de coordenadas usa SFML).
Si restas las posiciones de A y B tienes:
X == positiva >> A está más a la derecha que B
X == negativa >> B está más a la derecha que A
Y == positiva >> A está más abajo que B
Y == negativa >> B está más bajo que A
Como te digo, he supuesto que cuanto más abajo y a la derecha vayas, mayor es el valor de las coordenadas.
Suerte