1 Prinzip
Da die SimStep-Prozedur in jedem Frame durchlaufen wird, muss sie immer so schnell wie möglich durchlaufen werden und Befehle wie "Delay" oder "Sleep" sind verboten - ebenso unendlich laufende Schleifen.
Um Timer zu programmieren, muss man sich daher den Zeitpunkt "merken", bei dem der Timer gestartet wurde, und dann prüfen, ob die Zeit abgelaufen ist. Wenn dies der Fall ist, dann deaktiviert man den Timer oder setzt ihn zurück.
2 Implementierung
So könnte das ganze im Script aussehen:
Code
- const
- TIME_S = 2; // Sekunden
- var
- Timer: single; // wenn der Wert negativ ist, dann ist der Timer gestoppt.
- ...
- function RunTimer: boolean;
- begin
- result := false;
- if Timer > 0 then
- begin
- Timer := Timer - Timegap; // Timegap ist übrigens eine Systemvariable und gibt an, wieviel Zeit seit dem letzten Aufruf von SimStep vergangen ist (in Sekunden)
- if Timer <= 0 then
- result := true;
- end;
- end;
- procedure SimStep;
- begin
- ...
- // Falls der Timer irgendwann durch irgenein Ereignis gestartet werden soll:
- Timer := TIME_S;
- ...
- // der Timer wird "abgearbeitet"
- if RunTimer then
- begin
- // macht das, was nach Ablauf der Zeit passieren soll
- // falls es ein dauerhaft laufender Timer sein soll:
- Timer := TIME_S;
- end;
- ...
- end;
- procedure Initialize;
- begin
- ...
- Timer := -1; // einmal definitiv auf einen negativen Wert setzen, damit der Timer nicht losgeht
- // ODER
- Timer := TIME_S; // direkt starten, indem erstmalig die Zeitdauer gesetzt wird
- ...
- end;