Archiv verlassen und diese Seite im Standarddesign anzeigen : sdl timer
Jetzt bin ich an den timern für unser Spiel.
Ich habe einen Haufen Dokus im Netz gelesen, aber es geht nicht.
Das hier probiere ich:
Uint32 messagebox::blink(Uint32 interval, void* param)
{
}
SDL_Event event;
SDL_TimerID timer;
Uint32 delay=200;
timer = SDL_AddTimer(delay,blink,NULL);
Und das hier bekomme ich:
/home/markus/new_lostlabyrinth/src/messagebox.cpp:23: Fehler: Argument des Typs »Uint32 (messagebox::)(Uint32, void*)« passt nicht zu »Uint32 (*)(Uint32, void*)«
Woran kann das denn liegen?
anda_skoa
17-10-2006, 23:58
ist messagebox::blink eine static Methode?
Ciao,
_
Wenn ich versuche sie als static zu deklarieren bekomme ich:
/home/markus/new_lostlabyrinth/src/messagebox.cpp:5: Fehler: Elementfunktion »static Uint32 messagebox::blink(Uint32, void*)« kann nicht deklariert werden, statische Bindung zu haben
Yonibear
18-10-2006, 09:59
Das Problem ist dass eine nicht-static Klassenmethode intern immer noch einen Zeiger auf die eigentliche Klasseninstanz braucht, daher ist sie mit C-Callbacks nicht kompatibel.
Wenn du die Methode static machst kannst du also erstmal wieder nicht auf Klassenmember zugreifen. Über einen Umweg geht es dann doch, nämlich wenn du über den void* param einen zeiger auf eine Klasseninstanz mitlieferst.
In messagebox::blink castest du den void* einfach wieder nach messagebox* und greifst so auf deine Member zu.
Dein letzter Fehler entsteht glaube ich dadurch dass du static in der Definition angibst. Es darf aber nur in der Deklaration, also innerhalb von class {} auftauchen.
Jetzt geht es!
Danke an euch!
Ich muss tatsächlich den static nur in der deklaration machen.
Jetzt habe ich doch noch ein Problem.
Ich trage jetzt das Event in der Klasse Messagebox so ein:
timer = SDL_AddTimer(delay,drawing.blink,NULL);
Es wird also eine statische Routine in einer anderen Klasse eingetragen.
Weil ich in dieser die ganze Grafikausgabe mache.
Wie aber übergebe ich jetzt eine Klassenadresse im param?
Und wie benutze ich dieses in der Zielfunktion?
Vielleicht so?
timer = SDL_AddTimer(delay,drawing.blink,drawing);
anda_skoa
18-10-2006, 15:50
http://www.mrunix.de/forums/showthread.php?t=38966
Ciao,
_
Okay. Jetzt läuft alle so wie es soll. Mit den ganzen Dokus habe ich es hinbekommen.
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.