Az 'interval' az SDL_AddTimer() első paraméterében megadott időzítési érték, azért van rá szükség, mert ennek a 'timer' rutinnak vissza kell adnia, hogy a futása után mennyivel később kéri a köv. ráhívást, és ha egyenlő időközönként szeretnéd hívatni, akkor ugye ugyanazt az értéket kell visszaadni - és ha már egyszer megmondtad az AddTimernél, akkor miért kelljen külön tárolnod :).
A 'void*' param azért van, hogy te magad is tudj általad tetszőlegesen felhasználható adatot csatolni az időzítéskéréshez, ugyanis ez a mező azt kapja meg, amit az SDL_AddTimer() utolsó paraméterének megadtál.
Ez arra jó, hogy ha pl. játékot írsz és a szörnyeket mozgatod időzítővel, akkor tudsz ilyet csinálni:
typedef struct _szorny_t
{
...
int x, y;
...
} szorny_t;
...
UInt32 szorny_leptet(UInt32 interval, void *p)
{
szorny_t *sz = (szorny_t*)p; /* lehetne 'this' is :) */
...
sz->x ++;
sz->y = 100 + 20*sin(sz->x);
...
return interval;
}
...
szorny_t * sz[42];
int i;
...
for (i = 0; i < 42; i++)
{
sz[i] = (szorny_t*)malloc(sizeof(szorny_t));
sz[i]->x = 0;
sz[i]->y = 0;
SDL_AddTimer(100, szorny_leptet, sz[i])
}
...
Ezzel ugyanazt a timer rutint használhatod a szorny_t típus összes példányának a mozgatására, ugyanis a rutin az utolsó paraméterben megkaphatja az aktuális példány mutatóját. Félig-meddig ez már oop :).