Capítulo 2: Creación de la Primera Ventana en SDL
Ahora que hemos configurado Visual Studio 2008, podemos empezar a crear nuestra
primera ventana en SDL 2.
//Encabezados de inclusión utilizados en nuestros programas
#include <SDL.h>
#include <stdio.h>
#include <SDL.h>
#include <stdio.h>
Al inicio de nuestro código podemos observar un comentario, los comentarios
se utilizan para documentar el código en C++. Existen dos tipos de comentarios,
los comentarios de línea que comienzan con dos barras "
//Comentario
"
de forma que el compilador ignora todo lo que está después de ellos; y los comentarios
de múltiples líneas que comienzan con barra y asterisco y terminan con asterisco
y barra "/*Comentario*/
" de modo
que todo lo que esté entre estos el compilador lo ignorará. Luego tenemos los
archivos de inclusión utilizados en el programa. El archivos de inclusión SDL
contienen las funciones, definiciones de tipos de datos, constantes y otros
datos que necesita nuestra aplicación para trabajar con SDL. También hay un
archivo de inclusión de entrada y salida del C estándar que contiene la función
printf
que vamos a utilizar para mostrar información en la consola.
//Función principal de la aplicación
int main(int argc, char* args[]){
//Inicialización de la ventana, y la superficie.
SDL_Window* Ventana = NULL;
SDL_Surface* Superficie = NULL;
int main(int argc, char* args[]){
//Inicialización de la ventana, y la superficie.
SDL_Window* Ventana = NULL;
SDL_Surface* Superficie = NULL;
Después de los archivos de inclusión está la parte de inicial de la función
Este formato es crítico, ya que si se modifica, habrá una referencia indefinida a la función main y la aplicación no funcionará, así que hay que escribirla tal como está. Luego creamos una ventana SDL para nuestra aplicación. Después creamos una superficie para la ventana. Una superficie es una imagen que podemos cargar, pintar, y/o mostrar, esta imagen es 2D.
main
, esta función debe tener este formato:int main(int
argc, char* args[])
Este formato es crítico, ya que si se modifica, habrá una referencia indefinida a la función main y la aplicación no funcionará, así que hay que escribirla tal como está. Luego creamos una ventana SDL para nuestra aplicación. Después creamos una superficie para la ventana. Una superficie es una imagen que podemos cargar, pintar, y/o mostrar, esta imagen es 2D.
//Inicializa el subsistema de Video
if(SDL_Init(SDL_INIT_VIDEO) < 0){
printf("ERROR: No se pudo inicializar SDL, Error SDL: %s\n", SDL_GetError());
}
if(SDL_Init(SDL_INIT_VIDEO) < 0){
printf("ERROR: No se pudo inicializar SDL, Error SDL: %s\n", SDL_GetError());
}
Antes de declarar y dibujar la superficie debemos inicializar SDL para poder
utilizar las funciones de SDL. Entonces vamos a inicializar SDL junto con el
subsistema de video, ya que lo vamos a necesitar. Para inicializar el subsistema
de video debemos pasarle a
La función
Para mostrar la información en la consola usamos la función
Como
SDL_Init
el parámetro "SDL_INIT_VIDEO
".La función
SDL_Init
devuelve -1 si existe algún error, así que
este error lo vamos a mostrar en la consola cuando suceda.Para mostrar la información en la consola usamos la función
printf
,
esta función muestra la información en la consola, también vamos a pasarle como
segundo parámetro el resultado de la función SDL_GetError()
para
que lo muestre en la consola.Como
SDL_GetError()
devuelve una cadena de caracteres, debemos
colocar %s
dentro del texto del primer parámetro de printf
donde queramos mostrar la información. %s
indica a printf
que el parámetro pasado es una cadena de caracteres.
else{
//Se crea la ventana principal
Ventana = SDL_CreateWindow("Tutorial SDL 2", 20, 20, 640, 480, SDL_WINDOW_SHOWN);
if(Ventana == NULL) {
printf("ERROR: No se pudo crear la ventana, SDL_Error: %s\n", SDL_GetError());
}
//Se crea la ventana principal
Ventana = SDL_CreateWindow("Tutorial SDL 2", 20, 20, 640, 480, SDL_WINDOW_SHOWN);
if(Ventana == NULL) {
printf("ERROR: No se pudo crear la ventana, SDL_Error: %s\n", SDL_GetError());
}
Si todo resulta exitoso, entonces podemos crear la ventana, en este caso vamos
a utilizar la función
La función
SDL_CreateWindow
. El primer argumento de
la función define el título de la ventana, el segundo y el tercero define la
posición x e y respectivamente de la ventana, el cuarto y quinto argumento define
el ancho y el alto respectivamente de la ventana, el último argumento son los
parámetros de creación de la ventana, vamos a utilizar sólo SDL_WINDOW_SHOWN
que muestra la pantalla cuando se haya creado.La función
SDL_CreateWindow
devuelve
NULL
cuando ha ocurrido algún error,
entonces la ventana no se crea y nosotros mostramos el error en la pantalla.
else{
//Se crea la superficie para la ventana principal
Superficie = SDL_GetWindowSurface(Ventana);
//Se dibuja un cuadro azul en la superficie principal
SDL_FillRect(Superficie, NULL, SDL_MapRGB(Superficie->format, 0x00, 0x00, 0xFF));
//Se actualiza la superficie
SDL_UpdateWindowSurface(Ventana);
//Esperamos 5 segundos
SDL_Delay(5000);
}
}
//Se crea la superficie para la ventana principal
Superficie = SDL_GetWindowSurface(Ventana);
//Se dibuja un cuadro azul en la superficie principal
SDL_FillRect(Superficie, NULL, SDL_MapRGB(Superficie->format, 0x00, 0x00, 0xFF));
//Se actualiza la superficie
SDL_UpdateWindowSurface(Ventana);
//Esperamos 5 segundos
SDL_Delay(5000);
}
}
Si todo resulta exitoso, entonces podemos crear la superficie, en este caso
vamos a utilizar la función
Ahora vamos a dibujar un rectángulo azul para la superficie, para ello vamos a utilizar la función
Luego vamos a actualizar la superficie para que muestre los cambios que hemos realizado con la función
Ahora debemos mostrar la pantalla al menos algunos segundos, para poderla observar, esto lo hacemos con la función
SDL_GetWindowSurface
. El argumento
de la función define la ventana donde se va a crear la superficie.Ahora vamos a dibujar un rectángulo azul para la superficie, para ello vamos a utilizar la función
SDL_FillRect
. El primer argumento de esta
función es la superficie donde vamos a dibujar el rectángulo, el segundo argumento
es el tamaño del rectángulo, en este caso vamos a colocar
NULL
para que dibuje toda la superficie,
el tercer argumento es el color del rectángulo, el cual vamos a definirlo con
la función SDL_MapRGB
. La función SDL_MapRGB
devuelve
un entero sin signo de 32 bits (Uint32
) con información del color.
El primer argumento de la función SDL_MapRGB
es el formato de la
superficie, el segundo, tercero y cuarto son los colores Rojo, Verde y Azul
(RGB) respectivamente.Luego vamos a actualizar la superficie para que muestre los cambios que hemos realizado con la función
SDL_UpdateWindowSurface
que tiene como
parámetro la ventana donde está la superficie.Ahora debemos mostrar la pantalla al menos algunos segundos, para poderla observar, esto lo hacemos con la función
SDL_Delay
. Con esta función nosotros
le podemos decir la cantidad de milisegundos que debe esperar la aplicación.
1 milisegundo es la milésima parte de un segundo (1/1000). Cuando esta función
está en operación, la aplicación no acepta ningún comando del teclado o ratón,
la aplicación se queda "colgada" hasta que termine el tiempo establecido.
//Destruimos la Ventana para liberar
recursos.
SDL_DestroyWindow(Ventana);
//Quitamos el subsistema de SDL.
SDL_Quit();
//Salimos de la función main
return 0;
}
SDL_DestroyWindow(Ventana);
//Quitamos el subsistema de SDL.
SDL_Quit();
//Salimos de la función main
return 0;
}
Para finalizar la aplicación, debemos liberar los recursos y quitar los subsistema
iniciados, para liberar los recursos utilizamos la función
El código fuente debe quedar como el siguiente:
SDL_DestroyWindow
que tiene como parámetro la ventana que vamos a destruir. Para cerrar el subsistema
SDL utilizamos la función SDL_Quit
. Para salir de la función main
utilizamos return.
.El código fuente debe quedar como el siguiente:
//Encabezados de inclusión utilizados en nuestros programas
#include <SDL.h>
#include <stdio.h>
//Función principal de la aplicación
int main(int argc, char* args[]){
//Inicialización de la ventana, y la superficie.
SDL_Window* Ventana = NULL;
SDL_Surface* Superficie = NULL;
//Inicializa el subsistema de Video
if(SDL_Init(SDL_INIT_VIDEO) < 0){
printf("ERROR: No se pudo inicializar SDL, Error SDL: %s\n", SDL_GetError());
}
else{
//Se crea la ventana principal
Ventana = SDL_CreateWindow("Tutorial SDL 2", 20, 20, 640, 480, SDL_WINDOW_SHOWN);
if(Ventana == NULL){
printf("ERROR: No se pudo crear la ventana, SDL_Error: %s\n", SDL_GetError());
}
else{
//Se crea la superficie para la ventana principal
Superficie = SDL_GetWindowSurface(Ventana);
//Se dibuja un cuadro azul en la superficie principal
SDL_FillRect(Superficie, NULL, SDL_MapRGB(Superficie->format, 0x00, 0x00, 0xFF));
//Se actualiza la superficie
SDL_UpdateWindowSurface(Ventana);
//Esperamos 5 segundos
SDL_Delay(5000);
}
}
//Destruimos la Ventana para liberar recursos.
SDL_DestroyWindow(Ventana);
//Quitamos el subsistema de SDL.
SDL_Quit();
//Salimos de la función main
return 0;
}
#include <SDL.h>
#include <stdio.h>
//Función principal de la aplicación
int main(int argc, char* args[]){
//Inicialización de la ventana, y la superficie.
SDL_Window* Ventana = NULL;
SDL_Surface* Superficie = NULL;
//Inicializa el subsistema de Video
if(SDL_Init(SDL_INIT_VIDEO) < 0){
printf("ERROR: No se pudo inicializar SDL, Error SDL: %s\n", SDL_GetError());
}
else{
//Se crea la ventana principal
Ventana = SDL_CreateWindow("Tutorial SDL 2", 20, 20, 640, 480, SDL_WINDOW_SHOWN);
if(Ventana == NULL){
printf("ERROR: No se pudo crear la ventana, SDL_Error: %s\n", SDL_GetError());
}
else{
//Se crea la superficie para la ventana principal
Superficie = SDL_GetWindowSurface(Ventana);
//Se dibuja un cuadro azul en la superficie principal
SDL_FillRect(Superficie, NULL, SDL_MapRGB(Superficie->format, 0x00, 0x00, 0xFF));
//Se actualiza la superficie
SDL_UpdateWindowSurface(Ventana);
//Esperamos 5 segundos
SDL_Delay(5000);
}
}
//Destruimos la Ventana para liberar recursos.
SDL_DestroyWindow(Ventana);
//Quitamos el subsistema de SDL.
SDL_Quit();
//Salimos de la función main
return 0;
}
Hasta aquí hemos visto cómo se crea una ventana SDL y una superficie, también
vimos como se dibuja en la superficie un cuadro de color azul y lo mostramos
en la pantalla. Puedes descargar el código fuente
aquí.
Puedes ir a:
Introducción a SDL 2.
Capítulo 1: Instalación y Configuración de SDL 2 y Visual Studio 2008.
Capítulo 3: Mostrar una Imagen en SDL 2.
Puedes ir a:
Introducción a SDL 2.
Capítulo 1: Instalación y Configuración de SDL 2 y Visual Studio 2008.
Capítulo 3: Mostrar una Imagen en SDL 2.
buen tutorial
ResponderEliminar