Ya que animamos a alucard es hora de hacer un terrenito donde pueda caminar para eso utilizaremos una imagen que encontre en la web y que la rompi en varios pedacitos con gimp
Ahora renombramos las figuras para que queden con nombre de tamaño 6, ejem: t01.png, t11.png, etc
t41 = t04
Muy bien ahora el codigo de la clase principal
import pulpcore.image.CoreImage; import pulpcore.scene.Scene2D; import pulpcore.sprite.FilledSprite; import static pulpcore.image.Colors.*; /** * * @author Julio Cachay */ public class mapaBloque extends Scene2D { // Nombre de las fotos String bloques[] = {"t01.png", "t02.png", "t03.png", "t04.png", "t05.png", "t06.png", "t07.png", "t08.png", "t09.png", "t10.png", "t11.png", "t12.png", "t13.png", "t14.png", "t15.png", "t16.png", "t17.png", "t18.png", "t19.png", "t20.png"}; //este sera la forma de llenar, es la relacion de imagenes String mapa[] = {"t01t02t03t04t05t06t07t08t09t10t11t12t13t14t15t16t17t18t19t20" + "t01t02t03t04t05t06t07t08t09t10t11t12t13t14t15t16t17t18t19t20"}; mapa mapaTile; @Override public void load() { // agregamos un cielo azul add(new FilledSprite(rgb(185, 209, 255))); // creamos el mapa mapaTile = crearMapa(bloques, mapa, 24, 72); //adherimos el mapa add(mapaTile); } private mapa crearMapa(String[] bloques, String[] mapa, int Tilewidth, int Tileheight) { //cargar las imagenes de bloque CoreImage[] ImagenesBloque = new CoreImage[bloques.length]; int i = 0; while (i < ImagenesBloque.length) { ImagenesBloque[i] = CoreImage.load("res/" + bloques[i]); i++; } //Creamos un mapa con los bloques i = 0; int y = 0, m = 0; int filMapa = mapa[0].length(); int colMapa = mapa.length; CoreImage[][] mapaTile = new CoreImage[filMapa / 3][colMapa]; while (i < filMapa - 3) { y = 0; while (y < colMapa) { //Comparamos las primeras letras del mapa con las del bloque // ejem. t01 == t01, si lo es la imagen cargada se almacena en el mapa String str = mapa[y].substring(i, i + 3); int k = 0; int index = 0; while (k < bloques.length) { if (bloques[k].substring(0, 3).contentEquals(str)) { index = k; break; } k++; } mapaTile[m][y] = ImagenesBloque[index]; y++; } m++; i = i + 3; } return new mapa(mapaTile, Tilewidth, Tileheight); } @Override public void update(int elapTime) { } }
Ahora el codigo del mapa
import pulpcore.Stage; import pulpcore.animation.Fixed; import pulpcore.image.CoreGraphics; import pulpcore.image.CoreImage; import pulpcore.sprite.Sprite; /** * * @author Julio Cachay */ public class mapa extends Sprite { private CoreImage[][] MapaTile; private int TileWidth; private int TileHeight; private int numTilesLargo; private int numTilesFilas; public final Fixed vistaX = new Fixed(this); public final Fixed vistaY = new Fixed(this); public mapa(CoreImage[][] MapaTile, int Width, int Height) { //lo colocamos a la izquierda y en la parte de abajo super(0, Stage.getHeight() - Height, Stage.getWidth(), Stage.getHeight()); this.MapaTile = MapaTile; this.TileWidth = Width; this.TileHeight = Height; numTilesLargo = MapaTile.length; numTilesFilas = MapaTile[0].length; // para manejo de posiciones exactas en píxeles. pixelSnapping.set(true); } //El largo del mapa public int getMapWidth() { return TileWidth * numTilesLargo; } //El alto del mapa public int getMapHeight() { return TileHeight * numTilesFilas; } //se mueve? public boolean isScrolling() { return vistaX.isAnimating() || vistaY.isAnimating(); } @Override public void update(int elapsedTime) { super.update(elapsedTime); vistaX.update(elapsedTime); vistaY.update(elapsedTime); } //sobreescribimos la funcion drawSprite para dibujar el mapa @Override protected void drawSprite(CoreGraphics g) { int y = vistaY.getAsIntFloor(); for (int j = 0; j < numTilesFilas; j++) { int x = vistaX.getAsIntFloor(); for (int i = 0; i < numTilesLargo; i++) { g.drawImage(MapaTile[i][j], x, y); x += TileWidth; } y += TileHeight; } } }
Con este codigo tendremos esto:
le baje la calidad para que pese menos, pueden ver como quedo y bajar el codigo aqui
Nos vemos