So etwas was du suchst, habe ich in meinem letzten Spiel implementiert, siehe
hier. Allerdings ist der bei dir angegebene 4. Schritt bei mir nicht vorhanden, das ausgewählte Sprite bleibt bei mir ausgewählt.
Hier mal in ganz groben Zügen wie das Ganze gelöst werden könnte (Das Sprite muss noch mit TSpielObjekt verknüpft werden):
Delphi-Quellcode:
TSpielObjekt =
class
private
FSelected: Boolean;
// Statt TPoint kann auch jeder andere Datentyp genommen werden, der min. X und Y Koordinate speichern kann
FPosition, FDestination: TPoint;
procedure SetSelection(Value: Boolean);
public
constructor Create;
destructor Destroy;
procedure Move(Destination: TPoint);
procedure Update;
published
property Selected: Boolean
read FSelected
write SetSelection;
end;
...
procedure TSpielObjekt.SetSelection(Value: Boolean);
begin
FSelected := Value;
{
Hier noch zusätzliche Sachen einfügen, wie in der GUI anzeigen oder ähnliches
Wenn das nicht benötigt wird, dann folgende Zeile
property Selected: Boolean read FSelected write SetSelection;
in
property Selected: Boolean read FSelected write FSelected;
abändern
}
end;
procedure TSpielObject.Move(Destination: TPoint);
begin
if Selected
then FDestination := Destination;
end;
procedure TSpielObject.Update;
begin
if (FPosition.X = FDestination.X)
and (FPosition.Y = FDestination.Y)
then
begin
// Wenn Position erreicht wurde, Selektion entfernen
Selected := false;
end else
begin
// Zum Ziel bewegen
// Mit Geschwindigkeit von 1 Pixel pro Frame
if FPosition.X > FDestination.X
then FPosition.X := FPosition.X - 1
else FPosition.X := FPosition.X + 1;
if FPosition.Y > FDestination.Y
then FPosition.Y := FPosition.Y - 1
else FPosition.Y := FPosition.Y + 1;
end;
end;
Wenn dir das nicht reicht, kannst du auch gerne den Quelltext zu meinem oben verlinkten Spiel anschauen, aber ich bin mir nicht sicher, ob dir das weiterhilft, weil mein Spiel nicht auf Andorra 2D aufbaut.