Interpretation der FPS

Der Anlaufpunkt für alle, die selbst ein Adventure programmieren wollen.
Antworten
LuiJones
Frischling
Frischling
Beiträge: 6
Registriert: 08.11.2004, 00:48

Interpretation der FPS

Beitrag von LuiJones »

Hallo an alle Adventure Entwickler.

Ich habe eine kurze Frage, welche einer Erklärung bedarf. Vielleicht könnt ihr mir helfen.

Wie kann ich die FPS Rate für das Repainten meiner Objekte verwenden?

In der Darstellungsweise meiner Engine wird der DBLBuffer Frame mehrfach in der Sekunde gezeichnet. Ich arbeite ohne ActiveX, zumindest was das zeichnen betrifft. Dennoch könnte man das wiederholte Zeichnen meines Puffers als FPS bezeichnen, wenn ich deren Interpretation richtig verstanden habe.
Mein Problem besteht darin, wie und wann ich ein Animationsschritt einleite, da die FPS von Grafikkarte zu Grafikkarte unterschiedlich sind. In meinen Tests bin ich auf Werte von 16 FPS bis 200 FPS gekommen.
Für das Zeichnen des DBLBuffers nutze ich einen Timer, welche im Moment so schnell er kann der Puffer neu zeichnet. Nur habe ich das Problem das auf diese Art und weise spätestens, wenn eine Animation ins Spiel kommen würde, diese unterschiedlich schnell ablaufen würde.
Ich habe überlegt, die Framerate in verschiedene Takte einzuteilen (z.B. 10 Takte pro Sekunde) welche berechnet werden und dann auf jeden Rechner gleich sein sollten. Ist das überhaupt sinnvoll? Warum soll ich eigentlich in Bild mehrfach in der Sekunde zeichnen, wenn es keine direkte Veränderung gibt.

* Reichen 10 Taktzyklen um eine vernünftige Animation aus?
* Wie wird das bei anderen Adventurespielen gelöst?
* Ich habe Fanadventure mit über 200 FPS gesehen, ist das für ein Adventure sinnvoll?
* Kann man das reine, wiederholte zeichnen des DBLBuffers in der Sekunde als FPS bezeichnen oder ist das eine typische DirectX Eigenart?

Danke
Lui
Benutzeravatar
Martin Lassahn
Süßwasserpirat
Süßwasserpirat
Beiträge: 436
Registriert: 29.04.2003, 22:07
Wohnort: Mettmann
Kontaktdaten:

Re: Interpretation der FPS

Beitrag von Martin Lassahn »

Erstmal ganz allgemein: FPS heisst Frames Per Second. Damit ist die Anzahl der Bilder pro Sekunde gemeint, wieviele das Spiel Vollbild auf den Monitor darstellt. Man kann das mit den Bildern eines Filmes vergleichen: 24 bzw. 30 FPS werden in Filmen benutzt. 24 FPS wird im Allgemeinen als 'flüssig für das menschliche Auge' bezeichnet.

Zu den Fragen:
LuiJones hat geschrieben:* Reichen 10 Taktzyklen um eine vernünftige Animation aus?
Ja, für ein Hobby-Adventure schon. Zumindest wenn die Animation nicht zu schnell abläuft.
LuiJones hat geschrieben:* Wie wird das bei anderen Adventurespielen gelöst?
Grundsätzlich wird jede Animation mit einem eigenen Taktzyklus versehen. Das Spiel nimmt zu einem Zeitpunkt die Zeit und berechnet dann die Animationen/Sounds/Grafiken und stellt alles dar. Danach wird wieder die Zeit genommen und die Differenz beschreibt die vergangene Zeit und dient somit als Basis für die Berechnung der neuen Animation. Durch dieses Verfahren wird nur eine einzige Zeitschleife benötigt, die maximale Leistung auf jedem System wird genutzt und es ist auch einfacher in der Programmierung. Zur Vertiefung rate ich dringend ein Tutorial/Beispielprogramm in Deiner Programmiersprache zu suchen.
LuiJones hat geschrieben:* Ich habe Fanadventure mit über 200 FPS gesehen, ist das für ein Adventure sinnvoll?
Die Anzeige der FPS ist ab einer gewissen Grenze relativ uninteressant, denn das Spiel läuft ja nicht unbedingt schneller oder flüssiger mit einer hohen FPS-Zahl. Mein derzeitiges eigenprogrammiertes Adventures läuft mit über 500 FPS, aber der Spieler merkt das nicht.
LuiJones hat geschrieben:* Kann man das reine, wiederholte zeichnen des DBLBuffers in der Sekunde als FPS bezeichnen oder ist das eine typische DirectX Eigenart?
FPS hat nix mit DirectX zu tun. Weitere Erklärung siehe oben.

