Te propondría que pruebes TexturePacker
- simplemente puede arrastrar y soltar todas sus imágenes y empacarlas
- puede aplicar una compresión diferente, por ejemplo, usar PNG indexados que consumen mucha menos memoria, hasta un 70% menos en comparación con un archivo PNG estándar
- puede crear un archivo de datos que contenga el nombre + posición de cada uno de sus edificios
- la versión gratuita ya puede ser suficiente para crear las hojas de sprites para usted
¿Utiliza un marco de desarrollo de juegos como AndEngine, Cocos2d-x o LibGdx? => Ninguno
¿Necesita cargar todas sus imágenes al mismo tiempo? Parece que te encontrarás con problemas masivos de RAM en los dispositivos de destino.
Actualización: Snake me envió algunas imágenes. Como prometí, no los haré públicos aquí, así que yo mismo creé algo de arte para demostrar cómo reducir el uso de memoria.
En la imagen original, solo una parte de la imagen se estaba moviendo. Coloqué un pájaro en una casa para demostrar esto:
Básicamente, empaquetar la animación completa en una hoja es una gran pérdida de memoria. Debe dividir las partes estáticas y móviles:
Estático:
Anim01:
Anim02:
Mantenga la posición original del pájaro en las imágenes . Por eso hay tanto espacio vacío arriba. Necesita esto para alinear la animación.
Ahora arrastre las imágenes en TexturePacker y seleccione los siguientes parámetros
- Formato de datos: hash JSON (o XML si lo prefiere)
- TrimMode: Trim (esto crea rectángulos)
- Formato de píxel: 8 bits INDEXADO: para crear PNG de 8 bits (aproximadamente un 70% menos de memoria)
- Permitir rotación: falso
- Ingrese un nombre de archivo para los datos
El resultado es que ahora obtienes 2 archivos: la hoja de sprites y un archivo de descripción JSON.
"house_anim_01.png":
{
"frame": {"x":351,"y":246,"w":110,"h":79},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":67,"y":8,"w":110,"h":79},
"sourceSize": {"w":400,"h":400},
"pivot": {"x":0.5,"y":0.5}
},
Las partes importantes son frame y spriteSourceSize .
El marco le brinda la ubicación del sprite original en la hoja de sprite.
spriteSourceSize le ofrece el desplazamiento para dibujar la imagen, las partes de la imagen que quedan fuera debido al recorte:
Una simple rutina de dibujo de pseudocódigo se ve así:
drawImage(spritename, posX, posX)
{
data = sheetData[spritename]
offsetX = data.spriteSourceSize.x
offsetY = data.spriteSourceSize.y
frameX = data.frame.x
frameY = data.frame.y
width = data.frame.w
height = data.frame.h
screen.draw(sheetImage, posX+offsetX, posY+offsetY, width, height)
}
Es posible que deba ajustar el cálculo de desplazamiento según el punto de pivote / origen en su sistema de gráficos. La rutina anterior supone un sistema de coordenadas cuyo origen está en la parte superior izquierda.
Luego simplemente dibuja la casa en 2 pases:
draw("background", 100, 100);
draw("anim_01", 100, 100);
No tiene que preocuparse por los desplazamientos, ya que las imágenes ya están alineadas.