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
