Zitat von
himitsu:
Die Richtung stimmte schon.
Delphi-Quellcode:
Schuss1[j].Free;
for x:=j to high(Schuss1)-1 do
Schuss1[x] := Schuss1[x+1];
SetLength(Schuss1,length(Schuss1)-1);
Außer daß du an der falschen Stelle angefangen hast.
j-1 ist ja der Schuß vor dem zu Löschenden ... du hattest also den Falschen entfernt
und wenn j der 1. Schuß ist (j=0), dann hast du den Grund für die Berreichsüberschreitung.
Der Fehler trifft in diesem Fall ebenfalls auf.
so siehts jetzt aus:
Delphi-Quellcode:
procedure TForm1.SchussTimerTimer(Sender: TObject);
var j,i,x : integer;
collide : boolean;
begin
collide := false;
for j := High(Schuss1) downto 0 do
begin
for i := 1 to 21 do
begin
if (kollision(Schuss1[j],i) = true) and (Invader[i].Visible = true) then
begin
collide := true;
Invader[i].visible := false;
Schuss1[j].Free;
for x:=j to high(Schuss1)-1 do
Schuss1[x] := Schuss1[x+1];
SetLength(Schuss1,length(Schuss1)-1);
end
end;
if collide = false then
Schuss1[j].top := Schuss1[j].top - 10;
end;
end;