Programación de videojuegos
David Erosa García Luis Rodero Morales
ascii@talika.eii.us.es
tf2@talika.eii.us.es
Acceso al hardware
Allegro y SDL
Introducción
Consiguiendo las librerías
•
Allegro puede conseguirse en http://alleg.sf.net. Su última versión es la 4.1.13.
• • •
En http://www.allegro.cc hay todo tipo de addons y utilidades, además denumerosos juegos (con su código fuente (o no)).
SDL, cuya última versión es la 1.2.7, al igual que sus addons y juegos, se puede encontrar en http://libsdl.org .
Ambos pueden descargarse de dos formas:
• •
Está el código fuente listo para ser compilado. En versión precompilada (Dev-C++, MinGW32, MSVC, paquetes para distintas distribuciones GNU/Linux...).
3
Introducción
Compilando -Allegro
•
Para compilar un programa Allegro en GNU/Linux: g++ `allegro-config --libs --cppflags` main.cpp -o prueba
• • •
Esta línea genera como salida un ejecutable 'prueba' a partir de un fuente 'main.cpp'.
Para Dev-C++ hay paquetes de desarrollo preparados que generan proyectos Allegro listos para ser compilados. Dado que el código fuente está disponible, es muy sencilloadaptarlo a las necesidades de nuestro compilador (p.ej. MS-Visual-C++).
4
Introducción
Compilando - SDL
•
La compilación de un programa SDL en GNU/Linux es muy sencilla: g++ `sdl-config --libs --cflags` $(LIBS) main.cpp -o prueba
•
Donde LIBS depende de las librerias extras que vayamos a usar:
• • •
• • •
-lSDL_image para SDL_image. -lSDL_mixer para SDL_mixer. -lSDL_ttf paraSDL_ttf...
Esta línea genera como salida un ejecutable 'prueba' a partir de un fuente 'main.cpp'.
Para Dev-C++ hay paquetes de desarrollo preparados que generan proyectos SDL listos para ser compilados. Dado que el código fuente está disponible, es muy sencillo adaptarlo a las necesidades de nuestro compilador (p.ej. MS-Visual-C++).
5
Inicialización - Finalización
Allegro
• • • • •Siempre hay que incluir la cabecera “allegro.h”. Para inicializar la librería, basta con llamar a la macro allegro_init ()
•
Configura varios parámetros relacionados con el sistema operativo.
Devuelve 0 siempre, si no puede inicializarse aborta la ejecución. Para cerrar la librería, se llama a la función allegro_exit () (no es necesario) Justo después de la llave de cierre de main, hayque llamar a END_OF_MAIN ().
6
Inicialización - Finalización
SDL
• • • • •
Siempre hay que incluir “SDL.h” Opcionalmente: “SDL_image.h”, “SDL_mixer.h”, “SDL_ttf.h”... SDL se inicializa con: int SDL_Init (Uint32 flags)
• •
Devuelve -1 en caso de error, 0 en caso de éxito. Los flags determinan los subsistemas a inicializar.
Pueden inicializarse y terminarse subsistemasindividuales int SDL_InitSubSystem (Uint32 flags) void SDL_QuitSubSystem (Uint32 flags) Se finaliza el uso de SDL con void SDL_Quit (void)
7
Lo que vamos a ver • • • • • •
Empezando Funciones de entrada. Funciones de sonido. Funciones de cronometrado. Funciones gráficas.
Red y eso pa otro año... :P
8
Empezando...
Iniciar un modo gráfico
•
En Allegro: int set_gfx_mode (int card,int w, int h, int v_w, int v_h)
• • •
Luego veremos qué significan los parámetros. En principio haremos la llamada de la siguiente forma: set_gfx_mode (GFX_AUTODETECT_WINDOWED, 320, 240, 0, 0);
En SDL: SDL_Surface* SDL_SetVideoMode (int w, int h, int bpp, Uint32 flags)
• •
Luego veremos qué significan los parámetros. La llamada que haremos será: screen = SDL_SetVideoMode (320, 240,0, SDL_ANYFORMAT);
9
Funciones de entrada
Introducción
•
Veremos cómo acceder a dispositivos como:
• •
• • •
Teclado. Ratón. Joystick - Gamepad.
Hay multitud de métodos relacionados con cada dispositivo en ambas librerías, así que sólo veremos los que vayamos a usar posteriormente (por simplicidad). En SDL puede consultarse el estado de los dispositivos mediante...
Regístrate para leer el documento completo.