Si te has perdido el primer post de este grupo mira antes es bueno que lo mires antes: sdl-en-c-bajo-gnu-linux-001-hola-mundo
Existe mucho software creado con SDL. En esta entrada no vamos a mostrar ejemplos de software ya creado, ni a recopilar ni compilar juegos que se han creado (comerciales y libres) usando SDL.
En esta entrada vamos a instalar lo básico para trabajar con SDL usando C puro.
No esperes aún muchas líneas de código. Ahora es tiempo de instalar dependencias.
El sistema operativo que utilizo es Debian (GNU/Linux) pero … podrás usar esto en otros sistemas operativos GNU/Linux sin problemas e incluso en Windows, Mac OS, iOS, Android, AmigaOS, …
No tengo nada en contra de otras distros de GNU/Linux pero leñes, tengo que usar algo para el tutorial y he decidido que sea Debian. No te costará mucho adaptarlo a otras distros.
De modo que vamos.
Con calma, sin prisa alguna ni presión. Vamos a probar las cosas poco a poco.
Disponer de lo base
Lo que vamos a instalar inicialmente y para tener lo base es:
libsdl2-2.0 libsdl2-dev
Lo básico será instalar esto en una debian/ubuntu:
# apt-get install libsdl2-2.0 libsdl2-dev
Las librerías net, image, mixer, ttf y gfx ya las instalaremos después cuando las precisemos.
Por el momento NO es así.
Hemos de saber que para usar las librerías hemos de incluirlas con #include . Ejemplo de la Librería básica de SDL:
#include <SDL.h>
Nosotros/as incluiremos por el momento la básica y para ello aparte de saber incluir las librerías hemos de saber que parámetros meter a gcc para compilar.
Para compilar un programa en C que utiliza SDL encontrarás por internete muchas recetas. Lo ideal es usar:
sdl2-config --cflags --libs
y por tanto compilar por ejemplo así:
$ gcc -o ventana ventana.c `sdl2-config --cflags --libs`
Nuestro primer programa usando SDL: Una ventana con titulo
Veamos un ejemplo compilable (mirar mejor aquí que se ve entero pastebin.com/raw/pUEw9nqW ):
#include <SDL.h> #include <stdio.h> //int main(int argc, char* argv[]) { int main(void) { SDL_Window *ventana; // Declaramos ventana como un puntero SDL_Init(SDL_INIT_VIDEO); // Inicializamos SDL2 // Creamos una ventana con la siguiente configuración: ventana = SDL_CreateWindow( "Hola mundo SDL mierda.56k.es in the night with the stars in the sky", // window title //SDL_WINDOWPOS_UNDEFINED, // Posición inicial x //SDL_WINDOWPOS_UNDEFINED, // Posición inicial y 0, // Posición inicial x 0, // Posición inicial y 640, // El ancho en pixeles 480, // El alto en pixeles SDL_WINDOW_OPENGL // flags de la ventana ( SDL_WINDOW_FULLSCREEN, SDL_WINDOW_FULLSCREEN_DESKTOP, SDL_WINDOW_OPENGL, SDL_WINDOW_HIDDEN ,SDL_WINDOW_BORDERLESS, SDL_WINDOW_RESIZABLE, SDL_WINDOW_MINIMIZED, SDL_WINDOW_MAXIMIZED, SDL_WINDOW_INPUT_GRABBED, SDL_WINDOW_ALLOW_HIGHDPI //SDL_WINDOW_FULLSCREEN ); // Comprobamos si la ventana se ha creado if (ventana == NULL) { // En el caso de que la ventana no se ha creado ... printf("Lo siento amigo/a pero no se pudo crear la ventana: %s\n", SDL_GetError()); return 1; } // La ventana está abierta ahora mismo. Aquí es cuando entramos en el loop de la ventana. (ver SDL_PollEvent()) SDL_Delay(6000); // Pausar 6 segundos // Cerrar y destruir ventana SDL_DestroyWindow(ventana); // Clean up - limpieza y cierre SDL_Quit(); return 0; }
En el ejemplo veremos algunas líneas comentadas. Podemos por ejemplo fácilmente poner esto a pantalla completa si comentamos SDL_WINDOW_OPENGL y descomentamos SDL_WINDOW_FULLSCREEEN .
Ver más flags aquí: wiki.libsdl.org/SDL_WindowFlags
También he comentado más código para que se vea que podemos posicionar la ventana donde nos de la gana o hacer que se posicione normalmente en el centro (por defecto).
Tardará 6 segundos y la ventana se destruirá y se cerrará el programa.
En fin. Un ejemplo bueno para iniciarse. Si la ventana se abre y se ve y podemos trastearle al código y compilar diferentes opciones es que todo va bien. Es que estamos usando SDL ya.
La vida es así supongo. Un poco de tutorial y a la carga luego.
El código sin comentarios podría quedar así e incluso más reducido, no obstante yo prefiero dejar los comentarios para enterarme meses después de que mierda estaba haciendo.
#include <SDL.h> #include <stdio.h> int main(void) { SDL_Window *ventana; SDL_Init(SDL_INIT_VIDEO); ventana = SDL_CreateWindow("Texto titulo",0,0,640,480,SDL_WINDOW_OPENGL); if (ventana == NULL) { printf("No se pudo crear la ventana: %s\n", SDL_GetError()); return 1; } SDL_Delay(3000); SDL_DestroyWindow(ventana); SDL_Quit(); return 0; }
Y un makefile de ejemplo para compilar usando make puede ser este (le falta una sección install que copie el binario generado, no obstante para una tontería como esta mejor no añadirle esa sección).
CC := gcc CFLAGS := -Wall LINKER_FLAGS = `sdl2-config --cflags --libs` test: make clean make build build: $(CC) $(CFLAGS) -o ventana ventana.c $(LINKER_FLAGS) run: ./ventana clean: -rm ventana
Sobre los tutoriales
Los tutoriales de iniciación mucha gente los desprecia. Pero para mi son importantes.
Si llegaste aquí y estás leyendo esto lo mismo estás iniciándote. En pocas horas ya serás pro y dejarás de leer estas mierdas pero … siempre recuerda que se precisa muchas veces de un algo que te permita dar los primeros pasos.
Estos tutoriales son eso. 😉
Saludos cordiales.
Llevo tantos años sin programar que creo que voy a seguir este tutorial de iniciación para desoxidarme y ponerme de una vez al día con SDL.
Espero le sea de utilidad :). Un saludo