elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


  Mostrar Mensajes
Páginas: 1 ... 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 [43] 44 45 46 47 48 49
421  Programación / Programación C/C++ / Re: [SFML] Rebote de colisión en: 25 Junio 2015, 15:35 pm
Así está repartido:

Código
  1. sf::RenderWindow window(sf::VideoMode(800, 600), "Colision");
  2.  
  3.    //Rectangualo
  4.    sf::RectangleShape rec(sf::Vector2f(50, 50));
  5.    rec.setFillColor(sf::Color::Cyan);
  6.  
  7.    //Otro rectangulo
  8.    sf::RectangleShape rec2(sf::Vector2f(50, 50));
  9.    rec2.setFillColor(sf::Color::Magenta);
  10.    rec2.setPosition(400, 300);

En el centro de la ventana (800x600).


Código completo:

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

Saludos!
422  Programación / Programación C/C++ / Re: [SFML] Rebote de colisión en: 25 Junio 2015, 13:09 pm
Intenté hacer lo que me indicaste pero no daba resultado al igual también intenté esto:

Código
  1. if(rec.getPosition().x<400){
  2.                std::cout << rec.getPosition().x << std::endl;
  3.                rec.setPosition(rec.getPosition().x, rec.getPosition().y);
  4.            }

Que no pueda avanzar más si colisiona sin ser posicionado, pero al igual sigue con el mismo error.

Gracias por la respuesta.

Saludos!
423  Programación / Programación C/C++ / [SFML] Rebote de colisión en: 24 Junio 2015, 22:12 pm
Buenas,

Tengo un problema al intentar colisionar dos figuras en sfml, la cosa es que colisiona pero en vez de chocar y estarse quieto sin poder avanzar se coloca en la otra parte de la otra figura y así consecutivamente.

Aquí un vídeo previo del error:
El vídeo es capturado por mi, dura 30 seg. Para mostrar el error.



Código
  1. sf::FloatRect rect = rec.getGlobalBounds();
  2.        sf::FloatRect rect2 = rec2.getGlobalBounds();
  3.  
  4.        if(rect.intersects(rect2)){
  5.  
  6.            if(rec.getPosition().x<400){
  7.                std::cout << rec.getPosition().x << std::endl;
  8.                rec.setPosition(350, rec.getPosition().y);
  9.            }
  10.            if(rec.getPosition().x>400){
  11.                rec.setPosition(450, rec.getPosition().y);
  12.            }
  13.            if(rec.getPosition().y<400){
  14.                rec.setPosition(rec.getPosition().x, 350);
  15.            }
  16.            if(rec.getPosition().y>400){
  17.                rec.setPosition(rec.getPosition().x, 450);
  18.            }
  19.  
  20.        }

rec -> es el rectángulo que manejo con el keyboard.
rec2 -> es el rectángulo que está situado fijamente en el centro de la ventana.


Si supiesen a que debe deberse dicho error agradecería alguna respuesta.
Gracias.


Saludos!
424  Programación / Programación C/C++ / Re: [SFML] Colisiones con borde de ventana en: 23 Junio 2015, 13:21 pm
He probado de esta forma:

Código
  1. sf::FloatRect rect = rec.getGlobalBounds();
  2.        sf::FloatRect rect2 = rec2.getGlobalBounds();
  3.  
  4.        if(rect.intersects(rect2)){
  5.            std::cout << "Toca" << std::endl;
  6.        }

Y funciona correctamente.

Pero me gustaría saber como funcionaría como me has dicho, si es otra forma más fácil.

Código
  1. bool intersecs(Rect a, Rect b);


Saludos.
425  Foros Generales / Noticias / Re: Ya puedes instalar WhatsApp en Windows, Mac OS y Linux (no oficial) en: 23 Junio 2015, 01:08 am
Es lo mismo que whatsapp web, solo que en escritorio. Es preferible la de web por que no ocupa espacio en disco y es oficial.
426  Programación / Programación C/C++ / Re: [SFML] Colisiones con borde de ventana en: 23 Junio 2015, 01:06 am
He probado lo que me has dicho y funciona bien

Código
  1. if(rec.getPosition().x<0){
  2.            rec.setPosition(0, rec.getPosition().y);
  3. }

Nunca había usado getPosition, pero más o menos me hago la idea estoy buscando información sobre ello de igual modo si me puedes comentar así por encima como funciona lo agradecería.

Una pregunta:

Código
  1. if(rec.intersects(rec2)){
  2.            std::cout << "Toca" << std::endl;
  3.        }

Por que al usar dicha función me salta este error:

Código:
error: 'class sf::RectangleShape' has no member named 'intersects'|

Cuando supuestamente está bien definida.
Gracias.

Saludos.
427  Programación / Programación C/C++ / Re: [SFML] Colisiones con borde de ventana en: 22 Junio 2015, 23:58 pm
Hice algo así:

Código
  1. if(pared_x <= pared_izq){
  2.                std::cout << pared_x;
  3.                std::cout << pared_izq;
  4.            x_incremento =- x_incremento;
  5. }

Me da el resultado de -10:



Saludos.
428  Programación / Programación C/C++ / [SFML] Colisiones con borde de ventana en: 22 Junio 2015, 23:40 pm
Buenas,

Tengo un problema con las colisiones en sfml, tengo un cuadrado que manejo con keyboard y quiero que no sobre pase la ventana creada, pero no me deja sigue transpasando los bordes.

Aquí el código:

