Ver Mensaje Individual
  #5 (permalink)  
Antiguo 25/06/2015, 07:39
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

Estuve probando y tal pero a vece me da distintos resultados que intento buscar,
Tal vez pueda ser un error de concepto ¿no?

Código completo:

Código C++:
Ver original
  1. #include <SFML/Graphics.hpp>
  2. #include <iostream>
  3.  
  4. void comprobarIntersecta();
  5.  
  6. int main(){
  7.     //Creamos la ventana
  8.     sf::RenderWindow window(sf::VideoMode(800, 600), "Colision");
  9.  
  10.     //Rectangualo
  11.     sf::RectangleShape rec(sf::Vector2f(50, 50));
  12.     rec.setFillColor(sf::Color::Cyan);
  13.  
  14.     //Otro rectangulo
  15.     sf::RectangleShape rec2(sf::Vector2f(50, 50));
  16.     rec2.setFillColor(sf::Color::Magenta);
  17.     rec2.setPosition(400, 300);
  18.  
  19.     window.setFramerateLimit(200);
  20.  
  21.     //Si la ventana está abierta
  22.     while(window.isOpen()){
  23.         //Creamos un evento
  24.         sf::Event ventana;
  25.         //Llamamos a los eventos
  26.         while(window.pollEvent(ventana)){
  27.             //Cerramos la ventana cuando se solicite
  28.             if(ventana.type == sf::Event::Closed){
  29.                 window.close();
  30.             }
  31.         }
  32.  
  33.         //Colisiones ventana bordes
  34.         if(rec.getPosition().x<0){
  35.             rec.setPosition(0, rec.getPosition().y);
  36.         }
  37.         if(rec.getPosition().x>750){
  38.             rec.setPosition(750, rec.getPosition().y);
  39.         }
  40.         if(rec.getPosition().y<0){
  41.             rec.setPosition(rec.getPosition().x, 0);
  42.         }
  43.         if(rec.getPosition().y>550){
  44.             rec.setPosition(rec.getPosition().x, 550);
  45.         }
  46.  
  47.         sf::FloatRect rect = rec.getGlobalBounds();
  48.         sf::FloatRect rect2 = rec2.getGlobalBounds();
  49.  
  50.         bool chocar [4] = {false,false,false,false}; //Norte, sur, este y oeste
  51.  
  52.         if(rect.intersects(rect2)){
  53.                 comprobarIntersecta();
  54.         }
  55.  
  56.         if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up)){
  57.             if(!chocar[0])
  58.                 rec.move(0, -1);
  59.         }
  60.         else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down)){
  61.             if(!chocar[1])
  62.                 rec.move(0, 1);
  63.         }
  64.         else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left)){
  65.             if(!chocar[2])
  66.                 rec.move(-1, 0);
  67.         }
  68.         else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right)){
  69.             if(!chocar[3])
  70.                 rec.move(1, 0);
  71.         }
  72.  
  73.         //Limpiamos ventana
  74.         window.clear();
  75.  
  76.         //Dibujamos el rectangulo
  77.         window.draw(rec);
  78.         window.draw(rec2);
  79.  
  80.         //Actualizamos ventana
  81.         window.display();
  82.  
  83.     }
  84. }
  85.  
  86. void comprobarIntersecta(){
  87.     sf::RectangleShape rec(sf::Vector2f(50, 50));
  88.     rec.setFillColor(sf::Color::Cyan);
  89.     if(rec.getPosition().x<400){
  90.         chocar[0] = true;
  91.     }
  92. }

Hay está todo para verificar si tal vez es de concepto.
Gracias por las respuestas aportadas.


Saludos!