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 !