Objekte flüssig bewegen



  • Hallo;

    ich überlege mir gerade wie ich die Bewegung von Objekten beschreiben kann.
    Was ich mir vorgestellt habe:
    - von jedem Objekt wird die Bewegung pro Sekunde gespeichert
    - die Zeit für ein Frame wird ermittelt
    - die Bewegung pro Sekunde wird mit der Framezeit multipliziert, danach wird das Objekt transformiert

    Die Probleme dabei:
    - wenn andere Programme dazwischenfunken, stimmen die Framezeiten eventuell nicht mehr und das Objekt bewegt sich nicht genau um den Wert pro Sekunde, der eingestellt wurde
    - es wird immer die Framezeit vom vorhergehenden Frame genommen, deswegen kann es zu Rucklern in der Bewegung kommen

    Wie kann ich das umgehen, ohne die Framerate auf einen bestimmten Wert zu fixieren?
    Gibt es ein Tutorial, das diese Themen behandelt?



  • Berechne einfach wie viele Frames momentan jetzt laufen. Näheres dazu steht glaub ich in der FAQ.


  • Mod

    nimm die zeit statt die framezahl, die wird eh nie konstant bleiben, die zeit hingegen sollte konstant bleiben 🙂

    rapso->greets();



  • @rapso:

    - es wird immer die Framezeit vom vorhergehenden Frame genommen, deswegen kann es zu Rucklern in der Bewegung kommen

    Du kannst einfach den Mittelwert aus den vorigen paar Frames berechnen.
    Dafür brauchst du halt nur ein paar mehr floats (für die Zeit)

    Aule



  • nimm die zeit statt die framezahl, die wird eh nie konstant bleiben, die zeit hingegen sollte konstant bleiben

    Ich nehme doch die Zeit!
    Eine andere Möglichkeit: die Bewegung anhand der verstrichenen Zeit (seit das Objekt sich bewegt) berechnen. Dann würde die eingestellte Bewegung pro Sekunde genau passen.
    Dazu müsste ich aber für jedes Objekt die Startzeit festhalten...

    Das mit dem Mittelwert ist einerseits eine gute Idee, andererseits dauert die Anpassung der Framezeit dann noch länger...

    Werde das mit der Startzeit mal probieren und schauen, wie viel Aufwand das ist.

    Habe bei gamedev.net nach QueryPerformanceCounter gesucht und mehrere Threads + Artikel gefunden, die sich mit dem Thema befassen.
    Sollte es noch Probleme geben melde ich mich.

    Danke!
    Tubos

    edit:
    habe das jetzt glaub ich verstanden.
    Ich halte die Startzeit fest und dann messe ich die Zeitänderung im Vergleich zum vorhergehenden Frame.
    Dadurch ist zumindest das Problem, dass die Bewegung pro Sekunde nicht genau mit dem eingestellten Wert übereinstimmt, aus der Welt geräumt 🙂


Anmelden zum Antworten