Avatar de l’utilisateur
par purpleunicorn
#26991 Il s'agit blog post. Pour lire le message original, s'il vous plaît cliquez ici »

Dans les logiciels comme C2 ou C3, il est facile de mettre plein de ressources graphiques de grande taille dans son jeu, mais malheureusement, on est là pour créer un contenu interactif qui va demander de base du travail à la machine, et qui peut tourner sur du matériel très variable (de PC gamer à mobile pas cher, en passant par plein d'autres choses), et il y a une notion assez importante qui n'est pas évidente mais qui doit être maîtrisée, la gestion de la mémoire.

Comprenez bien que le sujet à été simplifié pour être lu par des gens qui n'ont pas forcément de notions, et donc les informations ne sont pas faites pour être un cours sur la mémoire.
La mémoire, définition approximative
La mémoire vive ou RAM est un espace de stockage temporaire de données qui est accessible très rapidement par l'appareil, elle se vide si elle n'est pas alimentée en électricité, elle est bien plus petite en taille que un disque dur (4 Go pour mon ordinateur pour information), et toutes les applications peuvent y accéder, y compris le système d'exploitation de l'appareil, il faut donc comprendre que toute la mémoire disponible en théorie n'est pas allouée spécifiquement à l'usage de votre jeu.
Notion de données non compressées
On peut se dire que 4 Go de mémoire, c'est beaucoup, la vérité est plus complexe, comme l'intérêt de la mémoire est sa vitesse de lecture, on ne va pas ralentir le processus en devant décompresser les ressources à chaque lecture, c'est pourquoi elles sont décompressées avant d'être stockées, une image bitmap non compressée pèse bien plus lourd sur le disque que la même image compressée en .png, car chaque information est disponible directement en lecture (de la même manière que l'information "je possède tout les tomes d'une collection de livre" équivaut à dire "je possède le tome 1, le tome 2, le tome 3, etc... d'une collection de livre" mais en plus court, la deuxième vous dit directement les tomes exacts) un ordinateur ne sait pas lire de données compressées directement, et il accède très souvent à la mémoire, c'est pourquoi il est important de bien avoir cette notion en tête : les ressources sont décompressées avant d'être mises en mémoire.
Données superflues mais existantes
Certaines données vont paraître insignifiantes mais vont prendre de la place, une bordure transparente de 300 pixels autour de votre image par exemple, on pourrait croire que c'est transparent et que donc que ça ne prend pas de place, or comme les données ne sont pas compressées, ces pixels transparents sont de l'information, et prennent donc la même place que des pixels colorés, ça monte très vite la mémoire. De même avoir des ressources en 500 par 500 pixels pour les afficher en moyenne à une taille de 20 par 20 pixels sur l'écran est une utilisation de la mémoire assez abusive.
Gestion de la mémoire par C2 et C3
Ces logiciels vont gérer intérieurement la mémoire sans que vous n'ayez quoique ce soit à faire, en mode WebGL (celui qui nous intéresse), les ressources non présentes dans un layout sont déchargées entre la fin du layout précédent et le début de celui-ci, celles restant présentes sont encore en mémoire, toujours dans ce laps de temps, les ressources présentes dans le layout mais pas encore en mémoire sont chargées, ce procédé prend un certain temps. Les musiques et autres ressources sonores doivent manuellement être déchargées avec le système d'évènement.
Risques encouru en cas de saturation de la mémoire par le jeu
Si votre jeu venait à être trop gourmand en mémoire, plusieurs choses peuvent se produire, aucune n'est positive:

  • Swapping (c'est à dire utilisation du disque principal pour stocker et utiliser les ressources), ce qui va rendre votre jeu aussi lent que possible
  • Plantage de la page web
  • Crash du navigateur
Suggestions pour économiser de la mémoire

  • Recycler des images identiques dans les animations d'un sprite (Construct va les identifier et n'utiliser que un exemplaire une fois le jeu exporté)
  • Utiliser la fonction Crop de l'éditeur d'image pour supprimer les bords transparents lorsque ils ne sont pas nécessaires en un clic
  • Ne pas utiliser de graphismes en résolution ultra haute si ce n'est pas justifié
  • Garder un oeil en bas de C2 et voir si l'indication Memory use apparaît, et si oui, si la valeur est raisonnable