Seite 1 von 2

FPS bestimmen

Verfasst: 17.04.2006 19:13
von sen-me
Kann man irgendwie die FPS bestimmen?
Damits überall gleich läuft

Verfasst: 17.04.2006 19:21
von Kaeru Gaman
die ungeliebte methode ist SetFrameRate(), die blockiert aber die CPU...

besser ist es mit nem eigenen timer:

Code: Alles auswählen

; vor der HauptSchleife

FPS.l = 80   ; hier deine gewünschte FPS
msDelay.l = 1000/FPS
msTimer.l = ElapsedMilliseconds() + msDelay


; hier Repeat oder was auch immer für die Hauptschleife...
;...

; am ende der Hauptschleife

   Repeat
      Delay(0)    ; oder auch 1
   Until ElapsedMilliseconds() >= msTimer
   msTimer + msDelay

; hier Until oder was auch immer für die Hauptschleife...
das Delay() gibt anderen Prozessen chance zur abarbeitung.

[edit]
klammern beim 2ten ElaMil vergesse...

Verfasst: 17.04.2006 20:39
von sen-me
Gute Idee, danke!

Verfasst: 17.04.2006 21:52
von sen-me
Sorry für Doppelpost:
Kann mich mal einer aufklären wie das mit FPS ist?
Ein 600MHz hat die selbe FPS anzahl wie ich mit 3GHz.
Da kann doch was nich stimmen!

Verfasst: 17.04.2006 22:58
von Zaphod
Erstens geht die gepostete methode nach vergangenen Millisekunden und eine Millisekunde ist eine Millisekunde, egal ob auf einem 3MegaHz rechner oder 3TeraHz (ausser du sitzt grade auf einem gemütlichen schwarzen loch, da ist das so eine sache mit der zeit).
Zweitens kann auch ein 3GHz rechner nicht mehr frames darstellen, als die Videohardware grade darstellt. Da die wenigsten displays und grafikkarten mehr als 120 Frames pro sekunde auf den bildschirm rotzen können, kann auch das trivialste demo auf einem 10Ghz nicht mehr frames darstellen als ein 600MHz rechner bei der selben bildwiederholfrequenz.

Verfasst: 17.04.2006 23:45
von sen-me
D.h. man sollte aber in einem Spiel, das Bewegung in sich hat (also es drauf ankommt, ob man mehr Frames, oder weniger hat) ne Framerate setzen?

Verfasst: 18.04.2006 03:14
von Zaphod
Du kannst entweder die framezahl festsetzen (was der oben gepostete code ja auch macht) oder du passt die weite der bewegungen an die grade erreichbare framerate an (wie das zb quake macht).

Verfasst: 18.04.2006 09:49
von Kaeru Gaman
im Code-Archiv gibts auch nen beispiel, wie man bewegung und framerate unabhängig voneinander gestaltet... war glaubich von NTQ...

Verfasst: 18.04.2006 09:57
von sen-me
Ich meinte eher ob man ne Framerate setzen sollte?
Oder reichts einfach nur das Spiel zu machen?

Verfasst: 18.04.2006 12:59
von Kaeru Gaman
wenn du einen screen benutzt, gleichst du automatisch an die aktuelle framerate des monitors an durch die benutzung von FlipBuffers()

das kann zu unliebsamen ergebnissen führen, da diese framerate zwischen 50 und 240 variieren kann...

wenn du in einem windowed screen arbeitest, wird nicht synchronisiert, dann ist das tempo deines games von der performance des rechners abhängig.

du solltest also auf jeden fall eine synchronisierung durchführen, um eine gleichbleibende ausführungsgeschwindigkeit zu gewährleisten.

der codesnippet oben ist da noch die billigste lösung, wie gesagt, da gibts auch noch anderes im code-archiv...