Ma suggestion
Trop de petits fichiers PNG ajouteront beaucoup de charge réseau (en raison de la taille des requêtes HTTP, mais aussi de l'en-tête PNG et, ce qui est probablement encore plus important, de l'impossibilité de compresser efficacement). D'autre part, un très grand fichier PNG présente les inconvénients qu'il faut du temps pour le charger et qu'il doit rester en permanence en mémoire (40 mégaoctets pour 10 000 tuiles) dans une partie continue de la mémoire.
Je recommande le moyen terme: plusieurs PNG de taille raisonnable, par exemple 1024 dalles de format 32 × 32 . Peut-être regroupés par thème (par exemple, un PNG avec des tuiles de forêt, un avec des tuiles de montagne, un autre avec des tuiles de ville - je ne connais pas le thème de votre jeu, mais vous en avez l'idée).
Note sur l'efficacité du cache
En raison de l’efficacité de l’accès à la mémoire, vous ne devriez jamais trop élargir vos feuilles d’image. La fusion de carreaux à partir d'une image 128 × 8192 sera toujours plus rapide que celle obtenue à partir d'une image 8192 × 128.
Imaginez que vous souhaitiez supprimer la première tuile d’une image 8192 × 128. Par souci de simplicité, supposons qu'un pixel soit un octet. Les deux premières lignes de pixels sont disposées de cette façon (les cellules contiennent leur numéro d’octet en mémoire):
┌────┬────┬───┬────┬──────────┬─────┐
│ 0 │ 1 │...│ 31 │ .... │ 8191│ 1st line of pixels: bytes 0 to 8191
├────┼────┼───┼────┼──────────┼─────┤
│8192│8193│...│8223│ .... │16383│ 2nd line of pixels: bytes 8192 to 16383
├────┼────┼───┼────┼──────────┼─────┤
│ .. │ .. │...│ .. │ .... │ ... │
Ainsi, afin de supprimer la première ligne du premier titre, le moteur de navigation récupérera des octets 0
dans31
. Pour effacer la deuxième ligne , il va récupérer les octets 8192
à8223
, et ainsi de suite jusqu'à la ligne où 32e octets 253952
à253983
sont récupérés.
Le nombre total d'octets traités sera de 32 × 32. Cependant, la plage de mémoire totale est supérieure à 253984 octets. Sur un processeur moderne, cela signifie 32 ou 33 stalles de cache . En revanche, si l’image était au format 128 × 8192, la plage de mémoire ne serait que de 4000 octets, ce qui signifie pas plus de deux stalles de cache.
Les processeurs actuels étant très rapides, les stalles de cache coûtent très cher et bloquent les calculs. Donc, utiliser une image 128 × 8192 au lieu d'une image 8192 × 128 est potentiellement 8 fois plus rapide, du moins en théorie. En pratique, cela dépendra de la manière dont le fondu est mis en oeuvre: il est possible que le moteur sous-jacent divise lui-même les images en mosaïques pour réduire le problème.
Ce n'est pas facile à expliquer correctement et je ne m'attendais pas à beaucoup élaborer. J'espère que ça a du sens!