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 Lsprite 5 píxeles en el eje a la <strong>de</strong>recha, mientras que addx(-10) lo moverá 10 píxeles ala izquierda.Seguramente, necesitaremos en algún momento <strong>con</strong>ocer información <strong>de</strong>l sprite, comosu posición o su tamaño. Los métodos getx() y gety() nos informarán sobre laposición en la que está el sprite. Los métodos getw() y geth() nos permiten <strong>con</strong>ocer eltamaño <strong>de</strong>l sprite en horizontal y en vertical respectivamente.El método siguiente es draw(), y realizá la función más básica <strong>de</strong> un sprite, es <strong>de</strong>cir,¡dibujarlo! Este método simplemente dibuja el sprite en la posición y <strong>con</strong> el frame actual.Toda la información necesaria (posición, frame, etc...) está almacenada en miembrosprivados <strong>de</strong>l objeto.Por último, el método colision() nos permite comprobar si el sprite ha colisionado<strong>con</strong> otro. Sólo hemos <strong>de</strong> pasarle como parámetro el sprite <strong>con</strong> el que queremoscomprobar la posible colisión.Implementando los spritesLa clase CFrame es la encargada <strong>de</strong> cargar un gráfico que posteriormente será vinculadoal sprite. Sus dos métodos son realmente sencillos.// Método para cargar el framevoid CFrame::load(char *path) {img=<strong>SDL</strong>_LoadBMP(path);}// Asignamos el color transparente al color rojo.<strong>SDL</strong>_SetColorKey(img,<strong>SDL</strong>_SRCCOLORKEY|<strong>SDL</strong>_RLEACCEL,<strong>SDL</strong>_MapRGB(img->format,255,0,0));img=<strong>SDL</strong>_DisplayFormat(img);// Metodo para liberar el framevoid CFrame::unload(){<strong>SDL</strong>_FreeSurface(img);}El método load() carga un archivo en formato BMP mediante la función <strong>SDL</strong>_LoadBMP.Nuestros sprites van a tener como color transarente el rojo (255,0,0). Como es habitual,recurrimos a la función <strong>SDL</strong>_SetColorKey para tal fin. La función <strong>SDL</strong>_DisplayFormat seencarga <strong>de</strong> realizar una <strong>con</strong>versión <strong>de</strong>l gráfico cargado al formato <strong>de</strong> la pantalla. Esto agiliza elproceso blitting al no tener que realizar <strong>con</strong>versiones cada vez que dibujamos el sprite.El método unload() libera los recursos ocupados por el frame utilizando la función<strong>SDL</strong>_FreeSurface.Fácil ¿no? Como pue<strong>de</strong> observar, esta clase no tiene ningún misterio.La clase CSprite es algo más gran<strong>de</strong>, pero igual <strong>de</strong> sencilla. Cuando creamos un sprite,tenemos que indicar el número <strong>de</strong> frames que <strong>con</strong>tendrá (o que podrá <strong>con</strong>tener comomáximo). Necesitamos hacer esto para reservar el espacio necesario en el array <strong>de</strong> frames.Vamos a colocar este código en el <strong>con</strong>structor <strong>de</strong> la clase.CSprite::CSprite(int nf) {sprite=new CFrame[nf];nframes=nf;<strong>con</strong>t=0;}79

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

Saved successfully!

Ooh no, something went wrong!