Informations sur les arrays

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 4 nov. 2008 à 23:11
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 5 nov. 2008 à 11:02
Bonjour, juste avant de faire le labyrinthe, je voulais plutôt faire un petit jeu 2D, inspiré du jeu Dogfight (voir RockSolidArcade sur Google pour jouer au jeu flash), mais en mieux (enfin je vais essayer ...).

Bon voilà j'ai posé le contexte.

Mais, je viens de penser à un truc, pendant que je codais mentalement le jeu : je vais utiliser les tableaux dynamiques : seulement, si un élément du tableau vient à ne plus être utilisé, il risque d'y avoir une consommation de mémoire excessive.
Je précise que je n'ai pas besoin d'emplacements fixes, l'emplacement de l'élément dans le tableau importe peu.
Ce qui me gêne plus particulièrement, c'est, par exemple, sur un tableau de 800 éléments, si il y en a 250 qui viennent à ne plus être utilisés à un stade de la partie.
Je me retrouverais avec 250 éléments inutiles, mais qui, comme ils sont présents, doivent être gérés en mémoire.
Existe-il une fonction de slicing de tableau, pour extraire un élément du tableau dynamique, décaler tous ceux après l'élément extrait, d'un cran vers le début, et redimensionner l'array avec SetLength ?
Genre Delete ... plutôt que de la coder soi-même ?
J'ai déjà essayé ceci mais je reçois une violation d'accès ...

procedure SliceArray(Element: Index; var AnArray: array of TMyArray);
Var
 I: Integer;
begin
 for I := Length(AnArray) downto Element do
  AnArray[I - 1] := AnArray[I];
 SetLength(AnArray, Length(AnArray) - 1);
end;

Quelqu'un sait pourquoi ceci ne marche pas ?
Le principe est simple : on décale chaque élement depuis celui que l'on veut écraser, d'un cran vers le début, et on redimensionne. Mais, erreur ...

Merci d'avance, et à bientôt pour le jeu ;-) j'espère que vous ne serez pas déçus.

Cordialement, Bacterius !
A voir également:

3 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
5 nov. 2008 à 09:23
Bonjour,


peut-être aussi jeter un oeil sur le composant TObjectList :

Utilisez TObjectList pour stocker et maintenir une liste d'objets. TObjectList fournit des propriétés et méthodes pour ajouter, supprimer, réorganiser, trouver, trier et accéder à des objets. Si la propriété OwnsObjects est initialisée à true (par défaut), TObjectList contrôle la mémoire de ses objets, libérant un objet lorsque son indice est réaffecté; lorsqu'il est supprimé avec la méthode Delete, Remove ou Clear; ou lorsque l'instance de TObjectList est elle-même détruite.

cantador
0
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
5 nov. 2008 à 10:08
+1 avec cantador ,j'ai déjà utilisé TObjectList et ça te facilite grandement la vie (cfr mon dernier jeu)
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
5 nov. 2008 à 11:02
Hmm tiens je n'avais pas pensé à ObjectList, je vais y jeter un coup d'oeil, et sûrement l'appliquer  et comme ça ce weekend je pourrai faire mon jeu sans problèmes
Et je garde ton lien en mémoire WhiteHippo

Cordialement, Bacterius !

PS : pour ObjectList je vais m'inspirer de la façon dont tu les traite Nicolas
0
Rejoignez-nous