FPS bestimmen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

FPS bestimmen

Beitrag von sen-me »

Kann man irgendwie die FPS bestimmen?
Damits überall gleich läuft
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Zuletzt geändert von Kaeru Gaman am 18.04.2006 09:42, insgesamt 1-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von sen-me »

Gute Idee, danke!
Bild
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag 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!
Bild
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag 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.
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag 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?
Bild
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag 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).
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

im Code-Archiv gibts auch nen beispiel, wie man bewegung und framerate unabhängig voneinander gestaltet... war glaubich von NTQ...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von sen-me »

Ich meinte eher ob man ne Framerate setzen sollte?
Oder reichts einfach nur das Spiel zu machen?
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten