SFML – Abriendo una ventana
En el anterior artículo vimos como instalar SFML, es hora de empezar a trabajar con él. En este tutorial veremos como abrir una ventana y establecer un modo de video.
Preparando el código
En primer lugar tenemos que incluir el header necesario para manejar ventanas.
#include <SFML/Window.hpp>
Este es el único archivo necesario ya que contiene el resto de includes de las partes de SFML que maneja la ventana. Recuerda enlazar cuando compiles en esta caso a sfml-Window.
A continuación definimos la función main típica de todo programa en C++.
int main() { // Cuerpo }
O si queremos pasarle argumentos por la línea de comandos:
int main(int argc, char** argv) { // Cuerpo }
Abriendo una ventana
El siguiente paso es abrir una ventana, esto se hace con la clase sf::Window. Especial atención al espacio de nombre «sf» todos los objetos y tipos de datos de SFML están en el namespace «sf».
sf::Window App(sf::VideoMode(640, 480, 32), "SFML Window");
Aquí creamos un nuevo objeto llamado App que representa a nuestra ventana. Vamos a explicar los parámetros.
El primer parámetro es sf::VideoMode representa el modo de vídeo elegido en este caso una ventana de 640 píxeles de ancho, 480 píxeles de alto y 32 bits de profundidad de color. Estas medidas solo es la ventana interior se excluyen los bordes y la barra te títulos.
El segundo parámetro representa el título de la ventana y el tipo de dato es un std::string.
Si desea crear la ventana posterior, o volver a crearla con diferentes parámetros, puede utilizar la función Create:
App.Create(sf::VideoMode(800, 600, 32), "SFML Window");
El constructor y el método crear aceptan otros parámetros opcionales: El primero para controlar el estilo gráfico de la ventana y el segundo para opciones avanzadas gráficas que no veremos de momento.
El parámetro estilo es una combinación de banderas de sf::Style separadas con el operador «|». Las banderas son None, Titlebar, Resize, Close and Fullscreen. Por defecto toma los valores: Resize | Close.
// Esto crea una ventana a pantalla completa App.Create(sf::VideoMode(800, 600, 32), "SFML Window", sf::Style::Fullscreen);
Modos de vídeo
En el ejemplo anterior, no me importa el modo de video ya que se ejecutan en modo de ventana, de cualquier tamaño va a estar bien. Pero si quisiéramos ejecutar en modo de pantalla completa, sólo unos cuantos modos se permitirían. sf::VideoMode proporciona una interfaz para obtener todos los modos de vídeo compatibles con las dos funciones estáticas GetModesCount y GetMode:
unsigned int VideoModesCount = sf::VideoMode::GetModesCount(); for (unsigned int i = 0; i < VideoModesCount; ++i) { sf::VideoMode Mode = sf::VideoMode::GetMode(i); // Mode es un modo de vídeo valido }
Tenga en cuenta que los modos de vídeo están ordenados de mayor a menor, por lo que sf::VideoMode::GetMode(0) devolverá siempre el mejor modo de vídeo compatible.
// Crear una ventana a panalla completa con el mejor modo de vídeo App.Create(sf::VideoMode::GetMode(0), "SFML Window", sf::Style::Fullscreen);
Si quieres obtener el modo de vídeo de otro lado, por ejemplo, un fichero de configuración puedes usar el método IsValid() para comprobar que es válido.
sf::VideoMode Mode = ReadModeFromConfigFile(); if (!Mode.IsValid()) { // Error... }
Por último con GetDesktopMode() puedes obtener el modo de vídeo del escritorio.
sf::VideoMode DesktopMode = sf::VideoMode::GetDesktopMode();
El bucle principal
Una vez creada la ventana debemos hacer el bucle principal del juego.
bool Running = true; while (Running) { App.Display(); } return EXIT_SUCCESS;
Para cerrar el bucle del juego basta con cambiar la variables Running a False. Esto podríamos hacerlo al cerrar la ventana o al presionar la tecla Escape. Veremos la forma de detectar estos eventos en el próximo tutorial.
La única sentencia en nuestro bucle principal es App.Display();. Esta es la única sentencia necesaria para mostrar el contenido de nuestra ventana en la pantalla. Debe estar en el bucle principal y siempre ser la última en llamarse, después de dibujar todo lo necesario y actualizar todas las variables.
Como puedes ver no hay nada más que hacer después del bucle, al Destructor de la ventana se encarga de cerrar todo. EXIT_SUCCESS es una constante que vale 0, lo que debe devolver un programa si todo ha ido bien.
Nota: Artículo basado en el tutorial oficial.
[…] el anterior tutorial vimos como crear una ventana, pero esta no se podía cerrar. Es esta tutorial aprenderemos a […]
Cuando voy a compilar me dice que App no fue declarada..que significa?