Verständnisproblem: Tick und FPS

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
jonas
User
Beiträge: 156
Registriert: Dienstag 9. September 2008, 21:03

Hi Leute,
ich verstehe nicht so ganz wie das mit den Ticks
gemeint ist, im Bezug auf irgendein Programm/Spiel?
Und was hat das mit den Frames Per Second
zu tun? :(
Irgendwo habe ich was gelesen, dass ein Tick normalerweise
1/60 Sekunde ist? Ich hab keinen Schimmer...

Lg, Jonas :(
lunar

Wie kommst du überhaupt darauf, ein "Tick" hätte etwas mit "FPS" zu tun? Das sind erstmal zwei völlig unabhängige Begriffe. Ein "Tick" hat auch nicht notwendigerweise etwas mit Zeit zu tun, sondern bezeichnet eigentlich nur etwas "Zählbares".
Benutzeravatar
jonas
User
Beiträge: 156
Registriert: Dienstag 9. September 2008, 21:03

Schau mal hier
x2nop hat geschrieben:

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 
Da steht was von Tick im Zusammenhang
mit FPS und das kapier ich nicht..
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Kommt auf den Zusammenhang an...

Manchmal wird das Wort 'Tick' als Abstraktion der Spielmechanischen Zeitmessung genommen. Bei Rundenbasierten Spielen könnte 'Tick' eine Runde sein. Bei Echtzeit-Spielen eine bestimmte Zeiteinheit, die global definiert wird.

Im technischen Sinne bezeichnet ein 'Tick' oft ein Zeitintervall, in dem ein Programm seinen internen Zustand aktualisiert. Statt ständig zu schauen, ob es in der Spielwelt etwas zu berechnen gibt, wird nur alle X Millisekunden aktualisiert und die restliche Zeit geschlafen (damit z.B. die 3D-Engine auch was tun kann). Wenn man nun die Spielmechanik darauf anpasst (Zauber dauern 3 Ticks, Heilung gibt 5 Hitpoints pro Tick u.s.w.) kann man im Programmcode komplett auf Zeitangaben verzichten und stattdessen mit Tick-Countern arbeiten. Das spart auch die (recht teuren) syscalls, um die exakte Zeit zu ermitteln.

Bei Render-Engines (3D oder 2D) macht es auch durchaus Sinn, nicht stumpf so schnell zu rendern, wie möglich, sondern das rendern an die Framerate zu koppeln. Daher kommt das 1/60 Sekunden. 60 Ticks pro Sekunde passt nämlich zu den 60 Frames pro Sekunde, die die meisten Monitore dar stellen können. Es nützt dem Spieler nämlich garnichts, wenn sein Spiel 120 Bilder/Sekunde rendern kann, wenn er davon nur jedes zweite sieht. Da macht es mehr sinn, nur 60 Bilder pro sekunde zu berechnen und die restliche zeit zu schlafen, damit die anderen Programmteile auch was vom CPU ab bekommen.

So, ich hoffe das konnte deine Frage beantworten.

Edit: Das von dir verlinkte Beispiel erklärt das eigentlich recht gut: Statt zu sagen: "Die Spielfigur bewegt sich pro Programmdurchlauf X Meter" möchte der Entwickler sagen "Pro Tick, also alle n millisekungen, bewegt sich die Spielfigur X Meter." damit die Spielfigur immer gleich schnell ist, egal wie gut der CPU ist und wie viele Programmdurchläufe (Frames) gerade berechnet werden können.

Dafür berechnet er (Dauer_der_letzten_Frame / Dauer_eines_Ticks * X_Meter). Dauerte das berechnen der letzten Frame also nur 0.5 Ticks, bewegt sich die Spielfigur auch nur 0.5*X Meter.
lunar

Du hättest gleich im ersten Beitrag sagen sollen, auf was du dich beziehst.

Ticks sind in diesem Bezug feste Zeitintervalle. Die "Hauptschleife" eines Systems wartet also eine definierte Zeitspanne (beispielsweise eine Mikrosekunde), und führt anschließend alle anstehenden Aktionen durch. Dadurch erhält das System ein eigenes, konstant fortschreitendes Zeitmaß, welches von den Gegebenheiten der Architektur (z.B. Prozessorgeschwindigkeit) weitgehend unabhängig ist. Der Vorteil daran ist, dass man so ohne großartige Berechnungen Bewegungen und Aktionen modellieren kann. Um beispielsweise einen Gegner zu repräsentieren, der sich jede Sekunde um einen halben Meter bewegt, reicht es bei sechzig Ticks pro Sekunden, einfach alle sechzig Ticks die Position des Gegner um einen konstanten Faktor zu ändern. Insgesamt läuft das System dadurch unabhängig von der Geschwindigkeit der Hardware mit der immer gleichen Geschwindigkeit.

Die Maßeinheit FPS bezieht sich dann lediglich auf die Geschwindigkeit, mit der die Darstellungsschicht die Änderungen des Systems anzeigen kann. Wenn die Hardware 30 FPS hergibt, kann das System bei angenommenen sechzig Ticks also jeden zweiten Tick darstellen.

Das obige ist spezifisch für Spiele, in einem anderen Kontext kann ein "Tick" auch eine andere Bedeutung haben.
Benutzeravatar
jonas
User
Beiträge: 156
Registriert: Dienstag 9. September 2008, 21:03

Danke sehr Defnull!
Das hat mir schon sehr geholfen!
Ich glaube jetzt komme ich weiter mit meinen
Problemen!
Wenn nicht meld ich mich wieder.
Lg, Jonas 8)

EDIT: Dir auch Lunar!
Antworten