Ok Ich hab jetzt mit Threads hin und her experimentiert und bin zu folgendem Ergebnis gekommen:
Delphi-Quellcode:
Unit1:
procedure TForm1.FormCreate(Sender: TObject);
begin
An := TAnim.Create(Self);
An.Parent := self;
Level1 := Level.Create(false);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if An <> nil then
An.DoMove; // verschiebt die Animation um ein Paar Pixel Richtung Ziel
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Level1.Klick(Point(x,y));
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Level1.running := false;
end;
end.
... und das Level (ausgelagert im Thread)
Delphi-Quellcode:
unit2:
procedure Level.Execute;
begin
{ Place thread code here }
running := true;
repeat
Application.ProcessMessages;
until running = false;
end;
procedure Level.Klick(APoint: TPoint);
begin
if Walkto(APoint) then showmessage('Angekommen')
else showmessage('Ziel geändert');
end;
function Level.WalkTo(APoint: TPoint): Boolean;
begin
synchronize(Ziel(APoint));
result := false;
repeat
Application.ProcessMessages;
if (Form1.An.Ziel.X <> APoint.X) or (Form1.An.Ziel.Y = APoint.Y) then
exit;
until (Form1.An.Left = APoint.X) and (Form1.An.Top = APoint.Y);
result := true;
end;
procedure Level.Ziel(APoint: TPoint);
begin
Form1.An.Ziel := APoint;
end;
end.
bekomme dabei aber die Fehlermeldung "Incompatible Types 'TThreadMethod' and 'Procedure'"
Bin ich auf der richtigen Spur? Wie gehts weiter? Was ist der Unterschied zwischen TThreadMethod und Procedure?