FPS bestimmen
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
die ungeliebte methode ist SetFrameRate(), die blockiert aber die CPU...
besser ist es mit nem eigenen timer:
das Delay() gibt anderen Prozessen chance zur abarbeitung.
[edit]
klammern beim 2ten ElaMil vergesse...
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...
[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.
Der Weise weiß, dass er ein Narr ist.
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.
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.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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...
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.
Der Weise weiß, dass er ein Narr ist.