2016-03-23 9 views
0

im Moment habe ich ein einfaches 2D Game Engine bin Programmierung (Nur weil ich es tun wollen, ich weiß es gibt schon viele genial sind)Animation, Synchronisation mit FPS

Aber das ist nur btw ...

Mein eigentliches Problem:

Ich habe eine normale Spielschleife mit Methoden wie update() und draw(). Jetzt möchte ich eine Sprite-Animation (nur 3 Frames) anzeigen, aber es ist logisch, dass ich mehr fps als 3 (ca. ~ 90.000) habe, aber ich möchte nicht, dass die Animation so schnell wiedergegeben wird. Ich möchte, dass in einer Sekunde eine Wiedergabe gemacht wird. So, jetzt meine Frage: Was ist der beste Weg, dies zu realisieren? Wie kann ich diese Frameraten zusammen übersetzen? Ich weiß, dass ich etwas tun könnte, um meine tatsächliche FPS mit den Frames zu teilen, die meine Animation bekommen hat und das Ergebnis zu wissen, wie viele Frames ich warten muss, bis ich das nächste Frame zeigen kann, aber das mag ich nicht. Also brauche ich etwas Input von euch.

Vielen Dank für das Lesen.

Antwort

0

Erstellen Sie einen Zeitgeber, der alle 30 Sekunden für 30 FPS-Leistung ausgelöst wird, und zeichnen Sie dann diesen Rückruf. Der Impl muss möglicherweise die Rückrufzeit abhängig von der Dauer des Zeichnens und anderen Problemen anpassen. Der Hauptpunkt ist, dass Ihr Animationscode nur herausfinden muss, auf welchem ​​"Frame" einer Animation er basiert, basierend auf dem Zeitversatz, aka wie oft der Display-Callback aufgerufen wurde. Solange die Renderzeit schnell ist, damit das Rendering gleichmäßig und gleichmäßig beginnt, sieht die Animation gut aus.

+0

Schöne Idee, vielen Dank! – Luftbaum

0

Für jeden übergebenen Frame, berechnen Sie die Delta-Zeit (Zeit zwischen dem aktuellen - letzten Frame) und fügen Sie es zu einem Zähler, können Sie diesen Zähler verwenden, um Frames basierend darauf, wie schnell Sie das tun möchten.

Wenn Sie möchten, dass Ihre Animation alle 0,5 Sekunden um ein Bild erweitert wird, sollten Sie für jedes Bild die Delta-Zeit hinzufügen und nach 500 Millisekunden < -> 0,5 Sekunden können Sie das Bild weiterleiten .

Auf diese Weise berücksichtigen Sie unerwartet schnelle/langsame Frames und erhalten eine konsistente Animation.

+0

Vielen Dank, eine weitere großartige Idee, aber diesmal ohne fps zu verlieren. – Luftbaum