In der Informatik gibt es sogenannte
Zustandsautomaten.
Wenn du eine bestimmte Abfolge von Aktionen haben möchtest, dann wäre das ein heiser Kandidat.
Im Formular benötigst du eine Variable für den aktuellen Zustand:
Delphi-Quellcode:
TForm1 = class(TForm)
private
zustand : Integer;
...
end;
Du startest den Zustandsautomaten mit einem Button:
Delphi-Quellcode:
procedure TForm1.StartButtonClick(Sender:TObject);
zustand := 0; // Anfangszustand
Timer1.Interval := 800; // alle 0,8s ein Zustandwechsel
Timer1.Enabled := True;
end;
Im Timer Event liegt die Hauptarbeit:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender:TObject);
var
neu_zustand : integer;
begin
neu_zustand := zustand + 1;
case zustand of
0: self.Color := clGreen; // Hintergrund grün
1: MovePlayerLeft; // Spielfigur bewegen
2: MovePlayerLeft; // Spielfigur bewegen
3: MovePlayerUp;
4: MovePlayerUp;
5: self.Color := clWindow;
6: Timer1.Enabled := False; // Animation beendet, Timer abstellen
end;
zustand := neu_zustand;
end;
In dem Beispiel läuft "zustand" von 0 bis 6 durch und dann endet das Ganze.
Es ist aber durchaus möglich, von dem normalen Ablauf abzuweichen und abhängig von einer Bedingung zu jedem anderen Zustand zu springen:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender:TObject);
var
neu_zustand : integer;
begin
neu_zustand := zustand + 1;
case zustand of
0: self.Color := clGreen; // Hintergrund grün
1: MovePlayerLeft; // Spielfigur bewegen
2: MovePlayerLeft; // Spielfigur bewegen
3: begin
MovePlayerUp; // nach oben
if ShapePlayer.Top > 20 then
neu_zustand := 2;
5: self.Color := clWindow;
6: Timer1.Enabled := False; // Animation beendet, Timer abstellen
end;
zustand := neu_zustand;
end;
Denk auch daran, dass du je nach Zustand den Timer schneller oder langsamer machen kannst.
Viel Spass beim Ausdenken deiner Animation!
Man kann die Zustandvariable auch mit einem
Aufzählungstyp abbilden.
Für den Anfang würde ich aber bei einem Integer bleiben, weil das weniger Schreibarbeit ist und mehr Raum für spontane Änderungen lässt.