Apuntes de programación de juegos en Android con libGDX
martes, 31 de julio de 2012
lunes, 30 de julio de 2012
Acceder a una imagen pixel por pixel.
Para cargar la imagen y comprobar el color de cada pixel he usado un pixmap. Hay que tener cuidado
con el formato de la imagen ya que si es RGB8888 tenemos tres bytes por pixel y si es RGBA8888 hay cuatro.
Este es el codigo:
public static void loadTexture (String levelfile)
{
try
{
Pixmap pixmap = new Pixmap(Gdx.files.internal(levelfile));
altura = pixmap.getHeight();
anchura = pixmap.getWidth();
tilefactory = new TileFactory();
tiles = new Tile[anchura][altura];
java.nio.ByteBuffer bb = ByteBuffer.allocateDirect(altura * anchura * 3);
Pixmap.Format format = pixmap.getFormat();
bb = pixmap.getPixels();
for (int i = 0; i < altura * anchura; i++)
{
int r = (bb.get() & 0xff) / 255;
int g = (bb.get() & 0xff) / 255;
int b = (bb.get() & 0xff) / 255;
//bb.get();
if (format == Pixmap.Format.RGBA8888)
{
int a = (bb.get() & 0xff) / 255;
}
if ((r != 0 && g != 0 && b != 0)); // es negro puro
procesaSegunColor(r, g, b, i, anchura, altura);
}
pixmap.dispose();
}
catch(Exception ex)
{
Gdx.app.log("error", ex.toString());
}
}
jueves, 26 de julio de 2012
Tile Maps (mapas de mosaicos) y cargadores de niveles III
El método para crear los niveles del juego que estoy usando al final no es ninguno de los anteriores :P
La idea es crear una imagen en la que cada pixel de ella represente un mosaico en el juego.
Compruebo el color de cada pixel y con un switch creo el tile correspondiente a ese color.
La gracia de esto es que echando un vistazo al la imagen que representa el nivel sabes como esta
estructurado. Lo malo que tiene es que es mas laborioso crear los niveles con el programa de dibujo pixel a pixel.
domingo, 22 de julio de 2012
Tile Maps (mapas de mosaicos) y cargadores de niveles II
Se me ocurrío meter cada nivel entre dos caracteres '<' y '>' y dentro meter
las tiles especiales.
Ejemplo:
<10,1,0; 20,1,0; 30,2,1>
Esto sería en la posición (x=10, y =1) hay una tile de tipo 0
Esto sería en la posición (x=20, y =1) hay una tile de tipo 0
Esto sería en la posición (x=30, y =1) hay una tile de tipo 1
Meter en cada linea de un fichero de texto un nivel de estos y luego parsearlo.
¿Como? Algo así(el codigo esta mal y ya no lo uso):
// Devuelve un array de strings con los todos los niveles
private void ParseFichero(String nivel)
{
char[] canivel = nivel.toCharArray();
char[] ca_aux = new char[World.WORLD_WIDTH];
int indexca_aux = 0;
int estado = 1;
listaniveles = new ArrayList<String>();
for (int i = 0; i < World.WORLD_WIDTH; i)
{
char c = canivel[i];
switch (c)
{
case ST_BEGIN_LEVEL:
{
estado = ST_IN_LEVEL;
ca_aux = new char[World.WORLD_WIDTH];
indexca_aux = 0;
}
break;
case ST_END_LEVEL:
{
ca_aux[indexca_aux] = '\0';
listaniveles.add(new String(ca_aux));
}
break;
case ST_IN_LEVEL:
break;
}
}
}
public void ParseLevel (int numnivel)
{
String nivel = listaniveles.get(numnivel).toLowerCase().trim();
String[] astrtiles = nivel.split("\\;");
obstaculos = new ObstaculoNormal[astrtiles.length];
for (int i = 0; i < astrtiles.length ; i)
{
int x = Integer.parseInt(tiledataseparado[0]);
int y = Integer.parseInt(tiledataseparado[1]);
int type = Integer.parseInt(tiledataseparado[2]);
ObstaculoNormal obstaculo = new ObstaculoNormal(x, y, type);
obstaculos[i] = obstaculo;
}
}
sábado, 21 de julio de 2012
Tile Maps (mapas de mosaicos) y cargadores de niveles I
Mi primer intento de crear un cargador de niveles tipo tilemap has sido usando ficheros de texto
Como la estructura de los niveles sería siempre parecida y el "suelo" sería la
fila de mas abajo del nivel, pensé guardar sólo los obstaculos y tiles especiales.
Otra manera de hacerlo con ficheros de texto seria incluir todas las tiles en el fichero.
Por ejemplo:
. : Tile vacia
# : Tile especial
_ : Tile suelo
Y crear un fichero de texto algo así:
..........
...#......
__________
y esto sería un nivel de 10 x 3 tiles. Pero lo ví muy coñazo para definir los niveles, así que
volví a mi idea de definir los niveles de otra manera.
Como la estructura de los niveles sería siempre parecida y el "suelo" sería la
fila de mas abajo del nivel, pensé guardar sólo los obstaculos y tiles especiales.
Otra manera de hacerlo con ficheros de texto seria incluir todas las tiles en el fichero.
Por ejemplo:
. : Tile vacia
# : Tile especial
_ : Tile suelo
Y crear un fichero de texto algo así:
..........
...#......
__________
y esto sería un nivel de 10 x 3 tiles. Pero lo ví muy coñazo para definir los niveles, así que
volví a mi idea de definir los niveles de otra manera.
Etiquetas:
configuracion,
libGDX,
mosaicos,
nivel,
tiles
Suscribirse a:
Comentarios (Atom)


