Valgono i fogli sprite? Una cerniera lampo è una buona alternativa?
Mi chiedevo se valesse la pena usare i fogli sprite. Sto creando un gioco con pixi.js e stavo pensando all'ottimizzazione, iniziando con il caricamento delle risorse. Al momento ho un array di tutti i file e uso PIXI.loader, ma so che non va bene perché farà una richiesta web per tutti i file che richiede molto tempo, quindi dovrei trovare un modo per caricarli in una richiesta web. La prima cosa a cui ho pensato è stato uno spritesheet, ma poi ho pensato "e se avessi zippato tutto e caricato con qualcosa come JSZip?" Sapevo che era già possibile (da questo progetto che carica le texture pixi da una zip) e ho elencato ciò che penso siano potenziali cose buone e cattive:
Comprimi punti buoni:
- Compressione che significa caricamento più veloce delle risorse
- Compressione significa dimensioni di costruzione più piccole quando si crea una build con l'elettrone
Zip punti negativi:
- Richiede il caricamento di una libreria separata, il che significa un aumento del tempo di caricamento e l'utilizzo di più RAM
- Richiede la decompressione in memoria, il che significa un aumento del tempo di caricamento
Aspetti positivi del foglio sprite:
- Non ha le intestazioni di tutti i singoli file di immagine
- È molto utilizzato quindi è una tecnica collaudata
Aspetti negativi del foglio sprites:
- Nessuna compressione (o almeno non paragonabile alla chiusura lampo)
- Più di una chiamata di rete a causa delle limitazioni del telefono che a volte impediscono ai file di dimensioni superiori a 2024x2024px, rendendo necessario dividere i fogli sprite
- Fori vuoti poiché tutte le immagini non hanno le stesse dimensioni e c'è quasi sempre un po 'di spazio lasciato nel foglio sprite, il che significa pixel inutili che sono ancora trasferiti sulla rete
Non sono uno sviluppatore molto esperto, quindi ho alcune domande:
- Mi sono perso un punto sopra?
- Valgono generalmente i fogli sprite?
- Quale tecnica di entrambe vale di più? Potrei fare entrambe le cose, ma prima voglio concentrarmi su uno e lasciare l'altro in una bella lista.
Risposte
Prima di tutto, esistono già formati di immagine con compressione. In particolare il formato PNG supporta la compressione senza perdita di dati. Inoltre, mentre è vero che prendere un mucchio di PNG e zipparli potrebbe essere un guadagno in termini di dimensioni, creare un atlante delle texture (spritesheet o simili) ridurrà anche le dimensioni in modo simile, in particolare se aumenti il livello di compressione PNG durante l'esportazione dell'immagine.
Pertanto, un atlante delle texture correttamente esportato ti darà i vantaggi elencati sulla compressione.
Questo significa che dovresti trasformare tutto in un unico foglio sprite? No. Dovresti mettere insieme le cose che dovrebbero essere caricate insieme.
Potrebbe anche valere la pena notare che i fogli sprite funzionano meglio quando le immagini sono piccole e di dimensioni regolari. Potrebbe essere che tu stia lavorando in uno scenario per il quale i fogli sprite non sono adatti.
È così? Non lo so. Fai esperimenti. Se non sei disposto a provare entrambe le tecniche per decidere, l'approccio ingegneristico suggerisce di utilizzare il metodo collaudato, e quello sarebbe un atlante delle texture.
Potresti anche essere interessato ad algoritmi di impacchettamento che possono ridurre al minimo i buchi nell'atlante delle texture.