Anzeige:
Ergebnis 1 bis 8 von 8

Thema: sdl timer

  1. #1
    Registrierter Benutzer
    Registriert seit
    23.07.2001
    Ort
    Böblingen
    Beiträge
    69

    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:

    Code:
    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:

    Code:
    /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?
    Geändert von Brujah (18-10-2006 um 00:13 Uhr)
    Sony Vaio Laptop mit 2,8 Gig Prozessor
    Kubuntu "Feisty Fawn"
    www.lostlabyrinth.com

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    ist messagebox::blink eine static Methode?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer
    Registriert seit
    23.07.2001
    Ort
    Böblingen
    Beiträge
    69
    Wenn ich versuche sie als static zu deklarieren bekomme ich:

    Code:
    /home/markus/new_lostlabyrinth/src/messagebox.cpp:5: Fehler: Elementfunktion »static Uint32 messagebox::blink(Uint32, void*)« kann nicht deklariert werden, statische Bindung zu haben
    Sony Vaio Laptop mit 2,8 Gig Prozessor
    Kubuntu "Feisty Fawn"
    www.lostlabyrinth.com

  4. #4
    Registrierter Benutzer
    Registriert seit
    24.09.2005
    Beiträge
    66
    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.

  5. #5
    Registrierter Benutzer
    Registriert seit
    23.07.2001
    Ort
    Böblingen
    Beiträge
    69
    Jetzt geht es!
    Danke an euch!

    Ich muss tatsächlich den static nur in der deklaration machen.
    Sony Vaio Laptop mit 2,8 Gig Prozessor
    Kubuntu "Feisty Fawn"
    www.lostlabyrinth.com

  6. #6
    Registrierter Benutzer
    Registriert seit
    23.07.2001
    Ort
    Böblingen
    Beiträge
    69
    Jetzt habe ich doch noch ein Problem.
    Ich trage jetzt das Event in der Klasse Messagebox so ein:

    Code:
       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);
    Sony Vaio Laptop mit 2,8 Gig Prozessor
    Kubuntu "Feisty Fawn"
    www.lostlabyrinth.com

  7. #7
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Qt/KDE Entwickler
    Debian Benutzer

  8. #8
    Registrierter Benutzer
    Registriert seit
    23.07.2001
    Ort
    Böblingen
    Beiträge
    69
    Okay. Jetzt läuft alle so wie es soll. Mit den ganzen Dokus habe ich es hinbekommen.
    Geändert von Brujah (18-10-2006 um 23:53 Uhr)
    Sony Vaio Laptop mit 2,8 Gig Prozessor
    Kubuntu "Feisty Fawn"
    www.lostlabyrinth.com

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •