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 LUna vez que hemos terminado el diseño <strong>de</strong>l mapa, hemos <strong>de</strong> grabarlo selecionando saveas... <strong>de</strong>l menú file. Po<strong>de</strong>mos grabar el archivo <strong>con</strong> dos extensiones diferentes: .FMP y .MAP.El formato .FMP es el formato interno <strong>de</strong> Mappy, y el formato .MAP es nuestro formato (el que<strong>de</strong>finimos al editar el archivo MAPWIN.INI). Si lo grabamos exclusivamente en nuestroformato, es <strong>de</strong>cir .MAP, Mappy no será capaz <strong>de</strong> volver a leerlo, así que lo mejor es guardarloen formato .FMP y seguidamente volver a guardarlo en formato .MAP.Cargar el mapa <strong>de</strong>s<strong>de</strong> nuestro juego es sumamente sencillo. Las siguientes líneas realizanesta tarea.#<strong>de</strong>fine MAXMAP 400char mapa[401];FILE *f;// Carga <strong>de</strong>l mapaif((f=fopen("map.map","r")) != NULL) {c=fread(mapa,MAXMAP,1,f);fclose(f);}El array mapa, <strong>con</strong>tiene ahora toda la información <strong>de</strong>l mapa.ScrollingSe hace evi<strong>de</strong>nte que un mapa <strong>de</strong> 10x40 tiles no cabe en la pantalla. Lo lógico es quesegún se mueva nuestro avión por el escenario, el mapa avance en la misma dirección. Este<strong>de</strong>splazamiento <strong>de</strong>l escenario se llama scrolling. Si nuestro avión avanza un tile en la pantalla,hemos <strong>de</strong> dibujar el escenario, pero <strong>de</strong>splazado (offset) un tile. Desafortunamente, haciendoesto exclusivamente, veríamos como el escenario va dando saltitos, y lo que buscamos es unscroll suave. El siguiente fragmento <strong>de</strong> código cumple este cometido.#<strong>de</strong>fine MAXMAP 400indice=MAXMAP-100;indice_in=0;// movimiento <strong>de</strong>l scenario (scroll)indice_in+=2;if (indice_in>=64) {indice_in=0;indice-=10;}if (indice

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

Saved successfully!

Ooh no, something went wrong!