Razón Artificial

La ciencia y el arte de crear videojuegos

SFML – Abriendo una ventana

Escrito por adrigm el 22 de marzo de 2011 en Desarrollo Videojuegos, Noticias, Programación | 2 Comentarios.

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.

2 Comentarios en "SFML – Abriendo una ventana"

  1. […] el anterior tutorial vimos como crear una ventana, pero esta no se podía cerrar. Es esta tutorial aprenderemos a […]

Deja un comentario