Hallo, ich habe ein Spiel geschrieben. Bestandteil davon ist es, dass Sterne durch den Bildschirm "fliegen", von rechts nach links.
Dafür verwende ich einen Timer mit dem Namen "Move"
Hier der Quellcode des Timers:
Delphi-Quellcode:
procedure TForm1.MoveTimer(Sender: TObject);
var i,Y,X,S,X1,X2,Y1,Y2:integer;
begin
//Neue Positionen der Sterne bestimmen
for i:=0 to Length(Sterne) do
begin
Sterne[i].x:=Sterne[i].x-Speed[i];
if Sterne[i].x<0 then
begin
//Neuen Stern generieren, wenn der alte aus dem Bildschirm ist
Y:=Random(Succ((Screen.height-20)-20))+20;
X:=Screen.width+20;
S:=Random(Succ(5-2))+2;
Sterne[i].x:=X;
Sterne[i].y:=Y;
Speed[i]:=S;
end;
end;
//Sterne neu zeichnen
with Raum.Canvas do
begin
Brush.color:=clblack;
FillRect(Rect(0,0,Screen.width,Screen.height));
Brush.color:=$00A4FFFF;
for i:=0 to Length(Sterne) do
begin
//Nur um die Übersicht nicht zu verlieren:
X1:=Sterne[i].x;
Y1:=Sterne[i].y;
X2:=Sterne[i].x+Speed[i];
Y2:=Sterne[i].y+Speed[i];
//Stern zeichnen
Ellipse(X1,Y1,X2,Y2);
end;
end;
end;
Die Sterne werden auf einem TImage dargestellt, Name: Raum
Um die Sternpositionen und ihre Geschwindigkeit zu speichern, werden sie in FormCreate zufällig generiert und in zwei Arrays gespeichert:
Sterne: Array of TPoint;
Speed: Array of Integer;
Je nach Geschwindigkeit wird auch die Größe erstellt (Schnelle Sterne sind nah und deshalb größer).
Bis gerade hat alles geklappt, doch jetzt bekomme ich BEIM SCHLIEßEN des Programms eine Fehlermeldung:
Invalid Pointer in Project1.exe in ...
Ungültige Zeigeroperation
Der Timer läuft jedoch einwandfrei durch. Wenn ich den Timer jedoch aus dem Programm rausnehme, indem ich ihn nicht aktiviere, kommt keine Fehlermeldung.
Wo liegt das Problem?
Liebe Grüße!