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 LJoysticks.Seguramente te estarás preguntando por qué no se <strong>con</strong>trola el joystick <strong>de</strong>s<strong>de</strong> elsubsistema <strong>de</strong> eventos. Yo también me lo pregunto y ciertamente no encuentro una buenarazón para ello. Probablemente la razón sea que existen multitud <strong>de</strong> sistemas diferentes <strong>de</strong>joysticks en el mercado, quizás los suficientes para justificar un módulo separado. Encualquier caso, gracias a este subsistemas, nuestros juegos podrán ser <strong>con</strong>trolados medianteun joystick.CD-ROM.Efectivamente, <strong>SDL</strong> nos permite el acceso a todas las funciones <strong>de</strong>l CD-ROM. Lasposibilida<strong>de</strong>s son muy atractivas. Por ejemplo, si distribuyes tu juego en CD, éste pue<strong>de</strong> teneruna pista sonora y reproducirla en background mientras el jugador juega. Interesante ¿no?Threads.Sin duda sabes lo que es la multitarea. Pue<strong>de</strong>s ejecutar múltiples programas al mismotiempo. La i<strong>de</strong>a <strong>de</strong> thread (hilo en español) es similar. Son pequeños procesos que se lanzansimultáneamente, pero que pertenecen a un mismo programa padre. Por ejemplo, un juegopue<strong>de</strong> tener un thread encargado <strong>de</strong> reproducir una música y otro que va calculando laposición <strong>de</strong> los enemigos. Cada sistema operativo nos ofrece su propia forma <strong>de</strong> trabajar <strong>con</strong>los threads, pero <strong>SDL</strong> se jacta <strong>de</strong> ofrecer una API multiplataforma para manejo <strong>de</strong> threads.Timers.Es posible que alguna vez hayas probado alguno <strong>de</strong> esos juegos antiguos (muy antiguos)<strong>de</strong> cuando los PC corrían a 8 ó 16Mhz en tu flamante Pentium IV. Si el juego no había tenidoen cuenta la velocidad <strong>de</strong>l or<strong>de</strong>nador, probablemente lo verás funcionar tan rápido que serásincapaz <strong>de</strong> jugar. Si el juego hubiera estado bien diseñado, habría tenido en cuenta estaeventualidad, ya que no todos los or<strong>de</strong>nadores funcionan a la misma velocidad. <strong>SDL</strong> nosofrece acceso a timers <strong>de</strong> alta resolución (o al menos <strong>de</strong> una resolución aceptable) para hacerque nuestro juego trabaje a la misma velocidad <strong>con</strong> in<strong>de</strong>pen<strong>de</strong>ncia <strong>de</strong> la máquina en la que seejecute.Extensiones.A<strong>de</strong>más <strong>de</strong> estos subsistemas básicos, <strong>SDL</strong> tiene ciertas extensiones que nos harán lavida más fácil, como son <strong>SDL</strong>_image que permite trabajar <strong>con</strong> múltiples formatos <strong>de</strong> archivosgráficos, <strong>SDL</strong>_ttf para manejo <strong>de</strong> fuentes true type, <strong>SDL</strong>_net para acceso a re<strong>de</strong>s TCP/IP y<strong>SDL</strong>_mixer que mejora sustancialmente el subsistema <strong>de</strong> audio <strong>de</strong> <strong>SDL</strong>.Trabajando <strong>con</strong> <strong>SDL</strong>Es hora <strong>de</strong> ponerse manos a la obra y poner a trabajar al compilador.Antes <strong>de</strong> llamar a cualquier función <strong>de</strong> <strong>SDL</strong>, hay que inicializarla y para ello se utiliza lafunción <strong>SDL</strong>_Init(Uint32 flags). Veámoslo <strong>con</strong> un ejemplo.#inclu<strong>de</strong> #inclu<strong>de</strong> "<strong>SDL</strong>.h"main(){if (<strong>SDL</strong>_Init(<strong>SDL</strong>_INIT_AUDIO|<strong>SDL</strong>_INIT_VIDEO)< 0) {printf("No se pue<strong>de</strong> iniciar <strong>SDL</strong>: %s\n",<strong>SDL</strong>_GetError());24

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

Saved successfully!

Ooh no, something went wrong!