Hallo,
mit eurer Hilfe habe ich inzwischen einiges an meinem Projekt geschafft. Ich brauchte mich eine Weile nicht melden,kam ich gut vorwärts . Nun gibt es aber einen Fehler in meinem Programm, der mir schon seit Anfang an zu schaffen macht, den ich aber immer vor mir hergeschoben hab. Folgendes Problem: In meinem Spiel werden die Positionen und Eigenschaften von z.B. Gegnern in Arrays (of Record) gespeichert. Wenn nun einer von ihnen stirbt (Dat[X].Alive=False) soll die Zeile gelöscht werden und alle anderen um Platz zu sparen "eins aufrücken". Grundsätzlich funktioniert das auch, aber wenn mehrere Gegner gleichzeitig ins Jenseits befördert werden entstehen Fehler. Hier meine bisherige Technik:
Delphi-Quellcode:
X:=0;
For I:=1 To Gegneranzahl+X DO
Begin
if not Gegner[I-X].alive then
Begin
if ((I-X)<>Gegneranzahl) THEN
Begin
Gegner[I-X].Wert:=Gegner[Gegneranzahl].Wert;
Gegner[I-X].Funktion:=Gegner[Gegneranzahl].Funktion;
Gegner[I-X].PosX:=Gegner[Gegneranzahl].PosX;
Gegner[I-X].PosY:=Gegner[Gegneranzahl].PosY;
Gegner[I-X].breite:=Gegner[Gegneranzahl].breite;
Gegner[I-X].hoehe:=Gegner[Gegneranzahl].hoehe;
Gegner[I-X].Farbe:=Gegner[Gegneranzahl].Farbe;
Gegner[I-X].Maxzeit:=Gegner[Gegneranzahl].Maxzeit;
Gegner[I-X].Alter:=Gegner[Gegneranzahl].Alter;
[...............]
End;
X:=X+1;
Gegneranzahl:=Gegneranzahl-1;
End;
End;
In einigen Tutorials hab ich "Swap Values" kennengelernt, damit könnte man das ganze sicher etwas vereinfachen; ich konnte aber nichts dazu finden, was hieran falsch sein könnte. Hat jemand vielleicht eine Idee ?
Alternativ: Könnte ich nicht theoretisch auch einfach den letzten mit demjenigen, der gelöscht werden soll Tauschen (es sei den selbiger ist der letzte) und dann den letzten löschen?
Danke schoneinmal!