Seite 1 von 2

Zeitgesteuertes Programmieren

Verfasst: 15.11.2006 21:01
von a14xerus
Es gibt schon viele Threads zu diesem Thema,doch alle waren für mich nicht so ergiebig
Ich möchte, dass... sagen wir mal ein ball, die strecke von 500 pixeln in 5 sekunden schafft, und zwar auf jedem pc gleich schnell.
Damit meine ich nicht, dass man ja die framerate setzen kann, oder am ende der schleife wartet bis eine bestimtme zeit abgelaufen ist,
Ich will, das auch auf PC's die sehr langsam sind, das ganze nur 5 sekunden dauert, dann ruckelt der ball eben und spring pro frame eben 20 pixel anstatt auf einem guten PC nur einen.
Ich will also nicht umbedingt die Framerate gleich haben, sondern die bewegungen auf den PC abstimmen, und hoffe, das ich mich klar genug ausdrücken konnte.
Falls es genau sowas gibt, gehen auch links, aber ich seler habe noch nichts gutes gefunden

Verfasst: 15.11.2006 21:20
von AndyX
in der Hauptschleife:

Code: Alles auswählen

oldTime = time
time = ElapsedMilliseconds()
frameTime.f = (time - oldTime) / 1000.0
und dann einfach die Bewegungs-Geschwindigkeit deines Objekts mit frameTime.f multiplitizeren. Wenn dann die Frames/Sekunde wissen willst, brauchst du nur 1 / frameTime.f zu rechnen :allright:

Verfasst: 15.11.2006 21:41
von a14xerus
ok sieht ganz gut aus

Verfasst: 15.11.2006 21:51
von AndyX
ist auch gut, da es von mir ist :wink:

:roll:

Verfasst: 15.11.2006 22:08
von a14xerus
:wink:
ja wars noch am testen
funktioniert bis hjetz so wie ichs will
THX

Verfasst: 15.11.2006 23:05
von Hellhound66
Hierbei sei noch folgendes erwähnt:
- Ease-In und Easy-Out Glättung/Kritisch gedämpfte Feder: Algorithmen zur weichen Anpassung von Lags oder sonstigen Unregelmäßigkeiten.

Zum Beispiel oben:
Besser ist es noch, mit ms zu rechnen und zwar generell alles. Also Bewegungen in Pixel/Einheiten pro ms angeben, usw... Dann immer die Delta-Zeit errechnen und daraus die Bewegung.

Verfasst: 16.11.2006 10:24
von dllfreak2001
problematisch wird es dann aber wenn man eine iterative Kollsionserkennung oder Ähnliches hat.

Verfasst: 17.11.2006 15:49
von a14xerus
ja weil dann durch zb ein lag das sprite das andere. mit dem es eigentlich collidiert und somit etwas auslöst, einfach überspringt

Verfasst: 17.11.2006 16:27
von ZeHa
Jo deswegen solltest Du eher überprüfen, ob die Strecke beider Sprites (jeweils PunktA und PunktB) sich schneidet, und nicht, ob die Sprites sich überlappen.

Verfasst: 17.11.2006 17:12
von dllfreak2001
Ich würde eher bei einfachen Spielen eine Maximalgrenze für den zeitausgleich angeben. So das ab einer bestimmten grenze das game doch langsamer läuft. Denn irgendwann wird das sowieso unspielbar.