Seite 1 von 1

pygame und gamespeed

Verfasst: Montag 5. Mai 2008, 18:53
von sea-live
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

Verfasst: Montag 5. Mai 2008, 20:26
von EyDu
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.

Verfasst: Dienstag 6. Mai 2008, 00:14
von veers
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.
Ich hatte dazu mal ein schönes Zitat. Leider finde ich es nicht mehr. Die Grundaussage wahr jedoch die Folgende:

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

Verfasst: Dienstag 6. Mai 2008, 10:57
von EyDu
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.

Verfasst: Dienstag 6. Mai 2008, 15:58
von x2nop
zum thema schrittweite und framerate hier ein kleiner erguß:

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
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