Deine Fragen deuten stark darauf hin, dass Du Dich noch mit grundsätzlichen Fragen zur Spieleprogrammierung beschäftigen solltest. Versuch Dich erstmal an einem kleinen Tetris/Pong-Spiel, da lernst Du die erforderlichen Techniken einfacher, als mit einem aufwendigeren Adventure.
LuiJones
Frischling
Frischling
Beiträge: 6
Registriert: 08.11.2004, 00:48

Beitrag von LuiJones »

Mein derzeitiges eigenprogrammiertes Adventures läuft mit über 500 FPS, aber der Spieler merkt das nicht.
Wie bekommst du eine solche Hohe FPS Rate? Nutzt du DirectX oder hast du einfach eine gute Grafikkarte?
Deine Fragen deuten stark darauf hin, dass Du Dich noch mit grundsätzlichen Fragen zur Spieleprogrammierung beschäftigen solltest. Versuch Dich erstmal an einem kleinen Tetris/Pong-Spiel, da lernst Du die erforderlichen Techniken einfacher, als mit einem aufwendigeren Adventure.
Ich habe bereits zahlreiche Spiele programmiert, darunter auch Adventure Spiele, nur habe ich bisher andere Techniken verwendet. Leider habe ich was DirectX bzw. das gesteuerte Zeichnen in Zyklen betrifft ein paar grundlegende Defizite.

* Welchen minimalen Taktzyklus kann man bei Deinen Animationen einstellen?
Benutzeravatar
john_doe
Logik-Lord
Logik-Lord
Beiträge: 1302
Registriert: 06.05.2001, 20:58

Beitrag von john_doe »

LuiJones hat geschrieben:
Mein derzeitiges eigenprogrammiertes Adventures läuft mit über 500 FPS, aber der Spieler merkt das nicht.
Wie bekommst du eine solche Hohe FPS Rate? Nutzt du DirectX oder hast du einfach eine gute Grafikkarte?
Deine Fragen deuten stark darauf hin, dass Du Dich noch mit grundsätzlichen Fragen zur Spieleprogrammierung beschäftigen solltest. Versuch Dich erstmal an einem kleinen Tetris/Pong-Spiel, da lernst Du die erforderlichen Techniken einfacher, als mit einem aufwendigeren Adventure.
Ich habe bereits zahlreiche Spiele programmiert, darunter auch Adventure Spiele, nur habe ich bisher andere Techniken verwendet. Leider habe ich was DirectX bzw. das gesteuerte Zeichnen in Zyklen betrifft ein paar grundlegende Defizite.

* Welchen minimalen Taktzyklus kann man bei Deinen Animationen einstellen?
Wenn du DirectX nicht so magst (bzw. dessen API) dann schau dir mal SDL an. Auf Windows setzt es u.a. auf DirectX auf, ist aber imo wesentlich angenehmer zu programmieren, da es einem die ganzen "dreckigen" DirectX-Sachen abnimmt.
theDon
Rätselmeister
Rätselmeister
Beiträge: 2219
Registriert: 11.06.2002, 18:22
Wohnort: gone (forever)
Kontaktdaten:

Beitrag von theDon »

... und ist zudem nicht auf windows beschränkt, sondern läuft stattdessen auch auf betriebssystemen. ;)
Wer Ironie oder beleidigende Inhalte in diesem Beitrag findet, darf sie behalten.

