Programación: Andengine tiene retardo durante juego

tutorial programacion andengine

Comenzamos hoy con un breve tutorial de Andengine en el que explicamos como evitar que durante tiempo de ejecución de nuestros juegos android haya retardos. Pero...

¿Qué es Andengine?

AndEngine es un framework que nos ayuda en el desarrollo de videojuegos encargándose de cosas como la carga de texturas, animaciones, movimiento de sprites, etc para que sólo tengamos que preocuparnos de cómo desarrollar el juego. De esta forma, Andengine nos libra de programar las "primitivas". Básicamente hay dos versiones disponibles de Andengine:

  • Gles1: Esta versión es más antigua, no es recomendable porque por ejemplo la carga de texturas es manual dificultándose el proceso. 
  • Gles2: Esta versión es la más moderna y la que se usa más a menudo. Por ello recomendamos fehacientemente descargar esta.

Una vez explicado Andegine (suponemos que ya sabías qué era si has llegado a esta sección). Vamos al tema que nos ocupa

Evitar parpadeos, delays y retardos en la ejecución del juego:

Muchas veces cuando desarrollamos un juego en Andengine (y en otras librerías) nos encontramos con un problema grave: ocurre que mientras estamos en tiempo de ejecución, el juego disminuye el número de fps (Frames Por Segundo) y parece que se congela o da saltos. Esto nos puede traer dolores y quebraderos de cabeza porque a veces es muy complicado averiguar por qué ocurre esto. Nosotros vamos a ayudaros mostrándoos los principales motivos por los que ocurre esto

Carga de texturas y assets de forma errónea: 

Las texturas, sonidos, archivos de texto consumen tiempo de ejecución. Por ello si durante el juego nos empeñamos en cargar una imagen por pequeña que sea consumiremos tiempo de procesador y la mayoría de las veces ocurrirá que perdamos los FPS necesarios para que el juego vaya con fluidez. Una vez termina la carga volveremos a tener un buen número de FPS. 

Para solucionar esto hay que evitar SIEMPRE cargar nada en tiempo de juego, deberemos hacerlo siempre en el método de carga de recursos: onCreateResources. Con esto se cargarán las texturas al inicio del juego y así durante el juego no habrá retardos.

Carga de fuentes de forma errónea:

Este fallo es quizá el más dificil de descubir, yo tardé meses en darme cuenta de qué era lo que estaba haciendo mal. Normalmente cargamos las fuentes en el onCreateResources (esto es correcto) y luego las usamos en tiempo de ejecución. Lo que pasa es que AndEngine no carga realmente las texturas de las letras hasta que las necesita, entonces si durante el juego imprimimos una "A" en ese momento cargará el atlas de textura de la A, si seguidamente cargamos una "B" hará lo mismo. De esta forma cada letra requerirá leer de disco y nos bajará los FPS. 
Pero... como arreglamos esto? Pues es muy facil, si tenemos un objeto Font llamado mFont que es donde hemos inicializado la fuente TrueType deberemos decirle que "prepare" las letras. Para decirle que prepare las letras lo haremos en el onCreateResources de nuestra Activity. Es decir, quedaría así:

mFont.prepareLetters("0123456789".toCharArray());

Es importante que preparemos las letras que vayamos a usar y no más ni menos. En este caso como vamos a usar la fuente para imprimir una puntuación sólo necesitamos números.

Con esto precargaremos las letras que necesitaremos en el juego y luego en tiempo de juego no necesitará cargarlas de disco.

 

Esperamos os haya servido de utilidad!

 

Votos totales: 278