¿Cómo hago que la resolución / densidad de mi juego libGDX sea independiente? ¿Hay alguna manera de especificar los tamaños de imagen como "absolutos" independientemente de la densidad subyacente?
Estoy haciendo un juego para niños muy simple; solo un montón de sprites que se muestran en la pantalla y algo de texto para los menús (menú de opciones principalmente). Lo que quiero saber es: ¿cómo hago que la resolución de mis sprites / fuentes sea independiente? (Los he incluido en mis propias clases para facilitar las cosas).
Como es un juego simple para niños, no necesito preocuparme por el "área jugable" del juego; Quiero usar la mayor cantidad de espacio posible en la pantalla.
Lo que estoy haciendo en este momento, lo que parece súper incorrecto, es simplemente crear imágenes adecuadas para grandes resoluciones y luego reducirlas (o raramente, subirlas) para que se ajusten al tamaño de la pantalla. Esto parece funcionar bien (en la versión de escritorio), incluso con mapeo lineal en mis texturas, pero las resoluciones más pequeñas se ven feas.
Además, esto parece ir en contra de los "píxeles independientes del dispositivo" (DP) de Android. ¿O tal vez me estoy perdiendo algo y libGDX ya se encarga de esto de alguna manera?
¿Cuál es la mejor manera de abordar esto? Encontré este enlace; ¿Es esta una buena forma de resolver el problema ?: http://www.dandeliongamestudio.com/2011/09/12/android-fragmentation-density-independent-pixel-dip/
Menciona cómo controlar las imágenes, pero no menciona cómo especificar los tamaños de fuente / imagen, independientemente de la densidad.
Respuestas:
Como puede leer la densidad del dispositivo y representar las fuentes durante el tiempo de ejecución en libgdx, utilizo esta solución para lograr un tamaño de fuente independiente de la densidad:
fuente
Para lograr esto en libgdx, puede usar la "cámara ortográfica" allí asigna el tamaño que desea usar, y en cada resolución puede ver todas sus imágenes escaladas a ese tamaño (uso el 800X480 porque es la pantalla más grande en Android ) y funciona bien :)
fuente
Creo que los "píxeles independientes del dispositivo" de Android son solo una medida para clasificar los dispositivos, y en realidad no están disponibles como píxeles renderizables. Para que no te pierdas ninguna infraestructura mágica de resolución de DPI. Hasta donde entiendo el estado del arte aquí, has descubierto todas las opciones. Hay dos enfoques básicos para tratar con diferentes dispositivos:
Por supuesto, puede hacer una combinación de los dos (elegir una imagen más o menos precisa y luego escalarla), o usar diferentes enfoques para diferentes elementos de su interfaz de usuario (por ejemplo, imágenes preexistentes para fuentes / texto y escalado dinámico para el juego) sprites).
Lo que su juego específico está tratando de hacer realmente puede hacer una diferencia en qué enfoque tiene más sentido. Por ejemplo, si tiene un menú en pantalla, querrá asegurarse de que los botones sean un múltiplo razonable del tamaño de la punta de un dedo (por lo que el botón siempre es fácil de presionar, pero no es más grande de lo necesario en dispositivos grandes como tabletas). Alternativamente, si está tratando de construir un juego de rompecabezas en el que desea asegurarse de que todo el rompecabezas sea visible a la vez, deberá escalar los elementos para que quepan en la pantalla (por ejemplo, con un tic-tac-toe juego tal vez le gustaría que cada elemento use aproximadamente 1/3 de la pantalla).
Creo que para cosas como las fuentes que tienen muchos detalles finos, querrás tener una variedad de imágenes renderizadas previamente con texto, y luego elegir la mejor coincidencia. Por lo tanto, los botones pueden cambiar su forma / tamaño relativo de un dispositivo a otro, pero generalmente siempre se verán bien.
Echa un vistazo a los juegos para principiantes de Android de Mario Zerchner para una discusión de los problemas y algunas soluciones. Tenga en cuenta que Mario es el autor de libGDX, por lo que el enfoque del libro refleja el de libGDX (tenga en cuenta que no son uno a uno, el libro cubre la escritura de una biblioteca similar a libGDX, pero no libGDX en sí).
fuente
Una forma de hacerlo es definir una relación de aspecto mínima y una relación de aspecto máxima para su juego. Estas serán las proporciones que desea apoyar. Luego debe usar una ventana gráfica que ahora se proporciona en libGdx. La ventana escalará su mundo según la configuración que proporcione.
Existen varios tipos de ventanas gráficas y debes seleccionar la que sea más adecuada para tu juego.
Puede usar ExtendViewport por ejemplo y fijar su altura o ancho y calcular el otro. Luego debe asegurarse de que todos los gráficos se puedan ver en su relación de aspecto mínima. La vista ampliada ampliará sus gráficos a la relación de aspecto correcta sin distorsionar los gráficos. Sin embargo, ExtendViewport funciona agregando espacio adicional a su mundo, por lo que también debe proporcionar gráficos para fondos, por ejemplo, que cubran toda su extensión de relaciones de aspecto cubiertas, cuando el mundo es más pequeño que su relación de aspecto máxima, la parte adicional de los gráficos no ser mostrado.
fuente