Single Tech Games

single klsa12

Tips de programacion en Android y LibGDX

¡Hola Gente! ¿Cómo les fue esta semana? ojala que muy bien y recuerden ¡menos pecado y más trabajo!, esta semana he querido postear algo de código, les voy pasar un poco de Android y LibGDX, cositas geniales que incrementaran su número de ratings 😉

Detección Automática de Idiomas
Todos tenemos algo en común aquí, aparte de feos, todos hablamos español, y tenemos que utilizar eso como ventaja competitiva frente a otras apps, entonces lo primero que les recomiendo es que traduzcan su app, y se los digo porque mi juego ya dejo de ser alimentado por los países europeos, ahora es México el que más descarga mi juego, entonces para detectar el idioma de su dispositivo es un código bien simple:

String idioma = Locale.getDefault().getLanguage();
if (idioma.equals("es"))

El resultado de esta función serán 2 letras, “es” si es español, “en” si es ingles y así sucesivamente, la lista completa la pueden encontrar aquí.
Envían el resultado al constructor del juego en LibGDX y Walla! detectaron el idioma del dispositivo.
Fuentes
Esto es algo que recién he aprendido, ¡Las fuentes que utilicen deben soportar diferentes idiomas! existen el alfabeto latino, cirílico, griego, árabe, hebreo, etc. y si utilizan fuentes, estas deben ser capaz de escribir en esos idiomas.
Para saber que idiomas reconoce su fuente bajen el programa BitMap Font Generator, vayan a Options – Font Settings – escojan una letra y a la derecha les debe aparecer la cantidad de idiomas que reconoce, este programa les permitirá generar Fonts para LibGDX también, aprendan a usarlo que está muy bueno.
bitmap font generator
Además, para trabajar con letras distintas al latino deben cambiar en Eclipse una opción, van a Window-Preferences-General-WorkSpace y donde dice “Text file encoding” eligen “Other” y lo cambian por UTF-8 (Se pierde la ñ y signos como ¡ o ¿)
Pantalla de Cargado
Quizás esto fue lo más difícil de hacer, el problema de mi juego en dispositivos no muy potentes es que demoraba una eternidad en salir las imágenes y hasta que cargara todo a veces parecía que la pantalla se quedaba en negro y solo con Ads, eso no es una buena publicidad, entonces aprendí a hacer una pantalla de cargado, en LibGDX es bastante simple, lo difícil es cambiar todo para que cargara por partes.
Este el código de cargado de imágenes

//Inicializamos Asset Manager
private AssetManager manager;
-
manager = new AssetManager();
-
//Cargamos los Texture Atlas
manager.load("data/dataA/pack", TextureAtlas.class);
manager.load("data/dataB/pack", TextureAtlas.class);
manager.load("data/dataC/pack", TextureAtlas.class);
manager.load("data/dataD/pack", TextureAtlas.class);
//asi verificamos si ya termino de cargar un textureAtlas
if(manager.isLoaded("data/dataA/pack")) {
//Si ya esta listo
atlasA = manager.get("data/dataA/pack", TextureAtlas.class);

El tema es que tuve que dividir en diferentes carpetas las imágenes según estas se iban usando, por ejemplo en mi juego hay 6 pantallas, la primera es el logo, la segunda es la elección entre los 3 juegos, la tercera es el menú del juego elegido, la cuarta es la elección de países, la quinta es el tutorial y el juego mismo, la sexta es la pantalla que te sale si ganaste o perdiste, entonces según cada pantalla necesitaba las imágenes para funcionar, las dividí en diferentes carpetas, lo bueno de todo esto es que mientras alguien está por ejemplo buscando su equipo, por atrás el juego está cargando todas las imágenes restantes, en paralelo, me falta mejorarlo mucho todavía porque cargo imágenes que no son necesarias y que consumen memoria, pero eso lo voy a ir solucionando en versiones siguientes, para mas información sobre como usar AssetManager aquí.
Y bueno hice un posteo de casi todo lo que hice para esta versión número 4 del juego, aparte de las imágenes que ya les comenté antes.
Suerte!
pd-> Necesito su ayuda gente! necesito terminar unas encuestas para mi tesis, es sobre mi videojuego, si lo han jugado o lo planean jugar 🙂 por favor llenen esta encuesta

0 0 votes
Article Rating
Subscribe
Notify of
guest
2 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
Atlantis Road

Hola, muchas gracias por compartir esta información. Precisamente estos días estoy trabajando en todo lo relacionado con la carga de recursos (Assets). En un principio lo estaba haciendo mediante la carga directa de los archivos. Pero llega un momento en que es necesario contar con otro sistema, ya que las imágenes y sonidos tardan algo en cargarse. El AssetManager gestiona muy bien esas tareas. En mi caso, estoy tratando de cargar al principio, mientras se abre la pantalla del logo, los recursos que se usan más frecuentemente y ciertas cosas, como el tutorial, se cargan sólo cuando el usuario pulsa el botón para abrir esa pantalla.
Lo de la detección del idioma también está muy bien.
Por cierto, ¿Cómo estás trabajando la parte de las resoluciones de pantalla y, sobretodo, la relación de aspecto. Yo empecé diseñando para una resolución de pantalla de 480×320, que es la que recomendaban en muchos sitios por ser quizás la más usada. Pero me di cuenta, que en otras pantallas más grandes, con esa resolución las imágenes se veían bastante mal. Entonces decidí aumentar el tamaño de las imágenes, aunque la relación de aspecto (480/320=1,5) la sigo manteniendo. Así, las imágenes mejoran notablemente; aunque, claro, la carga de las mismas es más lenta. En algunos sitios recomiendan crear un “set” de imágenes para varias relaciones de aspecto. Ya que dependiendo de esta, las imágenes podrían verse deformadas (alargadas o acortadas). Pero esa solución es bastante laboriosa. Yo de momento opté por mantener la relación de aspecto 1.5 , aunque luego en la pantalla real del dispositivo esta se “acomode” usando unas franjas negras a los lados.
También me gustaría que trataras en algún momento el tema de la publicidad. Cómo programarla y dónde es mejor colocarla, qué compañías son mejores (Admob, Leadbolt… ) Los términos: CTR, ECPM, fill rate, etc. Aunque he leído un poco de eso, todavía no he profundizado en el tema y siempre es bueno conocer la opinión de gente que ya tiene experiencia como es tu caso.
Saludos… 🙂