le problème peut être que tes objets ont tous des tailles différentes, et que tu peux en mettre n'importe ou. C'est pour un jeu vidéo donc?
il existe d'autres possibilités de stockage qui permettent de charger et decharger plus "amicalement":
mettons que tu reserves de base un enaaaaurme bout de mémoire (pas trop hein
)
ton "monde" (la liste des objets) est divisé ensuite en couches:
la couche 0 est ce qui est visible en permanence
la couche 1 est divisée en case; elle n'est chargée que si on est proche de cette case
la couche 2 itou, cases plus petites.
Les lods les plus precis sont donc dans la couche 2, la couche 0 contient les objets les plus imprécis
lorsque la caméra est en un point x, y: tu charges (de base) la couche 0, et tu la mets tout au debut de ta memoire
tu determines ensuite sur quelle "case" tu es, tu risques d'avoir besoin des cases alentours évidemment (donc mettons 9 cases de couche 1: la case sur laquelle tu es et les 8 cases autour). Tu les charges. Puis de même avec les 9 cases de couche 2.
Lorsque tu te deplaces, tu devras donc decharger certaines cases de couche 1 et 2 pour les remplacer par d'autres. L'astuce est alors souvent de faire des cases qui ont pratiquement le même cout; alors on vide une case dont on a pas besoin et on la remplace par une case dont on va avoir besoin.
Ca peut etre lourd si tu changes en permanence de case genre tu te promènes juste sur la frontière. Dans ce cas, il se peut que tu doives decharger les cases dont tu n'as plus besoin mais... que tu ne charge pas toujours les cases dont tu vas avoir besoin, tant que tu n'es pas sur que tu vas vraiment t'en servir.
Il faut donc gérer tes données par batch, pas individuellement, et tu charges tout d'un coup, pas un par un. Et pour ce faire tu peux utiliser les mêmes blocs de mémoire.
Si une case ne tient pas en mémoire c'est que la case est trop gourmande, il faut la retravailler (je part du principe d'un jeu vidéo ou on a le choix, hein, donc si tu n'as pas le choix pour une raison x ou y ca va être cotton).
Partager