VOLVER

TUTORIAL DE SFML

 

CAPITULO 1

 

El primer programa que cualquier programador hace cuando empieza el aprendizaje de cualquier librería o lenguaje de programación es el “hola mundo” .














 

#include "SFML/Graphics.hpp"

#include "SFML/Window.hpp"

#include "SFML/System.hpp"

 

 

int main()

{

    sf::RenderWindow ventana(sf::VideoMode(800, 600), "MI VENTANA",

                             sf::Style::Close);

    ventana.setFramerateLimit(60);

 

    sf::Font font;

    if (!font.loadFromFile("sansation.ttf"))

        throw("¡FUENTES NO ENCONTRADAS!");

 

    sf::Text miTexto;

    miTexto.setFont(font);

    miTexto.setCharacterSize(24);

    miTexto.setFillColor(sf::Color::Red);

    miTexto.setStyle(sf::Text::Bold);

    miTexto.setString("HOLA MUNDO");

    miTexto.setPosition(100, 100);

 

    ventana.clear(sf::Color::Black);

    ventana.draw(miTexto);

    ventana.display();

 

    while (ventana.isOpen()) {

        sf::Event evento;

        ventana.draw(miTexto);

 

        while (ventana.pollEvent(evento)) {

            if (evento.type == sf::Event::Closed) {

                printf("Cerrando ventana SFML\n");

                ventana.close();

            }

        }

    }

}

 

Como muchos en la programación C++ utiliza la orden de : using namespace sf;

Un namespace, no es más que una forma de crear un bloque , y que todas las funciones que estén dentro del mismo, estén asociadas a ese namespace (o espacio de nombres), al cual se le asigna un nombre para identificarlo.

Repito el mismo programa con esta orden que facilita mucho la escritura. El resultado es el mismo pero más sencillo. Una veces utilizaré un sistema y otras veces otro.

#include "SFML/Graphics.hpp"

#include "SFML/Window.hpp"

#include "SFML/System.hpp"

 

using namespace sf;

 

int main()

{

    RenderWindow ventana(VideoMode(800, 600), "MI VENTANA", Style::Close);

    ventana.setFramerateLimit(60);

 

    Font font;

    if (!font.loadFromFile("sansation.ttf"))

        throw("¡FUENTES NO ENCONTRADAS!");

 

    Text miTexto;

    miTexto.setFont(font);

    miTexto.setCharacterSize(24);

    miTexto.setFillColor(Color::Red);

    miTexto.setStyle(Text::Bold);

    miTexto.setString("HOLA MUNDO");

    miTexto.setPosition(100, 100);

 

    ventana.clear(Color::Black);

    ventana.draw(miTexto);

    ventana.display();

 

    while (ventana.isOpen()) {

        Event evento;

        ventana.draw(miTexto);

 

        while (ventana.pollEvent(evento)) {

            if (evento.type == Event::Closed) {

                printf("Cerrando ventana SFML\n");

                ventana.close();

            }

        }

    }

}

 

Ahora nos toca compilar el programa.

Existen dos métodos, directamente o a través de makefile.

El método directo es con la orden:

        g++ tutor1.cpp -o tutor1 -lsfml-graphics -lsfml-window -lsfml-system

 

El método de utilizar makefile es crear un fichero llamado makefile, e incluir todas la pautas de compilación. Este es el método que utilizaré normalmente.

 

Fichero makefile:

LIBRERIAS = -lsfml-graphics -lsfml-window -lsfml-system -lsfml-audio -lsfml-network

 

tutor1 : tutor1.o

  g++ tutor1.o -o tutor1 $(LIBRERIAS)

 

tutor1.o : tutor1.cpp

  g++ -c tutor1.cpp

  

clean  :

 rm  \

   tutor1.o tutor1

 

Creamos el ejecutable con la orden make .

Automáticamente generaríamos el fichero ejecutable tutor1

Como este makefile lo reutilizaremos en todos los ejemplos, lo cambiamos de la siguiente forma:

 

 

PROGRAMAEXE = tutor1

LIBRERIAS = -lsfml-graphics -lsfml-window -lsfml-system -lsfml-audio -lsfml-network

 

$(PROGRAMAEXE) : $(PROGRAMAEXE).o

  g++ $(PROGRAMAEXE).o -o $(PROGRAMAEXE) $(LIBRERIAS)

 

$(PROGRAMAEXE).o : $(PROGRAMAEXE).cpp

  g++ -c $(PROGRAMAEXE).cpp

  

clean  :

 rm  \

   $(PROGRAMAEXE).o $(PROGRAMAEXE)

De esta forma solo debemos cambiar el nombre del fichero en la línea donde figura

        PROGRAMAEXE = tutor1

por el nombre del fichero a compilar.

He añadido muchas librerías no necesarias para este programa como son -lsfml-audio -lsfml-network , para que sirvan en los demás programas.



 
 




PROGRAMA