Ver Mensaje Individual
  #4 (permalink)  
Antiguo 25/06/2015, 04:03
Avatar de iblancasa
iblancasa
 
Fecha de Ingreso: diciembre-2012
Ubicación: España
Mensajes: 143
Antigüedad: 11 años, 4 meses
Puntos: 16
Respuesta: [SFML] Colisión rebota

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