Curso SFML C++: Dibujar un rectángulo con POO (RectangleShape paso a paso)

Programación Orientada a Objetos con C++ y SFML

SFML está compuesto por varios módulos especializados en los aspectos que integran el desarrollo de videojuegos: Sistema, Ventana, Gráficos, Sonido y Red. Estos módulos han sido diseñados con la filosofía de la programación orientada a objetos (POO). La POO nos permite crear tipos nuevos de datos donde podemos definir su contenido y las operaciones que son posibles sobre esos datos. Una de las características más importantes del lenguaje de programación C++ es la clase, que permite a los programadores crear sus propios tipos de datos. Los tipos incorporados en los lenguajes de programación —números enteros, caracteres, punto flotante, etc.— son tipos primitivos de objetos, y las operaciones que podemos realizar sobre ellos son sumar, restar, multiplicar, dividir, concatenar, etc. La POO nos permite crear nuevos tipos más complejos, permitiendo que la manipulación de esos tipos sea tan intuitiva como la de los tipos primitivos (enteros, char). El enfoque de la POO brinda la posibilidad de manejar eficientemente la complejidad de los programas modernos a través de la abstracción, además del beneficio de la reutilización de código. Por ejemplo, podemos realizar un programa para dibujar un rectángulo, luego uno que dibuje un triángulo y finalmente un programa que dibuje un círculo. Gran parte del código de cada uno de esos programas tiene cosas en común, similar a los objetos reales: los objetos de una misma clase tienen características y comportamientos similares como el tamaño, el color, la posición en pantalla, etc. Este nivel de abstracción nos permite escribir programas que encierran las propiedades y funcionalidades de un triángulo, rectángulo o círculo en una clase a la que podemos darle el nombre de figura. La clase figura permite crear objetos figura con sus características y sus métodos u operaciones. Los datos que manipula un programa son almacenados en variables, y cada variable tiene un tipo. Por ejemplo, cuando el tipo de una variable se declara así:
Figura rectangulo;
podemos decir que rectangulo tiene el tipo Figura, o que rectangulo es una Figura.

Crear un rectángulo en SFML

Para ver esto en la práctica, vamos a escribir un programa que cree un rectángulo y lo dibuje en pantalla. En SFML, si necesitamos dibujar un rectángulo en una ventana ya creada, tenemos que usar la clase RectangleShape:
sf::RectangleShape rectangulo(sf::Vector2f(60, 20));
sf es el espacio de nombres de la librería SFML, y los dos puntos dobles :: son el operador de ámbito. La sentencia sf::RectangleShape le indica al compilador que queremos usar el nombre RectangleShape definido en el espacio de nombres sf. Con esta línea hemos creado una variable llamada rectangulo, que almacena objetos de la clase RectangleShape, y le asignamos un tamaño de 60 píxeles de ancho por 20 píxeles de alto (los parámetros). Después de esta introducción teórica, vamos a ver cómo hacer esto en el mundo virtual.

El programa completo

A continuación, el programa para dibujar un rectángulo en una ventana de dibujo utilizando C++ y SFML:
// Programa que crea un objeto rectángulo y lo dibuja en pantalla

#include <SFML/Graphics.hpp>

int main()
{
    // creamos la ventana de 200x200 pixeles
    sf::RenderWindow ventana(sf::VideoMode(200, 200), "Ventana de Dibujo");

    // definimos un rectangulo 60x20
    sf::RectangleShape rectangulo(sf::Vector2f(60, 20));

    // ejecutar el programa mientras la ventana esté abierta
    while (ventana.isOpen())
    {
        // verificamos todos los eventos de la ventana
        sf::Event evento;
        while (ventana.pollEvent(evento))
        {
            // evento "cierre solicitado": cerramos la ventana
            if (evento.type == sf::Event::Closed)
                ventana.close();
        }

        // limpiamos la ventana con el color negro
        ventana.clear(sf::Color::Black);

        // aquí dibujamos el rectangulo en la ventana
        ventana.draw(rectangulo);

        // mostramos la ventana en la pantalla
        ventana.display();
    }

    return 0;
}
Compilamos y ejecutamos el programa, y el resultado sería como el de la siguiente imagen:

El poder de la POO: código que se lee como español

Lo interesante del programa anterior es lo fácil que es entenderlo y lo intuitivo que se vuelve. La siguiente línea:
ventana.draw(rectangulo);
es como decir: "en la ventana, dibuja el rectángulo". draw (dibuja) es un método de RenderWindow (ventana de dibujo), la cual acepta como parámetro un objeto de tipo RectangleShape. Y si queremos que este rectángulo se ubique en el centro de la pantalla y que su color sea verde, sólo tenemos que agregar dos instrucciones después de crearlo. Si lo hiciéramos en nuestro idioma, sería algo como esto:
rectangulo.establecerPosicion(70, 90);
rectangulo.establecerColorDeRelleno(verde);
pero en SFML se escribe así:
rectangulo.setPosition(70, 90);
rectangulo.setFillColor(sf::Color::Green);
Agrega las líneas anteriores después de la línea que define a rectangulo y corre el programa. El resultado será el siguiente:
Más adelante vamos a hacer cosas más interesantes con estas figuras; por lo pronto nos interesa entender lo básico de SFML y, al mismo tiempo, estamos viendo el poder de la Programación Orientada a Objetos con el lenguaje C++.

Siguiente lección

Comentarios

Entradas populares de este blog

Desarrollo de videojuegos paso a paso con C++ y SFML

Curso SFML C++: Animación 2D — una pelota que rebota en la ventana (2 versiones del código)