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 LEn el diseño <strong>de</strong>l motor gráfico, siempre hay que llegar a un compromiso entre lacompatibilidad y el rendimiento. Hay tarjetas gráficas en el mercado <strong>con</strong> unas capacida<strong>de</strong>scasi sobrenaturales, pero que no son estándar, sin embargo, tampoco po<strong>de</strong>mos dar laespalda a los jugadores “profesionales” que equipan sus or<strong>de</strong>nadores <strong>con</strong> la últimaaceleradora 3D <strong>de</strong>l mercado.Sonido.El sonido es un aspecto al que, a veces, no se le da la importancia que merece. Tanimportante como unos buenos gráficos es un buen sonido. Tanto el sonido como la bandasonora <strong>de</strong> un juego son capaces <strong>de</strong> transmitir una gran cantidad <strong>de</strong> sensaciones al jugador, yeso es, al fin y al cabo, lo que se busca. Tanto como la calidad, la buena sincronización <strong>con</strong> loque va sucediendo en pantalla es <strong>de</strong> suma importancia.Comunicaciones.Cada vez más, los juegos en red van ganando en a<strong>de</strong>ptos. La comunicación se realizanormalmente sobre re<strong>de</strong>s TCP/IP. Esto nos permite jugar <strong>con</strong>tra otros jugadores situados ennuestra propia red local o en Internet. La comunicación entre máquinas se lleva a cabomediante la programación <strong>de</strong> sockets. Afortunadamente <strong>SDL</strong> nos provee <strong>de</strong> herramientasmuy potentes para este tipo <strong>de</strong> comunicación, aunque esto es algo que queda fuera <strong>de</strong>lalcance <strong>de</strong> este libro.Game loop.El “game loop” o bucle <strong>de</strong> juego es el encargado <strong>de</strong> “dirigir” en cada momento que tarea seestá realizando. En la figura 2.1. po<strong>de</strong>mos ver un ejemplo <strong>de</strong> game loop. Es sólo un ejemplo, yaunque más o menos todos son similares, no tienen por que tener exactamente la mismaestructura. Analicemos el ejemplo. Lo primero que hacemos es leer los dispositivos <strong>de</strong> entradapara ver si el jugador ha realizado alguna acción. Si hubo alguna acción por parte <strong>de</strong>l jugador,el siguiente paso es procesarla, esto es, actualizar su posición, disparar, etc... <strong>de</strong>pendiendo <strong>de</strong>que acción sea. En el siguiente paso realizamos la lógica <strong>de</strong> juego, es <strong>de</strong>cir, todo aquello queforma parte <strong>de</strong> la acción <strong>de</strong>l juego y que no queda bajo <strong>con</strong>trol <strong>de</strong>l jugador, por ejemplo, elmovimiento <strong>de</strong> los enemigos, cálculo <strong>de</strong> trayectoria <strong>de</strong> sus disparos, comprobamos colisionesentre la nave enemiga y la <strong>de</strong>l jugador, etc... Fuera <strong>de</strong> la lógica <strong>de</strong>l juego quedan otras tareasque realizamos en la siguiente fase, como son actualizar el scroll <strong>de</strong> fondo (si lo hubiera),activar sonidos (si fuera necesario), realizar trabajos <strong>de</strong> sincronización, etc.. Ya por último nosresta volcar todo a la pantalla y mostrar el siguiente frame. Esta fase es llamada “fase <strong>de</strong>ren<strong>de</strong>r”.Normalmente, el game loop tendrá un aspecto similar a lo siguiente:int done = 0;while (!done) {// Leer entrada// Procesar entrada (si se pulsó ESC, done = 1)// Lógica <strong>de</strong> juego// Otras tareas// Mostrar frame}Antes <strong>de</strong> que entremos en el game loop, tendremos que hacer un Múltiples tareas, comoinicializar el modo gráfico, inicializar todas las estructuras <strong>de</strong> datos, etc...10

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

Saved successfully!

Ooh no, something went wrong!