Intro sdl library c++

Intro sdl library c++ gy Unomasun02 ‘IOR6pR 16, 2011 4 pagos Introducción a SDL (Simple Directmedia Layer) Javier Martínez Baena ([email protected] ugr. es) Universidad de Granada Dpto. Ciencias de la Computación e nteligencia Artificial índice índice 1. Introducción 2. Compilación y enlazado 3. Uso de SDL 3. 1. Inicialización de SDL 3. 2. Gestión de errores con 3. 3. Finalización de SDL. Creando ventanas 5_ eventos 8. Ejemplo 9 333467811 12 1 INTRODUCCIÓN 2 ntroducción 1. 1 ora Sv. içx to View buian ck 7.

Gestión de alfabético 1 2222 SDL es una biblioteca multiplataforma (Linux, Windows, para l control multimedia del ordenador. Entre otras cosas permite controlar los sistemas de vídeo y audio y nos da la posibilidad de gestionar los eventos del sistema (pulsaciones de teclas, movimientos de ratón o joystick, etc). En la página web de la SDL tienes enlaces a multitud de aplicaciones que han sido constru construidas haciendo uso de ella. Por ejemplo, la versión de Linux del juego “Civilization: Call to Power (http://www. okigames. com/ products/civctp/): Este documento únicamente pretende servir de apoyo a la documentación oficial de la SDLy por tanto será necesario onsultar dicha documentación para determinadas cuestiones. 2. Compilación y enlazado Para poder crear programas que hagan uso de SDL necesitamos tener instalado el paquete para desarrollo de esta biblioteca: sdl-devel. Una vez instalado hemos de saber que los ficheros de cabecera están en /usr/include/SDL. El fichero que hemos de incluir en nuestros programas se llama SDLh.

La biblioteca se encuentra en /usr/lib y se llama libSDL. a. por ejemplo, supongamos que nuestro fichero fuente es ejemplo. cpp: 123 // Fichero: ejemplo. cpp #include “SDL. h” Para compilar usaremos la instrucción: g + -c ejemplo. pp -l/usr/include/SDL Para enlazar usaremos la instrucción: g++ -o ejemplo ejemplo. o -ISDL -L/usr/lib aunque la opción -L/usr/lib no es estrictamente necesaria ya que, al ser uno de los directorios estándar del sistema, el compilador buscará ahí, por defecto, las bibliotecas. 3. Uso de SDL 3. . Inicialización de SOL Inicialización de SDL Antes de poder usar ninguna función de la SDL es necesario inicializarla. La SDL se compone de distintos subsistemas: uno para el control del video, otro para el sonido, etc. Al inicializar la SDL hay que indicarle cuales de esos módulos necesitamos usar. or ejemplo, si vamos a usar el vídeo pondremos: INIT VIDEO); Si queremos inicializar el vídeo y el audio pondremos: INIT VIDEO Esta función devuelve O si todo es correcto y -1 si hay algún error. 4 CREANDO VEN ANAS 3. 2.

Gestión de errores con SDL Cuando se produce algún error podemos usar la función SDL_GetError. Nos mostrará un mensaje indicando las causas del mismo: cout pitch + x*bpp; Uint32 color-O; switch (bpp) { case 1: color = *p; break; case 2: color = *Wintl 6*)p; break; case 3: if color P[2]; else 91011 1213141516171819 6 LOCK Y UNLOCK 3Lvf4 color P[2]« e 4: color *(Uint32*)p; En este caso hacemos uso de la función SDL_GetRGB() a la que le damos el color de un pixel (en el formato correspondiente según los bpp) y nos devuelve con que valores R, Gy B se corresponde. 6. ck y Unlock Finalmente queda un detalle a tener en cuenta. para poder tener acceso directo a la matriz a la que hemos llamado lienzo y modificarla a nuestro antojo primero hay que indicarle a la SDL que lo vamos a hacer (SDL_LockSurface). Una vez que hemos terminado de modificar dicha matriz le decimos a la SDL que hemos terminado de modificarla (SDL UnlockSurface). Estas operaciones de bloqueo y desbloqueo no siempre son necesarias (depende del tipo de pantalla y otras cuestiones) y para saber cuando tenemos que hacerlas o no podemos usar la función SDL_MUSTLOCK.

SDL_LockSurface devuelve O si la operación se ha realizado con éxito y -1 si hay algún error. Si SDL_MUSTLOCK devuelve O significa que la pantalla no necesita realizar las operaciones de bloque o desbloqueo. Otro valor significará que necesitamos realizar el bloqueo y el desbloqueo. Por tanto el esquema para dibujar es el siguiente: 1234567891011 121314 if (SDL_MUSTLOCKtpantalIa)) { if