pygame und gamespeed

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

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
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

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
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Benutzeravatar
x2nop
User
Beiträge: 16
Registriert: Freitag 11. April 2008, 06:29
Wohnort: Spreeathen / Elbflorenz

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
es gibt leute, die sind anders und andere, die sind genauso!
Antworten