Bewegungsgeschwindigkeit * ZeitZwischenFrame = Unsinnig?
-
Hallo!
Ich verstehe es nicht. Warum sollte man die Bewegung mal der Zeit nehmen? Dann passiert nämlich folgendes:
Läuft die Anwendung gerade mit 300FPS, rennt man sau schnell durch die gegend (Speedhack).
Läuft die Anwendung gerade mit 1FPS, kommt man mim Ruckeln nicht nach.
Wo steckt der Sinn dahinter? Hatte zB. bei meinem lieblings Ego-shooter Vietcong das Problem.
Bei einer Szene mit 300FPS wurde ich wegen cheaten gekickt (Speedhack), weil das Programm plötzlich für mich viel schneller ablief.
Als ich 70FPS hatte, war alles in etwa normal.Da hilft nur: VSYNC
(Mit VSYNC war bei Vietcong noch nicht alles getan. Und zwar zuckten alle Personen so komisch herum. Nach installieren eines PROCESSOR DRIVERS funktionierte dann alles)
(Mein Prozzi: AMD 64 X2)
Aber das kann es doch nicht sein?
MfG
-
Aua. Haette nicht gedacht, dass es immernoch Engines gibt, die nicht zwischen Darstellungsframe und Simulationsframe unterscheiden. Einfach nur kaputt, sowas.
-
Aua. Sagt mir nichts und hilft mir nicht weiter.
-
Wie auch. Bei kaputten Programmen kann Dir kein Forenpost helfen, sondern nur ein Patch vom Hersteller.
-
ceplusplus schrieb:
Ich verstehe es nicht. Warum sollte man die Bewegung mal der Zeit nehmen? Dann passiert nämlich folgendes:
Läuft die Anwendung gerade mit 300FPS, rennt man sau schnell durch die gegend (Speedhack).
Läuft die Anwendung gerade mit 1FPS, kommt man mim Ruckeln nicht nach.
Falsch.
Hohe FPS => niedrige Zeit zwischen Frames
Niedrige FPS => hohe Zeit zwischen Frames
-
Sorry.
Mir gehts ja nicht um das Programm.
Sondern, was hinter diesem Zusammenhang steckt.
Hohe FPS => niedrige Zeit zwischen Frames
Niedrige FPS => hohe Zeit zwischen FramesDie FPS variieren doch ständig. Somit variiert auch ständig die Bewegungsgeschwindigkeit. Ist doch Schwachsinn?
-
ceplusplus schrieb:
Ist doch Schwachsinn?
Genau. Deshalb ja "aua".
-
Und was wäre dann richtig/besser?
-
Nein, kein Schwachsinn.
Sagen wir mal, du willst, dass sich x mit 100 pro Sekunde erhöht.In jedem Frame: x += 100.0 * dt
Wobei dt die letzte Frame-Zeit in Sekunden ist (z.B. 0.01 bei 100 FPS).
Die Multiplikation sorgt dafür, dass nach einer Sekunde x 100 größer ist als vorher, und zwar unabhängig davon, wie lange die Frames gebraucht haben.In der Praxis arbeitet man aber eher mit festen Schrittgrößen und einem Zeitkonto, das man "abarbeiten" muss.
timeToProcess = 0; while(!quit) { t0 = getTime(); render(); while(timeToProcess >= stepSize) { timeToProcess -= stepSize; update(); } dt = getTime() - t0; timeToProcess += dt; }
-
ceplusplus schrieb:
Und was wäre dann richtig/besser?
Natuerlich das ganze nicht an die Darstellung zu koppeln.
-
Was ist jetzt eigentlich die Frage? Warum dein Game verbuggt ist? f'`8k
Gruß, TGGC (\-/ has leading)
-
Ob Bewegungsgeschwindigkeit * ZeitZwischenFrame = Unsinnig?
-
Nein. Wurde schon gesagt. Ausserdem passt die Beschreibung nicht dazu. f'`8k
Gruß, TGGC (\-/ has leading)
-
TGGC schrieb:
Nein. Wurde schon gesagt.
Ich weiß.
TGGC schrieb:
Ausserdem passt die Beschreibung nicht dazu.
Kann leicht sein, habe auch nicht nachgedacht.
MfG
-
ceplusplus schrieb:
Kann leicht sein, habe auch nicht nachgedacht.
Ein weitverbreitetes Problem heutzutage.

Gruß, TGGC (\-/ has leading)