Código
  1. #include <SFML/Graphics.hpp>
  2.  
  3. int main(){
  4.    //Creamos la ventana
  5.    sf::RenderWindow window(sf::VideoMode(800, 600), "Colision");
  6.  
  7.    //Rectangualo
  8.    sf::RectangleShape rec(sf::Vector2f(50, 50));
  9.    rec.setFillColor(sf::Color::Cyan);
  10.  
  11.    //Variables colisiones
  12.    int pared_x = 1, pared_y = 1;
  13.    int x_incremento = 2, y_incremento = 2;
  14.    int pared_izq = 0, pared_der = 750;
  15.    int pared_arriba = 0, pared_abajo = 550;
  16.  
  17.    window.setFramerateLimit(200);
  18.  
  19.    //Si la ventana está abierta
  20.    while(window.isOpen()){
  21.        //Creamos un evento
  22.        sf::Event ventana;
  23.        //Llamamos a los eventos
  24.        while(window.pollEvent(ventana)){
  25.            //Cerramos la ventana cuando se solicite
  26.            if(ventana.type == sf::Event::Closed){
  27.                window.close();
  28.            }
  29.        }
  30.  
  31.        //Movimiento rectangulo
  32.        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up)){
  33.            rec.move(0, -1);
  34.        }
  35.        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down)){
  36.            rec.move(0, 1);
  37.        }
  38.        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left)){
  39.            rec.move(-1, 0);
  40.        }
  41.        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right)){
  42.            rec.move(1, 0);
  43.        }
  44.  
  45.        //Colisiones
  46.        if(pared_x <= pared_izq){
  47.            x_incremento =- x_incremento;
  48.        }
  49.        if(pared_x >= pared_der){
  50.            x_incremento =- x_incremento;
  51.        }
  52.        if(pared_y <= pared_arriba){
  53.            y_incremento =- y_incremento;
  54.        }
  55.        if(pared_y >= pared_abajo){
  56.            y_incremento =- y_incremento;
  57.        }
  58.  
  59.        pared_x = pared_x + x_incremento;
  60.        pared_y = pared_y + y_incremento;
  61.  
  62.        //Limpiamos ventana
  63.        window.clear();
  64.  
  65.        //Dibujamos el rectangulo
  66.        window.draw(rec);
  67.  
  68.        //Actualizamos ventana
  69.        window.display();
  70.  
  71.    }
  72. }

Sobre pasa el borde de la ventana:



Cuándo no debería pasar el borde de la ventana.

Si alguien tiene alguna de idea de por que puede ser agradecería su respuesta.
Gracias.

Saludos.
429  Programación / Programación C/C++ / Re: [SFML] Movimientos de Texturas en: 21 Junio 2015, 20:25 pm
Gracias por la respuesta, lo he probado y sirve correctamente.
También he encontrado una función para limitar los fotogramas y así también
tener una movilidad estable.

Código
  1. window.setFramerateLimit(50);

Gracias por la respuesta.

Tema resuelto.

Saludos.
430  Programación / Programación C/C++ / [SFML] Movimientos de Texturas en: 21 Junio 2015, 18:58 pm
Buenas,

Tengo un pequeño problema con el movimiento de texturas, la textura se mueve bien, pero no su velocidad, solo pulsando una vez la tecla da un gran salto en vez de pequeño.

Aquí imagen del problema:

Ejecuto el programa y sale así bien:


Pulso una vez la flecha hacia abajo:


Aparece muy lejos cada paso, en vez de ser algo así:


El código:

Código
  1. #include <SFML/Graphics.hpp>
  2.  
  3. int main(){
  4.    //Crea la ventana de 300x300
  5.    sf::RenderWindow window(sf::VideoMode(300, 300), "Ventana SFML");
  6.  
  7.    //Creamos una textura en este caso un tom
  8.    sf::Texture tom;
  9.    //Cargamos la textura de un archivo
  10.    if(!tom.loadFromFile("tom.png")){
  11.        //Si hay un error salimos
  12.        return EXIT_FAILURE;
  13.    }
  14.  
  15.    sf::Sprite sprite;
  16.    sprite.setTexture(tom);
  17.    sprite.setTextureRect(sf::IntRect(0, 0, 32, 32));
  18.  
  19.    //Si la ventana esta abierta
  20.    while(window.isOpen()){
  21.        //Creamos un evento llamado ventana
  22.        sf::Event ventana;
  23.        //Llamamos al evento ventana
  24.        while(window.pollEvent(ventana)){
  25.            //Se cierra la ventana cuando lo pedimos
  26.            if(ventana.type == sf::Event::Closed){
  27.            //Cerramos la ventana
  28.                window.close();
  29.            }
  30.        }
  31.  
  32.        //Movemos arriba
  33.        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up)){
  34.            sprite.move(0, -1);
  35.        }
  36.        //Movemos abajo
  37.        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down)){
  38.            sprite.move(0, 1);
  39.        }
  40.        //Movemos a la izquierda
  41.        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left)){
  42.            sprite.move(-1, 0);
  43.        }
  44.        //Movemos a la derecha
  45.        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right)){
  46.            sprite.move(1, 0);
  47.        }
  48.  
  49.        //Limpiamos la ventana
  50.        window.clear();
  51.  
  52.        //Dibujamos
  53.        window.draw(sprite);
  54.        //Actualizamos la ventana
  55.        window.display();
  56.    }
  57.  
  58.  
  59.    return 0;
  60. }
  61.  

Estuve probando diferentes maneras que encontré pero ninguna logré adaptar, si supieran guiarme un poco lo agradecería.

Gracias.


Saludos!
Páginas: 1 ... 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 [43] 44 45 46 47 48 49
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines