Tutorial videojuegos: Trucos en Andengine

juego android tutorial programacion videojuegos

En esta sección del tutorial de desarrollo de videojuegos voy a poner los trucos que solucionan problemas que me he encontrado en Andengine.

Retardo y congelación en el juego

Durante unos segundos en el juego parece que todo va "a saltos", como si perdiera los FPS. Esto me costó mucho averiguar por qué ocurría. En mi caso ocurría al principio del juego, pero puede ocurrir en cualquier momento. Esto es porque usamos textos pero no hemos precargado los caracteres, entonces cuando durante el juego le decimos a Andengine que pinte un texto, tiene que cargar las letras una a una. Si luego le pedimos que pinte otras letras y son distintas, volvera a ir a saltos. Esto ocurre por ejemplo si pintamos la puntuación. Para solucionar esto hay que precargar todas la letras posibles que pueda tener nuestros textos:

// Siendo fuenteSmall nuestra fuente
// En este caso solo queremos precargar numeros
fuenteSmall.getFont().prepareLetters("0123456789".toCharArray());

// En este caso queremos que se precarguen letras y numeros
fuenteSmall.getFont().prepareLetters("abcdefghijklmnopqrstuvwxyz0123456789".toCharArray());

Como podéis ver simplemente tenemos que saber qué letras, números y signos vamos a pintar, para preparar la fuente.

Retardo y congelación en el juego (II)

A veces lo que hemos comentado antes no es el problema del retardo. A veces es derivado de que no estamos usando un pool. Para ello os recomendamos que leáis la otra parte del tutorial: Pool de sprites

Alpha en un sprite no funciona

Cuando creamos un sprite a veces queremos que sea semitransparente. Para ello modificamos su alpha

Sprite coche = new Sprite(........);
coche.setAlpha(0.5f);

Si hacemos simplemente lo de arriba veremos que el alpha no funciona... Yo me volví loco porque todo está correcto pero no funciona. Esto ocurre porque nos falta settear en el sprite la función de mezcla. Esto se hace así:

// Llamamos aa setBlendFunction, de esta forma funcionara el alpha
coche.setBlendFunction(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
coche.setAlpha(0.5f);

Una vez hayamos llamado al setBlendFunction nuestro sprite ya nos saldrá con el alpha correcto

Votos totales: 15