A continuación una versión mejorada del código anterior, donde se utiliza las
funciones incorporadas en SFML como el mover (.move) y obtener posición
(.getPosition()) :
//Programa en SFML Y C++ que mueve una forma simple en pantalla Versión 2.0
#include <SFML/Graphics.hpp> //esta es una librería multimedia
int main() // función principal donde empezara a ejecutarse el programa
{ const int max_x = 800, max_y = 600, min_x = 0, min_y = 0; float r_ball = 10.f; //Radio del circulo float movx = 5.f, movy = 5.f; // incremento de las coordenada del circulo float x = 0, y = 0; // coordenadas iniciales de ball
sf::RenderWindow window(sf::VideoMode(max_x, max_y), "@intellvirtual: Mover Formas
Simples"); window.setVerticalSyncEnabled(true);// sincronismo vertical para reducir la velocidad de fotogramas sf::CircleShape ball(r_ball); ball.setFillColor(sf::Color::Yellow); ball.setPosition(x, y);
while (window.isOpen()) // mientras la ventana este abierta se ejecutara el bucle
{ sf::Event event; // variable la cual almacenara el evento ocurrido while (window.pollEvent(event)) // buble el cual se ejecutara indefinidamente { if (event.type == sf::Event::Closed) /* si el tipo de evento que se almacena en la variable es closed se cumple la condición y se ejecuta el siguiente bloque de código*/ window.close(); // cerrar la ventana } sf::Vector2f posicion = ball.getPosition();//posicion actual del circulo x = posicion.x; y = posicion.y; if (x == max_x - r_ball * 2 || x < min_x)//r_ball*2 toma en cuenta el diametro del circulo movx *= -1;
if (y == max_y - r_ball * 2 || y < min_y)
movy *= -1;
ball.move(movx, movy);//mueve el circulo de su posicion actual //de acuerdo al
valor de incremento movx y movy window.clear(); // se borrara todo lo que está en pantalla window.draw(shape); // función utilizada para dibujar figura en la pantalla window.display(); // muestra en pantalla lo que ha sido renderizado } }//window.isOpen return 0;