Comenzaremos con un ejemplo mínimo de SDL dónde abriremos una ventana con el título “Hola Mundo”. Para ello además del código en C prepararemos el Makefile para compilarlo. Podríamos haber usado un entorno de desarrollo integrado como Anjuta por ejemplo, pero ya que se trata de una iniciación a SDL lo mejor creo que es trabajar directamente sobre el compilador y los Makefile.
Makefile
Comenzaremos con el Makefile. Incluiremos además de “sdl-config” las librerías que hemos instalado en el paso anterior:
SDL_CONFIG = sdl-config DEFAULT_CFLAGS = $(shell $(SDL_CONFIG) --cflags) MORE_CFLAGS = -O2 CFLAGS = $(DEFAULT_CFLAGS) $(MORE_CFLAGS) CXXFLAGS = $(DEFAULT_CFLAGS) $(MORE_CFLAGS) -fno-exceptions -fno-rtti LDLIBS = -lSDL_image -lSDL_mixer -lSDL_ttf -lSDL_net $(shell $(SDL_CONFIG) --libs) all: holamundo_sdl holamundo_sdl: holamundo_sdl.c clean: rm -f *~ rm -f main.o main
holamundo_sdl.c
Pasemos ahora a implementar nuestro primer programa con SDL. Será lo más sencillo posible y básicamente realizará las dos siguientes acciones:
- Abrirá una ventana con el título “Hola Mundo SDL”.
- Se cerrará cuando pulsemos “Tecla hacia arriba”.
#include <stdio.h>
#include <stdlib.h>
#include <SDL.h>
int main(int argc, char *argv[])
{
SDL_Surface *image, *screen;
SDL_Rect dest;
SDL_Event event;
int terminar=0;
atexit(SDL_Quit);
if (SDL_Init(SDL_INIT_VIDEO) < 0)
{
printf("No se pudo iniciar SDL: %sn",SDL_GetError());
exit(1);
}
screen = SDL_SetVideoMode(640,480,24,SDL_HWSURFACE);
if (screen == NULL)
{
printf("No se puede inicializar el modo gráfico: %sn",
SDL_GetError());
exit(1);
}
SDL_WM_SetCaption("Hola Mundo SDL","Hola Mundo SDL");
SDL_Flip(screen);
while(terminar == 0)
{
while ( SDL_PollEvent(&event) )
{
if ( event.type == SDL_KEYUP )
terminar = 1;
}
}
return 0;
}
Comentemos lo más importante del mismo:
- Inicio de SDL y salida si algo falla.
if (SDL_Init(SDL_INIT_VIDEO) < 0)
{
printf("No se pudo iniciar SDL: %sn",SDL_GetError());
exit(1);
}
- Establecer modo de vídeo a 640×480 píxeles, 24 bits de profundidad de color (y salida si algo falla al igual que antes). Podéis apreciar que si existe error podemos capturarlo con “SDL_GetError()”
screen = SDL_SetVideoMode(640,480,24,SDL_HWSURFACE);
if (screen == NULL)
{
printf("No se puede inicializar el modo gráfico: n",SDL_GetError());
exit(1);
}
- Ponemos el título a la pantalla:
SDL_WM_SetCaption("Hola Mundo SDL","Hola Mundo SDL");
- Actualizamos la pantalla:
SDL_Flip(screen);
- Obtenemos los eventos. En caso del evento ser: “Pulsación de tecla Flecha Arriba”, cerramos el programa. Como podéis apreciar el evento es almacenado en “event” que es una variable del tipo SDL_Event. Dentro de dicha varible accedemos al tipo de evento. El evento pulsación “Flecha Arriba” es: “SDL_KeyUp” como podéis observar.
while(terminar == 0)
{
while ( SDL_PollEvent(&event) )
{
if ( event.type == SDL_KEYUP )
terminar = 1;
}
}
Entradas relacionadas:
- Curso programación de videojuegos con SDL – Allegro, otra librería para el desarrollo de videojuegos
- Curso programación de videojuegos con SDL – ¿Qué es SDL?
- Curso programación de videojuegos con SDL – Introducción
- Curso programación de videojuegos con SDL – Instalación y configuración
- Curso C# con Mono – ¡Hola Mundo!




