Je développe un jeu 2D et j'ai beaucoup de sprites. J'ai utilisé des animations et des modèles 3D pour effectuer un rendu en 2D, pour leur donner un aspect "Fallout" ou "Diablo". C'est aussi plus facile que de dessiner à la main, lol.
J'ai déjà dû réduire le framerate à 15 images par seconde, ce qui était le plus bas que je pouvais abaisser sans leur donner un aspect saccadé. Cependant, c'était triste à cause de la fluidité incroyable de 24 images.
Il y a deux raisons pour lesquelles j'ai fait cela:
1) Réduisez l'espace disque dur. Moins il y a d'images, plus mon jeu sera petit.
2) Réduisez la consommation de RAM. Moins il y a d'images à charger, plus j'ai de chances d'éviter les problèmes de gonflement de ma limitation de RAM.
Cependant, s'il y avait un moyen de compresser les images dans l'espace disque dur et la RAM, je le ferais. Je l'ai testé auparavant, et la plupart ne reçoivent aucun changement de qualité lors du passage de RGBA8888 à RGBA5555 et seulement un petit coup lors de la conversion en RGBA4444 dans mon programme TexturePacker. Je ne le fais pas actuellement, car SFML semble utiliser la même quantité de mémoire quel que soit le type d'image .PNG dont il s'agit. J'ai cherché à le charger différemment, mais je n'ai rien trouvé sur le sujet.
J'ai beaucoup lu sur la façon de gérer les jeux vidéo 2D. Le consensus est écrasant: emballez vos Sprites dans une texture plus grande pour de grandes performances! J'ai donc emballé mes minuscules sprites dans une feuille de sprites beaucoup plus grande en utilisant TexturePacker.
Cependant, je prévois d'avoir 10 à 15 animations par personnage, 5 directions pour se déplacer et 15 à 40 images par animation (probablement une moyenne de 24). Avec 15 animations, 5 directions et une moyenne de 24 images par animation; Soit 1800 images individuelles par caractère. S'il est emballé dans une feuille de sprite, cela ne représente que 75 images à la place. (Une feuille de sprite par animation, par direction. 15 * 5)
Pour le seul grand boss du jeu, je ne peux pas utiliser de feuille de calcul et je dois programmer un moyen de charger simplement une image à la fois. Je ne sais pas encore si je peux le faire pour la performance.
Pour les personnages, je les ai déjà emballés dans une feuille de sprites. Pour un seul personnage qui se promène, cela semble fonctionner la plupart du temps, même si parfois cela cale. Cependant, j'attribue cela à mon code mal conçu qui permute les textures au lieu de précharger toutes les textures pour ce personnage.
Si je devais précharger les textures, cela a du sens pour les feuilles de sprite. J'imagine que c'est une mauvaise idée de précharger 1800 minuscules images pour chaque personnage.
Cependant, j'imagine que les diffuser dans et hors de la mémoire une par une serait extrêmement rapide, donc je n'aurais besoin que d'une seule image en mémoire à la fois. Cela ne signifierait-il pas qu'à un moment donné, je ne ferais que consommer par Ko quelques caractères au lieu de 45 + Mo?
J'imagine que cela tuerait mes performances, car le streaming devrait être incroyablement rapide (15 images entrant et sortant de la mémoire et du rendu, par seconde) et bien que les images soient très petites, il serait peut-être préférable de charger des feuilles de sprites de caractères en mémoire à la place. Mais je devrai quand même coder un système de rendu de type image unique pour mon plus grand personnage.
J'ai expérimenté, mais ce n'est pas un processus simple. Surtout étant donné que je travaille sur d'autres parties du moteur de jeu qui ne traitent pas actuellement avec les graphismes.