SESIN 2
Este documento se publica bajo los trminos de la licencia Creative Commons 3.0 Atribucin No
Derivativos Espaa. Significa que eres libre de usar y distribuir este documento, incluso con fines
comerciales, siempre que indiques el autor de este documento y que lo distribuyas tal cual, sin
modificar su contenido.
Este tipo de estructura es visual en tanto que podemos distinguir en nuestro cdigo fuente
cada una de las filas y de las columnas de nuestro mapa.
Cada fila del mapa se guarda en una lnea de cdigo distinta. Estas filas se
corresponden con la coordenada Y de nuestro mapa.
Dentro de cada fila, las comas separan cada columna del mapa. Estas columnas se
corresponden con la coordenada X del mismo.
int[][][] MAPA = {
{9,7}, {9,7},},
{9,7}, {9,7},},
{9,7}, {9,7},}
A partir de este momento, slo tenemos que cambiar las coordenadas que nos interesen por
valores reales que contengan imgenes de verdad. Lo dems queda a cosa nuestra.
Ahora simplemente tenemos que crear el procesador, para lo cual recorreremos una a una las
posiciones del mapa de imgenes, y para cada una de esas posiciones importaremos un sprite
sacando sus dimensiones del mapa lgico. Recorrer el array es tan fcil como:
for(int x = 0; x < imagenes.length; x++) {
for(int y = 0; y < imgenes[0].length; y++) {
}
}
Como se ve, terminaremos por reducir el proceso de dibujar el mapa a dibujar de manera
individual cada sprite en pantalla. Tenemos que usar las matemticas para obtener las
coordenadas X e Y en las que dibujaremos cada uno de esos sprites. Este puede ser el proceso
ms complicado de todos en algunos casos.
Son origenx y origeny las coordenadas de la esquina superior izquierda del mapa.
Todos los sprites se dibujarn a la derecha (coordenada X mayor) de origenx, y
debajo (coordenada Y mayor) de origeny.
Son ancho y alto las dimensiones de cada uno de los sprites. Todos los sprites tienen la
misma dimensin. En este sentido, ancho y alto actuarn como constantes para
indicar el ancho y el alto de cualquier sprite.
Sea x la posicin horizontal del sprite con el que estamos trabajando. Este nmero est
comprendido entre 0 y el tamao horizontal del array de imgenes menos uno.
Sea y la posicin vertical del sprite con el que estamos trabajando. Este nmero est
comprendido entre 0 y el tamao vertical del array de imgenes menos uno.
Cada sprite deber ser dibujada en una posicin que est basada en (origenx, origeny), pero
que est desplazada un nmero de pxeles con respecto a esas coordenadas de origen.
Supongamos la coordenada horizontal. Este desplazamiento ser proporcional a la coordenada
horizontal del tile dentro del mapa. As, el tile que est en la posicin x=0 no tendr que estar
desplazado, pero el tile de la posicin x=1 tendr que estar desplazado hacia la derecha un
nmero de pxeles para aparecer junto al tile anterior, y as sucesivamente. Adems, para que
el dibujo se vea correctamente, ese nmero de pxeles que se desplaza deber ser igual al
tamao horizontal de un tile. De este modo, al poner un tile junto a otro, se vern sin espacios
entre medias ni sin solapar otros tiles.
Por lo tanto, la posicin final ser pixelx = origenx + desplazamiento, y ese
desplazamiento ser proporcional al nmero de tile con el que estemos trabajando en esa
coordenada y a las dimensiones del tile, es decir, desplazamiento = x * ancho.
Podemos aplicar esa misma idea a la coordenada vertical, y obtendremos que las coordenadas
a las que dibujaremos cada tile son:
float coordx = origenx + x * ancho;
float coordy = origeny + y * alto;
Con esto queda terminado nuestra clase de mapa. Podemos crear una instancia de esta clase
mapa en nuestro estado de juego y podremos comprobar su funcionamiento:
public class Estado extends BasicGameState {
private Mapa mapa;
public void init(GameContainer container, GameState state)
throws SlickException {
mapa = new Mapa();
}
public void draw(GameContainer container, GameState state,
Graphics g) throws SlickException {
mapa.draw(0, 0);
}
public void render(GameContainer container, GameState state,
int delta) throws SlickException {}
public int getID() { return 0; }
}