Ver Mensaje Individual
  #7 (permalink)  
Antiguo 25/06/2015, 15:58
Avatar de Tropy
Tropy
 
Fecha de Ingreso: diciembre-2013
Mensajes: 62
Antigüedad: 10 años, 4 meses
Puntos: 1
Respuesta: [SFML] Colisión rebota

Buenas,

Intenté hacer la función más o menos como me guiaste y por parte funciona pero no del todo me quedé un poco atrapado, al igual al intentar hacerlo probé otra cosa que me da el mismo resultado.

Aquí un previo vídeo:
https://www.youtube.com/watch?v=KOVwKT6rf54

Sería aquí las modificaciones:

Código C++:
Ver original
  1. sf::FloatRect rect = rec.getGlobalBounds();
  2.         sf::FloatRect rect2 = rec2.getGlobalBounds();
  3.  
  4.         if(rect.intersects(rect2)){
  5.  
  6.             if(rec.getPosition().x<=rect2.left){
  7.                 rec.setPosition(rec.getPosition().x-1, rec.getPosition().y);
  8.             }
  9.             if(rec.getPosition().x>=rect2.left){
  10.                 rec.setPosition(rec.getPosition().x+1, rec.getPosition().y);
  11.             }
  12.             if(rec.getPosition().y<=rect2.left){
  13.                 rec.setPosition(rec.getPosition().x, rec.getPosition().y-1);
  14.             }
  15.             if(rec.getPosition().y>=rect2.left){
  16.                 rec.setPosition(rec.getPosition().x, rec.getPosition().y+1);
  17.             }
  18.  
  19.         }

De tu forma me da un resultado similar, pero me quede un poco atrapado y no se como seguirla, y pues para no darte más trabajo pues probé algo así que me dio dicho resultado, pero como se ve en el vídeo solo responde a 'x' a la 'y' no responde y si se intenta pues al colisionar se va moviendo la figura en vez de quedarse quieta sin poder avanzar más ya que colisionó.

Gracias.


Saludos!

-------------------------------------------------------------------------------------------------
#ACTUALIZACIÓN
-------------------------------------------------------------------------------------------------

Probé a cambiar .left por .top pero igual el mismo problema.

Código C++:
Ver original
  1. sf::FloatRect rect = rec.getGlobalBounds();
  2.         sf::FloatRect rect2 = rec2.getGlobalBounds();
  3.  
  4.         if(rect.intersects(rect2)){
  5.  
  6.             if(rec.getPosition().x<=rect2.left){
  7.                 rec.setPosition(rec.getPosition().x-1, rec.getPosition().y);
  8.             }
  9.             if(rec.getPosition().x>=rect2.left){
  10.                 rec.setPosition(rec.getPosition().x+1, rec.getPosition().y);
  11.             }
  12.             if(rec.getPosition().y<=rect2.top){
  13.                 rec.setPosition(rec.getPosition().x, rec.getPosition().y-1);
  14.             }
  15.             if(rec.getPosition().y>=rect2.top){
  16.                 rec.setPosition(rec.getPosition().x, rec.getPosition().y+1);
  17.             }
  18.  
  19.         }


- Tal vez sea mejor de tu forma con la función pero me quedé un poco pillado a la hora de cambiar el valor del array.

Gracias.


Saludos!

Última edición por Tropy; 25/06/2015 a las 18:11