Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (19.09.2011, 07:25)
Noe.Der Unterschied bleibt immer noch bei "=" und "+="
C-/C++-Quelltext |
|
1 |
const float timeCarTravelsPixelsInASecond = 640.0f;float elapsed = MyTicker.GetElapsed();moveX += elapsed * timeCarTravelsPixelsInASecond |
Administrator
idontknow
unregistriert
Bei der ganzen Sache sollte man aber beachten:
- Determinismus geht fast garantiert flöten, wenn man variable Schrittweiten benutzt
- KI könnte auf schnellen Rechnern plötzlich "schlauer" werden, weil sie öfters "denken" kann - je nach Implementierung
Ich bin ja mittlerweile überzeugter Benutzer des "Zeitkonto"-Ansatzes.
Merk Dir, wie viel Zeit Du noch abarbeiten musst. Sobald sie über 1/Gewünschte_logische_Framerate steigt (z.B. 1/60), mache so lange feste Update-Schritte (ebenfalls 1/60) und ziehe diese 1/60 vom Zeitkonto ab, bis sein Wert wieder kleiner als 1/60 ist. Danach rendern (fortgeschritten: niedrigere Update-Rate, aber häufiger rendern und zwischen den Zuständen interpolieren). Partikelsysteme oder andere unkritische Sachen kannst Du auch mit variabler Schrittweite berechnen, wenn sie nicht zur Spiellogik beitragen. Nach jedem Durchlauf der Hauptschleife addierst Du die für diesen Durchlauf benötigte Zeit wieder auf das Zeitkonto.
Probleme kriegst Du mit diesem Ansatz potenziell dann, wenn der Rechner zu langsam ist, um die Updates schnell genug zu schaffen, dann wächst das Zeitkonto immer weiter an. Aber wenn Du Deine Spiellogik effizient programmierst und alles im Rahmen bleibt, sollte das nicht passieren (oder wenn doch, dann ist der Rechner eh hoffnungslos überfordert).
Der Vorteil ist, dass Du nun mehr Determinismus hast. Du könntest z.B. die Eingaben des Benutzers für jedes Frame aufzeichnen und später wieder einspeisen und hast dann einen ziemlich einfachen Demo-Recorder/-Player (vorausgesetzt, Du initialisierst auch eventuelle Zufallsgeneratoren mit demselben Wert). Für Physik/Kollisionserkennung ist es eh besser, mit festen Schrittweiten zu arbeiten, weil sonst komische Sachen passieren können (im schlimmsten Fall fliegen Objekte durch andere hindurch).
(zu diesem Thema muss unbedingt ein Wiki-Artikel geschrieben werden, wenn das Wiki dann endlich mal eröffnet wird )
Administrator
Ein schneller Rechner wird auf Grund seiner hohen Frame-Rate viel mehr Zeit/Durchläufe haben, um seine Schritte zu berechnen.
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Noe.Der Unterschied bleibt immer noch bei "=" und "+="
Werbeanzeige