Problemas comunes con el tamaño del paquete en Cocos Creator
Al desarrollar con Cocos Creator 3.8.x para WeChat Mini Games, es frecuente encontrarse con que el tamaño del paquete final supera el límite de 4 MB. Este exceso se origina por varios factores clave que deben gestionarse cuidadosamente para lograr un equilibrio entre calidad y rendimiento.
Factores que inflan el volumen del paquete
- Texturas de alta resolución sin comprimir: Un archivo PNG de 2048x2048 en formato RGBA8888 puede ocupar aproximadamente 16 MB.
- Archivos de audio con alta tasa de bits: Los formatos WAV sin procesar pueden consumir decenas de megabytes por pista.
- Recursos y código redundante: Scripts de pruebas, assets desechados y módulos no utilizados se incluyen a menudo en la compilación final.
- Plugins y SDK de terceros: Algunas bibliotecas de análisis o anuncios añaden volumen innecesario.
- Fuentes tipográficas completas: Un archivo TTF para caracteres chinos puede superar los 10 MB.
La restricción de 4 MB en WeChat Mini Games se refiere al paquete inicial; el total puede llegar a 50 MB mediante subpaquetes o recursos remotos, lo cual aumenta los tiempos de carga.
Estrategias para comprimir y optimizar texturas
Las texturas representan comúnmente más del 60% del tamaño total del paquete. Optimizarlas es esencial para reducir el volumen.
Selección de formatos de compresión según la plataforma
| Plataforma | Formato recomendado | Pérdida de calidad | Reducción aproximada |
|---|---|---|---|
| Android | ASTC | Baja | 75%–90% |
| iOS | PVRTC | Media | 70%–85% |
| Web / Mini Games | ETC1/ETC2 | Media | 65%–80% |
| Compatible con múltiples plataformas | Crunched DXT | Alta | 50%–70% |
En Cocos Creator 3.8.x, puedes configurar la compresión de texturas desde el inspector de propiedades del recurso, seleccionando el formato adecuado para cada plataforma objetivo y ajustando la calidad (se recomienda iniciar con 85%).
Implementación de carga adaptativa de texturas
Es posible cargar texturas comprimidas de forma dinámica dependiendo del sistema operativo del dispositivo:
// Ejemplo de carga de textura según la plataforma
const rutaBase = 'assets/texturas/personaje';
let rutaFinal = '';
switch (sys.platform) {
case 'ANDROID':
rutaFinal = `${rutaBase}_astc`;
break;
case 'IOS':
rutaFinal = `${rutaBase}_pvrtc`;
break;
default:
rutaFinal = `${rutaBase}_etc2`;
}
resources.load(rutaFinal, Texture2D, (error, textura) => {
if (!error) {
spriteFrame.texture = textura;
}
});
Uso de atlas para agrupar texturas pequeñas
Combinar múltiples íconos y sprites en un solo atlas reduce el número de llamadas de dibujo y mejora el uso de memoria. Herramientas como TexturePacker permiten generar atlas en línea de comandos:
# Generar atlas con TexturePacker
texturepacker --format cocos2d --size-constraints POT --max-width 2048 --max-height 2048 --opt RGBA8888 --sheet atlas_salida.png
Ajuste inteligente de resolución de texturas
No todos los recursos requieren resolución máxima. Se recomienda establecer límites según el tipo de elemento:
- Elementos de interfaz de usuario: Máximo 1024x1024 píxeles.
- Fondos: Adaptar según la resolución de pantalla objetivo, generalmente 2048x2048 es suficiente.
- Texturas de modelos 3D: Calcular en función del tamaño de visualización esperado en pantalla.