Fondo animado con Libgdx
Estoy creando un sistema de interfaz de usuario para un juego de Android que tendrá una gran área de fondo (hasta 4096×4096) en la que los menús se pueden colocar en cualquier lugar dentro de esa pantalla y una cámara volará a esa ubicación cuando se necesita un menú diferente. En lugar de tener una gran imagen estática, me gustaría poder animar esto ligeramente. Lo que me gustaría saber es cómo hacerlo eficientemente sin retrasar el dispositivo. Estos son los métodos que he venido hasta ahora, pero tal vez hay algo mejor ..
1) Tenga 3 capas 4096×4096 estáticas separadas para el fondo, 1 es el cielo, uno es el terreno, uno es cosas como las nubes y los árboles. Cada capa se coloca una encima de la otra con una ligera diferencia en el espacio Z para dar un poco de efecto de paralaje cuando la cámara se mueve.
- ¿Por qué Xamarin.Forms es tan lento al mostrar algunas etiquetas (especialmente en Android)?
- Android: nesting FrameLayouts - ¿cuál es la sobrecarga de rendimiento exacto?
- ¿Cómo puedo restar estas listas más rápido?
- Hilo de fondo que bloquea la interfaz de usuario durante varios segundos
- Consejos sobre dibujo de alto rendimiento en Android
2) Tener una imagen de fondo estacionaria grande, con una capa encima de eso con los sprites específicos individuales de las nubes, de los árboles y de otras cosas que se deben animar. Creo que esta podría ser la ruta más eficiente, ya que puedo elegir no animar partes que no están a la vista, pero también limitará la reutilización ya que cada objeto diferente tendrá que colocarse manualmente en el espacio. Mi objetivo es poder simplemente cambiar los activos y poder tener un nuevo juego.
3) Tiene 1 capa de fondo grande con varios marcos que juega casi como un video. Siento que este será el peor en el rendimiento (cargando varios 4096×4096 cuadros y dibujando uno diferente 30 veces por segundo), pero me daría la escena exactamente como lo quiero directamente de After Effects. Dudo que este es incluso factible, no sólo por el dibujo, pero el espacio de almacenamiento en dispositivos Android sólo para el menú de la interfaz de usuario no permitiría varios marcos de 6 MB.
¿Alguno de estos está en la dirección correcta? He visto algunas preguntas similares hechas pero ninguno encajaba lo suficientemente cerca de lo que necesitaba (Un fondo grande y móvil que no está hecho de azulejos).
Cualquier ayuda es apreciada.
- Dispositivos Android que no tienen JIT
- ¿Están las opiniones "GONE" infladas?
- Rendimiento de Scala para Android
- Obtención de velocidad mediante el API de ubicación de Google Play
- ¿Cómo probar el rendimiento de una aplicación de Android?
- En una aplicación para Android, ¿cuándo se cargan los recursos en la memoria?
- Cuál es la ventaja de usar el espacio sobre la vista
- Android sólo descarga imágenes que son visibles en horizontalScrollView
En cuanto a su pregunta se etiqueta para Android, yo recomendaría la segunda solución.
La razón principal es que la solución # 1 y # 3 implican cargar numerosas texturas 4096×4096. Cálculo rápido: tres texturas de 32 bits con esa resolución utilizarían al menos 200 MB de RAM de vídeo. Esto significa que puede descartar de inmediato una gran cantidad de dispositivos Android.
Por otro lado, la solución # 2 implicaría sólo dos grandes texturas: una gran imagen de fondo estacionaria, y un atlas de textura que contiene sprites específicos de nubes, árboles … Esta solución es realmente más amigable con la memoria, y dará lugar a la misma Estética.
TL; DR: las 3 soluciones funcionan muy bien, pero sólo el # 2 se ajusta a un dispositivo incorporado