servus leute
mit den nun immer schneller werdenden Rechnern binn ich an ein
problem gestossen
ich fange an mit 30FPS in clock.tick
und lass in LEVEL 1 mit NUMBlock + - eine änderung zu
in den höheren levels mutiplitiere ich dann mit 1.5 hoch
gibt es da erfahrungswerte welches die max min wären
oder besser kann man die taktfrequenz in pygame abfragen
pygame und gamespeed
Das loest man, indem man mit der vergangenen Zeit rechnet und zwar typischerweise über die Dauer des letzten Frames. Du hast dann die zwischen dem letzen Frame und dem jetzt anstehenden eine Zeitdifferenz von "dt" Sekunden. Dann legst du die Bewegungsgeschindigkeit mit "t" Einheiten pro Sekunde fest. Die jetzt im Frame zurückzulegende Strecke ist dann "dt*t".
Damit bist du dann unabhängig von den Frames.
Damit bist du dann unabhängig von den Frames.
- veers
- User
- Beiträge: 1219
- Registriert: Mittwoch 28. Februar 2007, 20:01
- Wohnort: Zürich (CH)
- Kontaktdaten:
Ich hatte dazu mal ein schönes Zitat. Leider finde ich es nicht mehr. Die Grundaussage wahr jedoch die Folgende:EyDu hat geschrieben:Das loest man, indem man mit der vergangenen Zeit rechnet und zwar typischerweise über die Dauer des letzten Frames. Du hast dann die zwischen dem letzen Frame und dem jetzt anstehenden eine Zeitdifferenz von "dt" Sekunden. Dann legst du die Bewegungsgeschindigkeit mit "t" Einheiten pro Sekunde fest. Die jetzt im Frame zurückzulegende Strecke ist dann "dt*t".
Damit bist du dann unabhängig von den Frames.
Anfänger:
x += vx
Lernender:
x += vx * t
Meister:
x += vx
Wobei die Game Zeit in Ticks abläuft welche eine definierte Zeitdauer haben und unabhängig von der Framerate sind. Üblich sind 60 Ticks / Sekunde.
Gruss,
Jonas
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Da hast du natürlich vollkommen Recht. Wenn man sich nicht nur um die Animationen, sondern auch um die KI oder Kollisionen kümmern muss, dann kommt man um feste unabhängige Zeitsschritte nicht rum. Aber dort sollte man die vergangene Zeit, so lange man sich nicht auf einem Echzeitsystem befindet, auch nicht vernachlässigen. Zumindest, wenn man es ganz genau haben will.
zum thema schrittweite und framerate hier ein kleiner erguß:
is ne sehr schematische darstellung und vielleicht auch nicht die schönste.. funktionierte bisher ganz gut.. . .
bei world_step könnteste mittels entsprechender mul die zeit "dehnen" und "stauchen"
~ $10
Code: Alles auswählen
FPS = 25 # angestrebter wert
fps = FPS # beim start wäre fps = 0 s.u.
total_time = 0.0
clk.tick()
while True:
if fps == 0.0: # vermeidet eine 0-div
dt = 1.0 / FPS # behelfslösung, 1/25s
else:
dt = 1.0 / fps
.. # code ..
world_step = dt # je nach bedarf einzelne schrittweite
total_time += dt # oder gesamte zeit
.. # code ..
clk.tick(FPS) # soll versuchen, 25fps zu halten
fps = clk.get_fps # errechnet die reelle differenz
bei world_step könnteste mittels entsprechender mul die zeit "dehnen" und "stauchen"
~ $10
es gibt leute, die sind anders und andere, die sind genauso!