zeitmanagement für spiele
-
mein problem ist folgendes:
Ich hab für mein kleines Spiel die Geschwindigkeit so gestaltet, dass ich nach jedem Frame die zeit seit dem gemessen hab und wenn es diese kleiner war, habe ich das Prgramm einfach solange warten lassen bis dieses Minimum erreicht war, um zu erreichen, dass das Spiel auf jedem Rechner gleich schnell läuft.
Nun hat ein Freund von mir behauptet, dass man die Zeit messen soll, und die Geschwindigkeit des Spiels an sich(Geschwindigkeit der Figuren, Animationen...) auf diesen Wert anpassen soll.Also mit welchem Verfahren verhindert man eigentlich, dass ein Spiel zu schnell läuft?
-
alterbro schrieb:
Nun hat ein Freund von mir behauptet, dass man die Zeit messen soll, und die Geschwindigkeit des Spiels an sich(Geschwindigkeit der Figuren, Animationen...) auf diesen Wert anpassen soll.
Da hat er recht.
alterbro schrieb:
Also mit welchem Verfahren verhindert man eigentlich, dass ein Spiel zu schnell läuft?
So wie dein Freund es beschrieben hat. Bei mir haben alle Funktionen die die "vergangene Zeit" brauchen einen Parameter dafür. Ich messe einmal vor jedem Frame wie viel Zeit vergangen ist, und mit diesem Wert wird dann der gesamte nächste Frame berechnet.
-
da gibt es keine pauschale richtige antwort, das hängt von deinem spiel ab. häufig möchte man, dass spielobjekte sich unabhängig von der framerate in einem gegebenen zeitraum immer gleich weit bewegen. dazu misst man die vergangene zeit und multipliziert seine vektoren damit. höhere frameraten bedeuten dann flüssigere bewegung.
oder man will fixed timesteps: dazu legt man eine feste framerate fest und sorgt dafür, dass das spiel niemals unter diesen wert fällt. benötigt man weniger zeit, wartet man am ende des frames (zb per vsync). braucht man doch mal mehr zeit, läuft alles in zeitlupe.
häufig werden mischformen eingesetzt, wo man so oft wie möglich rendert, aber die animation, physik, ki etc. mit einer fixen rate tickt. der renderer interpoliert dann die präsentation zwischen den werten, die die subsysteme liefern.
welchen ansatz man verwendet, hängt von zielsystem und dem spiel selbst ab. ein shooter auf einem pc rendert so schnell wie möglich. ein jump'n'run auf einem handheld rendert mit einer konstanten rate. ein flash-puzzlespiel rendert mit einer konstanten rate.
-
ok, danke, ich glaub, solange es funktioniert, bleib ich bei meiner Lösung