Otro de los pdf que encontré y hasta ahora el que mejor pinta tiene para ayudarme a arrancar con algún jueguecito y estrenar mi portfolio.
Se titula Tutorial de libSDL para la programación de videojuegos y empieza con mucha teoría sobre SDL acompañado de bastante código de ejemplo para ir practicando. Algo ya había puesto en esta entrada, pero volveré a postearlo para dejar una serie de entradas juntas sobre dicho tutorial.
Las herramientas con las que se trabajará en el tutorial son:
- SDL
- Gimp
- C/C++
- Linux
- Netbeans
- GNU/GCC
- Repositorios
- Planificador de tareas
La estructura básica del juego, como ya habíamos visto varias veces:
- Inicialización
- Game loop
- Gestión de la entrada
- Procesamiento
- Salida de datos (dibujo en pantalla)
- Finalización
Librería SDL
SDL está compuesto por subsistemas. Algunos son:
- Vídeo y gráficos
- Eventos de entrada (teclado, ratón, joystick...)
- Sonido
- Manejo del CD-Rom
- Timers
- Gestión de dispositivos
- Red
Se compila normal con g++ -o resultado prueba.c
Cuando incluimos SDL, se añade el flag -lSDL
Si usamos subsistemas concretos, se añaden los flags correspondientes
-lSDL_image -lSDL_ttf -lSDL_mixer -lSDL_net
Es buena idea usar los makefiles (localicé un pdf sobre este tema que seguramente me eche una mano)
De la misma forma, podemos especificar a g++ los flags de SDL. Es bueno que los conozca por lo que incluimos 'sdl-config --cflags --libs' (siendo libs los flags de sdl)
Tipos de datos en SDL
Para asegurar la compatibilidad, SDL especifica todos los detalles del dato
SxxxBB
S/U (signed/unsigned)
xxx (int, float...)
BB (número de bits, en múltiplos de 8)
Ej: Uint32
Funciones básicas en SDL
Uint32 SDL_WasInit(Uint32 ags);Nos devuelve si el subsistema se ha inicializado. Devuelve 0 si no, o el flag o flags inicializados. Los flags se pueden combinar con OR.
char *SDL_GetError(void);Devuelve un string con el error sucedido.
Inicialización y finalización del SDL
Se incluyen las librerías necesarias, por ejemplo
#include <SDL/SDL.h> //SDL básico
#include <SDL/SDL_ttf.h> //para las fuentes
Se inicializa en primer lugar
int SDL_Init(Uint32 flags)
La función devuelve 0 si ha sido correcto o -1 si algo ha ido mal. Los distintos valores de flags son:
- SDL_INIT_VIDEO: Inicializa el subsistema de video.
- SDL_INIT_AUDIO: Inicializa el subsistema de audio.
- SDL_INIT_TIMER: Inicializa el subsistema de timers.
- SDL_INIT_CDROM: Inicializa el subsistema de CD-ROM.
- SDL_INIT_JOYSTICK: Inicializa el subsistema de joystick.
- SDL_INIT_EVERYTHING: Inicializa todos los subsistemas.
- SDL_INIT_NOPARACHUTE: Prepara a SDL para capturar señales de error fatal.
int SDL_InitSubSystem(Uint32 flags);
Cuando acabemos, hemos de cerrar con
void SDL_Quit(void);
Si sólo necesitamos cerrar algún subsistema antes del final, usamos
void SDL_QuitSubSystem(Uint32 flags);
Para establecer un título de ventana
SDL_WM_SetCaption(char *title, icono);
Antes de dibujar nada, tenemos que establecer un "lienzo" donde pintar, el cual es SDL_Surface.
Para asegurarnos de que se ejecutan funciones antes de cerrar la aplicación, tenemos la función atexit(); que recibe una función como parámetro, por ejemplo
atexit(SDL_Quit);
Para establecer el modo de vídeo tenemos
SDL_SetVideoMode();
En la siguiente entrega, ¡más!