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.