SDL Timer und Beenden erzeugt Fehlermeldung
-
hallo da draussen, ich habe mit SDL die ersten Schritte hinter mich gebracht auf dem weg zum ersten game. Nun habe ich folgendes Problem, seit dem Zeitpunkt wo ich SDL_Timer verwende, erscheint bei mir die fehlermeldung "zugriffsverletzung in sdl.dll". das passiert genau dann wenn exit() aufgerufen wird. Kennt jemand die Lösung, oder hat ne Vermutung?
-
Zeig mal bissel Quellcode wie du den timer initialisierst und benutzt.
Du kannst auch die Timer Bsp von hier http://lazyfoo.net/SDL_tutorials/index.php ausprobieren und schauen ob diese funktionieren.schirrmie
-
also, die initlialisierung passiert so:
void init
{
...
SDL_Init(SDL_INIT_TIMER);
run()
}void run ()
{
speccurstimer = SDL_AddTimer(10, cursor, NULL);
}Uint32 cursor(Uint32 interval, void *param)
{
int posx, posy;
SDL_Event event;while(SDL_PollEvent(&event))
{
SDL_GetMouseState(&posx, &posy);
//SDL_WM_GrabInput(SDL_GRAB_ON);
switch(event.type)
{ //Maus und Tastaturabfragecase SDL_KEYDOWN:
switch(event.key.keysym.sym)
{
case SDLK_ESCAPE: beenden(); //hier wird beendet
}
break;
case SDL_MOUSEBUTTONDOWN:
if (event.motion.state & SDL_BUTTON(SDL_BUTTON_LEFT))
{
SDL_RemoveTimer(curstimer);
movescreen(posx, posy);
}
}
}
return (interval);
}void beenden ()
{
SDL_RemoveTimer(speccurstimer);
SDL_RemoveTimer(curstimer);
SDL_Quit();
exit(0);
}hoffentlich steigst du durch^^
ich schau mir nebenbei mal deinen link an
und danke für die hilfe
-
also, die initlialisierung passiert so:
void init
{
...
SDL_Init(SDL_INIT_TIMER);
run()
}void run ()
{
speccurstimer = SDL_AddTimer(10, cursor, NULL);
}Uint32 cursor(Uint32 interval, void *param)
{
int posx, posy;
SDL_Event event;while(SDL_PollEvent(&event))
{
SDL_GetMouseState(&posx, &posy);
//SDL_WM_GrabInput(SDL_GRAB_ON);
switch(event.type)
{ //Maus und Tastaturabfragecase SDL_KEYDOWN:
switch(event.key.keysym.sym)
{
case SDLK_ESCAPE: beenden(); //hier wird beendet
}
break;
case SDL_MOUSEBUTTONDOWN:
if (event.motion.state & SDL_BUTTON(SDL_BUTTON_LEFT))
{
SDL_RemoveTimer(curstimer);
movescreen(posx, posy);
}
}
}
return (interval);
}void beenden ()
{
SDL_RemoveTimer(speccurstimer);
SDL_RemoveTimer(curstimer);
SDL_Quit();
exit(0);
}hoffentlich steigst du durch^^
ich schau mir nebenbei mal deinen link an
und danke für die hilfe
-
Pack den Code bitte mal in Code-Tags. Sonst kann/will sich das ja keiner durchlesen...