Programación de Juegos para Android

Programación de Juegos para Android 09: Regiones

42 videos

238 minutos

Para hablar de regiones, lo que he hecho ha sido meter una segunda imagen en la carpeta assets llamada pinchos. Estos son los pinchos con los que vamos a tropezar y con los que si tropezamos, morimos. Como veis es una imagen curiosa porque los pinchos tienen esta altura pero yo he hecho la imagen más alta. ¿No te sale la imagen recortarla mejor? Me explico, creo que se ve que hay muchos píxeles que no utilizo. Esto lo he hecho por una razón,

y es que el tamaño de la imagen no es casual que sea 128x128. En libGDX, al igual que en otros juegos que usen OpenGL, las texturas se cargan mejor, si su tamaño es una potencia de 2, por ejemplo 128, que es 2^7. En este caso cuando haya cargado minijoe.png, no he tenido en cuenta esto y debo tener en cuenta que hay una penalización por usar imágenes que no sean una potencia de 2, por ejemplo, 73 no es un número que puedas obtener si elevas 2

a algo, ni 80. Lo que debe hacer por dentro OpenGL es tratarlo de una forma especial para que lo parezca, pero esto lleva una penalización. Como pinchos.png ocupa lo que debe ocupar, 128x128 o 128x64, o 64x32… siempre una potencia de 2, se va a cargar mucho más rápido y se va a procesar más rápido. Pero esto tiene un problema, porque mi imagen tiene un área que no uso, porque sólo me interesan los píxeles usados por la imagen.

Debo pedirle a libGDX que no sólo me cargue la imagen, sino que la recorte. Y para este tipo de utilidades viene bien contar con la ayuda de las regiones. Le digo a libGDX, “a ver, cógeme esta imagen, y quédate con esta porción de aquí”, y es lo que voy a hacer. Cargo mi pinchos.png. Antes de que se me olvide le hago un dispose. Y ahora lo que tengo que hacer es crear mi región para decirle donde debe recortar. Esto lo hago declarando un objeto de tipo

TextureRegion llamado regionPinchos, y ya lo tengo listo para construir, como regionPinchos = new TextureRegion. Le digo qué textura quiero usar y cuáles son sus dimensiones. Le pido que recorte pinchos en un punto concreto. En (x,y) le tengo que decir dónde quiero recortar, y en (width,height) cómo de alto quiero que sea la imagen. Aquí hay un problema porque os he dicho que en libGDX el juego tiene y=0 abajo. Pero en las imágenes,

el eje y empieza arriba, es decir, que si recorto una imagen, el (0,0) se encuentra arriba, y que si queremos que empiece a recortar abajo tenemos que tener en cuenta esto. Esto es 0, esto es 128, esto es una escala. Ya he hecho las cuentas por vosotros, y tengo que recortar en y=64. Le voy a pedir que corte desde (0,64), 0 porque es en la izquierda y 64 porque es la mitad. Y que me recorte algo que mida 128 de ancho, que es el ancho,

y 64 porque es la otra mitad de la imagen.Simplemente le digo que recorte 0, 64, 128, 64. Y con esto ya la tengo preparada. Ahora pensaréis que la tenemos que disposear, pero sorpresa, no tiene dispose. Porque después de todo las regiones no tienen textura, son elementos separados que le paso como parámetro, por lo que se entiende que si hago un dispose() a la textura, la región deja de funcionar. Otra advertencia,

no intentéis usar una imagen que hayáis disposeado, porque puede dar problemas. Ni tampoco uséis una región, que tenga una imagen disposeada, porque puede dar también muchísimos problemas. Por ejemplo, ahora que tengo esto listo… o de hecho voy a quitarlo, porque no voy a abusar del SpriteBatch, pero voy a pedirle que dibuje mi región, regionPinchos. Android Studio marca estos métodos de gris para que veas que no los puedes usar.

Le pido que lo dibuje en (250, 0). Aquí si que empieza a contar abajo el y=0 e irá hacia arriba. Así que se verá abajo a la derecha. Es casi tan grande los pinchos como el personaje, voy a tener un problema para hacer el salto luego.Podéis hacer todo tipo de pruebas: continuar diciendo donde queréis que dibuje las cosas. Haced la prueba, dibujad un montón de imágenes, haced un bucle for para que veáis

que es eficiente mostrar imágenes si usáis un Spritebatch. De hecho, ya digo que fuera del SpriteBatch es complicado conseguir que lo dibuje. En parte porque tendríais que usar métodos puros de OpenGL como bind. Es complicado trabajar con OpenGL, en parte por eso queremos usar libGDX, hace muy sencillo trabajar con imágenes. Hay más tipos de imágenes, y cuando empecemos con Scene2D veréis que hay Sprites. Pero es un buen inicio.

Vamos a centrarnos en otro tema importante, que es la entrada.

Si quieres enterarte de los nuevos cursos, suscríbete. No habrá spam, prometido :)

Sobre el autor

foto de jotajotavm
José Javier Villena

jotajota pa los amigos y jota pa los de más cnfianza.

Bio Seria: Analista-Programador en diferentes lenguajes. Tutor PREMIUM de reconocidas plataformas de nivel mundial como CodigoFacilito. Redactor de artículos para Cristalab. Mi canal de YouTube está patrocinado por la editorial ANAYA y LaTostadora. Me gusta explicar con detalle y poner varios ejemplos para que no queden dudas.

Bio Molona: Me presento :) soy informatico, ni frostis d hardware pero muy muxo de programacion, friki a medias o del to segun el dia. Me gusta programar, muxo. Manejo varios lenguajes y tdo lo ke sepa lo comparto x amor al arte. Este no es mi trabjo pero lo ago mejor y con +ganas y calidad que si lo fuera, x eso mismo, xq para mi es divertido. Solo spero al menos algo de agradecimientO!! ;)

Dios, qe gusto haber escrito este parrafo cm me a dao la gana sin pensar en ortografia ni tildes ni historias!!!!!