FPS begrenzen und berechnen

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

StepTiger

Betreff: FPS begrenzen und berechnen

BeitragDo, Sep 21, 2006 10:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier mal ein code, mit dem man die FPS(Frames per second) berechnen und begrenzen kann.

Der code reserviert lediglich 2 Variablen. FPS_MAX und FPS_LAST

hier mal ein beispielcode:
Code: [AUSKLAPPEN]
;Global
Graphics3D 800,600,32,2
SetBuffer BackBuffer()

;Konstante
Const MAX_FPS=100

;Testobjekt
cone=CreateCone()

;Kamera
cam=CreateCamera()
PositionEntity cam,0,0,-10

;Hauptschleife
While Not KeyDown(1)

   ;Cls und FrameLimiter
   Cls
   While FPS_LAST>(MilliSecs()-(1000./MAX_FPS)):Delay FPS_LAST-(MilliSecs()-(1000./MAX_FPS))-1:Wend

   ;Entity bewegen
   TurnEntity cone,1.+Rnd(.5),1.+Rnd(.5),1.+Rnd(.5)
   
   ;Render und Update
   UpdateWorld   
   RenderWorld
   
   ;Fps berechnen und anzeigen
   fps#=(19*fps#+(1000./(MilliSecs()-FPS_LAST)))/20.:FPS_LAST=MilliSecs()
   Text 1,1,fps#

   ;Buffer tauschen
   Flip 0
   
Wend


hoffe, der code ist nützlich
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

TheMatrix

BeitragDo, Sep 21, 2006 11:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Wieso benutzt du nicht CreatTimer(fps) plus WaitTimer(fps)?

Is kürzer und verwirrt nicht so Wink
°_° °.° °~° °v° .. -.-

Blitzcoder

Newsposter

BeitragDo, Sep 21, 2006 12:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Weil man bei Waittimer die FPS wirklich begrenzt. Das heißt, man hat dann 30 FPS. Der Sinn ist aber, dass man sich bei 800 FPS immer noch gleich schnell besegt, wie wenn man 30 hätte.
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)

StepTiger

BeitragDo, Sep 21, 2006 13:38
Antworten mit Zitat
Benutzer-Profile anzeigen
genau das selbe macht mein code aber auch ^^

nur createtimer ... ist nervig. Und DAS ist auch nur ein 3 Zeilen Code
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

DerHase

BeitragDo, Sep 21, 2006 13:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Macht das Flip 0 keine Probleme, wenn man es auf nem Röhrenmonitor mit niedriger Bildwiederholrate mit hohem FPS_MAX laufen lässt?
Wenn Du die FPS begrenzt, kannst Du doch gleich auch die CPU-Auslastung senken.

StepTiger

BeitragDo, Sep 21, 2006 13:54
Antworten mit Zitat
Benutzer-Profile anzeigen
um mal einen (jedoch unübersichtlichen) code zu zeigen, der immer die gleiche geschwindigkeit lässt:

Code: [AUSKLAPPEN]
;Global
Graphics3D 800,600,32,2
SetBuffer BackBuffer()

;Konstante
Const MAX_FPS=100

;Testobjekt
cone=CreateCone()

;Kamera
cam=CreateCamera()
PositionEntity cam,0,0,-10

;Hauptschleife
FPS_LAST=MilliSecs()
norm#=15
While Not KeyDown(1)

   ;Cls und FrameLimiter
   Cls
   While FPS_LAST>(MilliSecs()-(1000./MAX_FPS)):Delay FPS_LAST-(MilliSecs()-(1000./MAX_FPS))-1:Wend

   make=-(FPS_LAST-MilliSecs())/norm#
   For x=1 To make
      ;Entity bewegen
      TurnEntity cone,1.+Rnd(.5),1.+Rnd(.5),1.+Rnd(.5)
   Next

   ;Render und Update
   UpdateWorld   
   RenderWorld
   
   ;Fps berechnen und anzeigen
   fps#=(19*fps#+(1000./(MilliSecs()-FPS_LAST)))/20.:FPS_LAST=MilliSecs()
   Text 1,1,fps#

   ;Buffer tauschen
   Flip 0
   
Wend


@Hase:
Ich lass das Ding hier gerade auf einem Schulcomputer mit 1.7 Ghz laufen, der eine Ati Rage 128 Pro drinne hat 512 MB SD Ram.
Es läuft mit 1%-4% CPU Auslastung!

wenn bei dir die CPU Belastung groß ist, dann stammt dein PC aus den Anfängen des letzten Jahrhunderts.

Ich hab nicht umsonst delay in den klammern benutzt um es bei maximal 100FPS mit 99.999 laufen zu lassen
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

aMul

Sieger des Minimalist Compo 01/13

BeitragDo, Sep 21, 2006 15:58
Antworten mit Zitat
Benutzer-Profile anzeigen
TheMatrix hat Folgendes geschrieben:
Wieso benutzt du nicht CreatTimer(fps) plus WaitTimer(fps)?

Is kürzer und verwirrt nicht so Wink

WaitTimer ist der Rechenaufwendigste Befehl zum Warten(neben Flip 1). Delay ist meilenweit besser!


@Steptiger:
Warum nicht einfach wie folgt?
Code: [AUSKLAPPEN]
TurnEntity cone,rnd(1,1.5)*make,rnd(1,1.5)*make,rnd(1,1.5)*make

Eine For-Schleife ist soweit ich weiß langsamer und auf alle Fälle unübersichtlicher.(make als Float(#) zu deklarieren ist nebenbei auch sinnvoll Wink)
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

DerHase

BeitragDo, Sep 21, 2006 15:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Hehe, ja stimmt hab ich übersehn, das delay, sorry Smile
 

#Reaper

Newsposter

BeitragDo, Sep 21, 2006 16:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich finde den Code echt gut und gebräuchlich, wenn man z.B. ein kleines 3D DesktopSpiel machen will, also eins, das nicht im fullscreen laufen soll Wink Smile
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

StepTiger

BeitragDo, Sep 21, 2006 21:07
Antworten mit Zitat
Benutzer-Profile anzeigen
welchen sinn das mit dem drehen hat?

ganz einfach.
In diese for schleife kommt ALLES rein. Also ob Physik, KI, Steuerung.

Das sorgt dafür, dass das Programm IMMER gleich schnell läuft. Ob bei 10 fps oder bei 90
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group