10.07.2015 Views

[ebook]Programacion de videojuegos con SDL

[ebook]Programacion de videojuegos con SDL

[ebook]Programacion de videojuegos con SDL

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

P R O G R A M A C I Ó N D E V I D E O J U E G O S C O N S D L}exit(1);}atexit(<strong>SDL</strong>_Quit);En este fragmento <strong>de</strong> código hay varias cosas interesantes. Empecemos por la función<strong>SDL</strong>_Init. Como parámetro acepta un argumento <strong>de</strong> tipo Uint32. Como te dije antes, <strong>SDL</strong> esmultiplataforma, por lo que tiene <strong>de</strong>finidos una serie <strong>de</strong> tipos <strong>de</strong> datos que serán iguales <strong>con</strong>in<strong>de</strong>pen<strong>de</strong>ncia <strong>de</strong>l sistema en el que corra. La U quiere <strong>de</strong>cir que el tipo <strong>de</strong> datos es sin signo(unsigned), int, como podrás adivinar es por que es un entero y 32, porque es un entero <strong>de</strong> 32bits. Si en vez <strong>de</strong> U, usamos la S (signed) estaremos hablando <strong>de</strong> un entero <strong>con</strong> signo. Parael número <strong>de</strong> bits, los posibles valores son 8,16,32 o 64. Así, por ejemplo, Uint16, haráreferencia a un entero <strong>de</strong> 16 bits. Veamos en <strong>de</strong>talle los parámetros que hemos pasado a<strong>SDL</strong>_Init(). <strong>SDL</strong>_INIT_AUDIO|<strong>SDL</strong>_INIT_VIDEO. Con este parámetro le <strong>de</strong>cimos a <strong>SDL</strong>que sólo queremos inicializar el subsistema <strong>de</strong> audio y <strong>de</strong> vi<strong>de</strong>o. Los posibles valores son:<strong>SDL</strong>_INIT_VIDEO<strong>SDL</strong>_INIT_AUDIO<strong>SDL</strong>_INIT_TIMER<strong>SDL</strong>_INIT_CDROM<strong>SDL</strong>_INIT_JOYSTICK<strong>SDL</strong>_INIT_EVERYTHINGLos parámetros se pasan separados por la barra vertical (|). Si quisiéramos inicializara<strong>de</strong>más <strong>de</strong>l audio y el vi<strong>de</strong>o el cd-rom, los parámetros serían los siguientes:<strong>SDL</strong>_INIT_AUDIO|<strong>SDL</strong>_INIT_VIDEO|<strong>SDL</strong>_INIT_CDROMSi lo queremos activar todo, pasaremos como único parámetro <strong>SDL</strong>_INIT_EVERYTHING.Una vez inicializado <strong>SDL</strong>, si necesitamos inicializar otro subsistema po<strong>de</strong>mos hacerlo <strong>con</strong> lafunción <strong>SDL</strong>_InitSubSystem(Uint32 flags) <strong>de</strong> la siguiente manera.// Inicializamos el CD-ROMif (<strong>SDL</strong>_InitSubSystem(<strong>SDL</strong>_INIT_CDROM) == -1) {printf("No se pue<strong>de</strong> iniciar el cdrom: %s\n",<strong>SDL</strong>_GetError());exit(1);}Como habrás adivinado, la función <strong>SDL</strong>_GetError() <strong>de</strong>vuelve el último error interno <strong>de</strong> <strong>SDL</strong>en formato ca<strong>de</strong>na. Cuando una aplicación <strong>SDL</strong> es inicializada, se crean dos archivos,st<strong>de</strong>rr.txt y stdout.txt. Durante la ejecución <strong>de</strong>l programa, cualquier información que se escribaen la salida <strong>de</strong> error estándar se escribe en el archivo st<strong>de</strong>rr.txt. Igualmente, cualquierinformación que se escriba en la salida estándar se guardará en el archivo stdout.txt. Esto nosva a ser <strong>de</strong> gran ayuda a la hora <strong>de</strong> <strong>de</strong>purar programas. Una vez finalizada la ejecución, siestos archivos están vacíos son borrados automáticamente, si no, estos permanecen intactos.Al igual que inicializamos <strong>SDL</strong>, cuando hemos terminado el trabajo hemos <strong>de</strong> cerrarlo. Lafunción encargada <strong>de</strong> esta tarea es <strong>SDL</strong>_Quit(). En nuestro programa <strong>de</strong> ejemplo hemosusado la siguiente la línea atexit(<strong>SDL</strong>_Quit). La función atexit() toma como parámetro aotra función a la que llama justo antes <strong>de</strong> que finalice la ejecución <strong>de</strong>l programa. En nuestrocaso, antes <strong>de</strong> que finelice nuestro programa (ya sea por un error o porque el usuario forzó lasalida) se llamará a la función <strong>SDL</strong>_Quit(). Una <strong>de</strong> las particularida<strong>de</strong>s <strong>de</strong> atexit() es que lafunción a la que <strong>de</strong>be llamar no tiene que tener parámetros ni <strong>de</strong>volver nada.En el caso <strong>de</strong> que queramos finalizar sólo un subsistema <strong>de</strong> <strong>SDL</strong> usaremos la función<strong>SDL</strong>_QuitSubSystem(Uint32 flags). Por ejemplo, si quisiéramos <strong>de</strong>sactivar el subsistema <strong>de</strong>cdrom usaríamos la siguiente línea:25

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!