Timer
| Variablentyp: timer | |
|---|---|
| | |
| | |
| |
Ein Timer (deutsch "Zeitgeber") wird verwendet, um von einer bestimmten Startzeit bis 0 runter zu zählen. Dabei kann man die Zeit auch in einem kleinen Fenster oben rechts anzeigen lassen, welches Timer-Dialog genannt wird. Außerdem ist es möglich, dass ein Timer periodisch abläuft, also nach seinem Ablauf wieder von vorne anfängt.
Inhaltsverzeichnis |
Timer im GUI
Im GUI benötigt man eine globale Variable vom Typ Timer (in den folgenden Beispielen heisst diese Variable "mein_timer").
Timer
Timer starten
Der Timer wird gestartet mit der Funktion

Countdown-Timer - Start <mein_timer> as a <Einmalig> timer that will expire in <5.00> seconds- Timer-Variable
- Einmalig / Wiederholt
- Startzeit
Timer pausieren

Countdown-Timer - Pause <mein_timer>Timer-Fenster
Um ein Timer-Fenster zu erstellen sollte man eine Variable vom Typ Timer-Fenster erstellen (in den folgenden Beispielen heisst diese Variable "mein_timer_fenster" ).
Timer-Fenster erstellen
Um ein Timer Fenster mit Titel anzuzeigen gibt es folgende Funktion:

Countdown-Timer - Create a timer window for <mein_timer> with title <Titel>- Timer-Variable
- Titel des Fensters
danach sollte das Fenster in einer Variable gespeichert werden:

Set mein_timer_fenster = (Last created timer window)
Timer-Fenster zerstören

Countdown-Timer - Destroy <mein_timer_fenster>- zu zerstörendes Fenster
Timer-Fenster verstecken / zeigen

Countdown-Timer - <Verbergen> <mein_timer_fenster>- verbergen / zeigen
- Timer-Fenster
Timer-Fenster - Titel ändern =

Countdown-Timer - Change the title of <mein_timer_fenster> to <neuer Titel>- Timer-Fenster
- neuer Titel
Timer-Fenster - Titel-Farbe ändern

Countdown-Timer - Change the color of the title for <mein_timer_fenster> to (<100.00%>, <80.00%>, <20.00%>) with <0.00%> transparency- Timer-Fenster
- Rot
- Grün
- Blau
- Transparenz
Timer-Fenster - Zeit-Farbe ändern

Countdown-Timer - Change the color of the time for <mein_timer_fenster> to (<100.00%>, <80.00%>, <20.00%>) with <0.00%> transparency- Timer-Fenster
- Rot
- Grün
- Blau
- Transparenz
Timer in JASS
In JASS hat man zusätzlich zu den GUI-Funktionen noch die Möglichkeit eine Handler-Funktion beim Starten des Timers zu übergeben, die beim Ablaufen aufgerufen wird.
Beispiel :
function timer_handler takes nothing returns nothing call BJDebugMsg("timer ist abgelaufen") call DestroyTimer(GetExpiredTimer()) endfunction function beispiel takes nothing returns nothing local timer t = CreateTimer() call TimerStart(t, 5.0, false, function timer_handler) endfunction
Wichtig ist zu erwähnen, dass hier die Funktion: "timer_handler" im Trigger-Code über der Funktion "beispiel" steht. Andernfalls kann auf die Funktion nicht zugegriffen werden.
Wichtig sind auch die beiden folgenden Funktionen von Captain Griffen:
function TimerAttach takes timer t, real time, real value, code func returns nothing call TimerStart(t, value, false, null) call PauseTimer(t) call TimerStart(t, time, false, func) endfunction // ONLY call on an expired timer. function GetTimerInt takes timer t returns integer return R2I(TimerGetRemaining(t) + 0.5) endfunction
Damit kann man einem Timer einen Integer anhängen, der laut Tests auf wc3campaigns.net nicht mehr als acht-stellig sein sollte. Zusammen mit vJass kann man so einem Timer jede beliebige Information anhängen, ohne auf den GameCache zugreifen zu müssen.
Vorteile gegenüber Wait-Aktionen
Timer sind gegenüber Wait-Aktionen viel genauer und haben keine Mindestlaufzeit von 0,25 Sekunden. Somit ist es zum Beispiel nur über einen Timer möglich, ein Objekt ruckelfrei schnell zu bewegen. Bei 25 Bewegungen pro Sekunde stellt man dazu den Intervall des Timers auf 0,04 Sekunden ein. Eine Wait-Aktion ist mit ihren mindestens 0,25 Sekunden viel zu langsam für solche Bewegungen.
Timer werden zudem im Gegensatz zu zur Wait-Aktion synchronisiert, was bedeutet, dass bei anderen Spielern in Mehrspielerspielen keine Verzögerungen auftreten sollten bzw. diese abgeglichen werden.
Eine Alternative zum immer wieder erneuten Aufruf einer neuen Funktion per Timer, stellt die Funktion PolledWait dar.
Es ist auch möglich 0-Timer zu machen; diese feuern quasi sofort. Damit ist es möglich, die maximale Codelänge per Trigger zu erweitern. Da WC3 einen Trigger nach einer bestimmten länge abbricht, können längere Trigger so realisiert werden indem einfach ein null Timer aufgerufen wird, der wieder einen neuen Trigger startet. So lässt sich ein zu langer Trigger in hinreichend kleine Stücke zerteilen.
