martes, 31 de julio de 2012

Error generating final archive: Debug Certificate expired

Me ha salido esto hoy, mira tú, un error que todavia no habia visto.
La solución es cargarse el certificado que se usa para debug.
En mi caso (Windows 7) estaba en:
C:\Users\fran\.android\debug.keystore

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());
}
}

Ejemplo de nivel:


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.