http://www.thwboard.de | http://oph-qfb.sourceforge.net
Benutzeravatar
john_doe
Logik-Lord
Logik-Lord
Beiträge: 1302
Registriert: 06.05.2001, 20:58

Beitrag von john_doe »

theDon hat geschrieben:... und ist zudem nicht auf windows beschränkt, sondern läuft stattdessen auch auf betriebssystemen. ;)
Jedenfalls ist SDL ein Schritt dahin, Dateisysteme usw. muß man evtl. auch noch beachten.
Benutzeravatar
Martin Lassahn
Süßwasserpirat
Süßwasserpirat
Beiträge: 436
Registriert: 29.04.2003, 22:07
Wohnort: Mettmann
Kontaktdaten:

Beitrag von Martin Lassahn »

@LuiJones:
Ja, ich nutze DirectX und habe eine brauchbare Grafikkarte. Es kommt natürlich auch darauf an welche Auflösung/Farbtiefe/Prozessor und wieviele/wie große Animationen dargestellt werden. SDL kam für mich nicht in Frage, da SDL keine Hardwarebeschleunigten Transparenzen in PNG-Dateien darstellen kann. SDL kann viel, aber nicht dasgleiche wie DirectX.

Was Du mit minimalen Taktzyklus meinst, weiss ich nicht genau. Ist auch relativ egal. Mit der angesprochenen Zyklus-Programmierung bist Du frei: Auch wenn das Game nur mit 50 FPS läuft und die Animation mit 100 FPS laufen soll, ist das kein Problem: dann wird automatisch nur jede zweite Animationsphase gezeichnet.
Benutzeravatar
john_doe
Logik-Lord
Logik-Lord
Beiträge: 1302
Registriert: 06.05.2001, 20:58

Beitrag von john_doe »

Martin Lassahn hat geschrieben:@LuiJones:
Ja, ich nutze DirectX und habe eine brauchbare Grafikkarte. Es kommt natürlich auch darauf an welche Auflösung/Farbtiefe/Prozessor und wieviele/wie große Animationen dargestellt werden. SDL kam für mich nicht in Frage, da SDL keine Hardwarebeschleunigten Transparenzen in PNG-Dateien darstellen kann. SDL kann viel, aber nicht dasgleiche wie DirectX.
Ich dachte, die Surfaces mit Alpha sind Hw-beschleunigt. Egal, ich bin vor kurzem auf OpenGL umgestiegen (SDL benutze ich trotzdem noch im Hintergrund), grade wegen lustigen Alpha- und Effekten allgemein.
Benutzeravatar
neon
Adventure-Treff
Adventure-Treff
Beiträge: 29982
Registriert: 08.07.2004, 10:55
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von neon »

Zu hohe fps ist im Grunde Unsinn, zwar kann das eventuell Dein Programm und Deine Grafikkarte darstellen, die tatsächliche Bildschirmausgabe ist aber durch die Bildwiederholfrequenz des Monitors begrenzt. Man sieht im Allgemeinen 85 Hz als Standard an, das bedeutet, daß der Monitor 85 mal pro Sekunde das Bild erneuert, bzw. bei dieser Einstellung die Grafikkarte 85 mal in der Sekunde ein neues Bild sendet. Du kannst Dein Programm zwar 200 mal in der Sekunde das Bild neu berechnen lassen, für die meisten Spieler ist das aber lediglich eine Verschwendung von Prozessorzeit, da sie diese hohen Wiederholraten nicht nutzen können. Interessant sind solchen Dinge sowieso nur für Shooter, wo die Reaktion im Hundertstelsekundenbereich liegt.
"Ich habe mich so gefühlt, wie Sie sich fühlen würden, wenn sie auf einer Rakete sitzen, die aus zwei Millionen Einzelteilen besteht - die alle von Firmen stammen, die bei der Regierungsausschreibung das niedrigste Angebot abgegeben haben"

- John Glenn nach der ersten Erdumrundung 1962
Antworten