eine etwas andere Version, womit Timer noch einfacher zu handhaben sind, wie ich glaube.
- die Timer werden komplett innerhalb der Funktion DeltaTimer verwaltet und ist somit "gekapselt"
- Das Initialisieren vor der Hauptschleife entfällt.
- Auch kann die Nummerierung der Timer willkürlich sein
[EDIT]
wobei ich jedoch nicht weiß, ob es sinnvoll ist, wenn man Arrays innerhalb von Funktionen mit STATIC deklariert. Werden die dann im Stack abgelegt? Könnte das Speicherprobleme geben? Allerdings hab ich es mal spaßeshalber mit der Anlage von 10.000 Timern probiert. Lief problemlos.
// --------------------------------- //
// Project: DeltaTimer
// Start: Monday, August 04, 2008
// IDE Version: 5.341
// some constants for different timers
LOCAL SHIP = 10
LOCAL ENEMY01 = 11
LOCAL ENEMY02 = 12
LOCAL counter1, counter2, counter3
WHILE TRUE
IF DeltaTimer(SHIP, 100) THEN INC counter1, 1
IF DeltaTimer(ENEMY01, 500) THEN INC counter2, 1
IF DeltaTimer(ENEMY02, 1000) THEN INC counter3, 1
PRINT "1. Timer: " + counter1, 0, 0
PRINT "2. Timer: " + counter2, 0, 20
PRINT "3. Timer: " + counter3, 0, 40
SHOWSCREEN
WEND
// ------------------------------------------------------------- //
// --- DeltaTimer ---
// num: internal number of the timer
// millisec: duration ot timer interval
// ------------------------------------------------------------- //
FUNCTION DeltaTimer: num, millisec
TYPE t_timer
number
interval
ENDTYPE
STATIC timer[] AS t_timer
LOCAL lt AS t_timer
// set new timer interval if necessary
FOREACH lt IN timer[]
IF lt.number = num
IF lt.interval < GETTIMERALL()
lt.interval = GETTIMERALL() + millisec
RETURN TRUE
ELSE
RETURN FALSE
ENDIF
ENDIF
NEXT
// this will only be executed if timer was not found yet
// so we create a new one
lt.number = num
lt.interval = GETTIMERALL() + millisec
DIMPUSH timer[], lt
RETURN FALSE
ENDFUNCTION // DELTATIMER