Wie ermittelt man die FPS-Rate?

Übersicht BlitzBasic FAQ und Tutorials

Neue Antwort erstellen

 

Ensign Joe

Betreff: Wie ermittelt man die FPS-Rate?

BeitragFr, März 26, 2004 23:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Titel sagt alles

Freeman

BeitragFr, März 26, 2004 23:21
Antworten mit Zitat
Benutzer-Profile anzeigen
so :

Code: [AUSKLAPPEN]

Function FPS()
Frames = Frames + 1

 If ZaehlStart + 1001 < MilliSecs() Then
  FramesJeSekunde = Frames
  Frames = 0
  ZaehlStart = MilliSecs()
 EndIf 

 Text 100, 10, FramesJeSekunde + " FPS"
End Function


mfg Freeman
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, März 27, 2004 0:26
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,
so mach ich es...
Code: [AUSKLAPPEN]
Dim FPS(3)


Code: [AUSKLAPPEN]
Text 9,9,"FPS:"+FPS(1):FPS(2)=FPS(2)+1:If MilliSecs()>FPS(3)+999 Then FPS(1)=FPS(2):FPS(2)=0:FPS(3)=MilliSecs()

ist im prinzip genauso
brauche allerdings keine Globalen Variablen machen da Arrays immer Global sind
[BB2D | BB3D | BB+]

Mr.Keks

BeitragSa, März 27, 2004 8:47
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm, ich mache das auch so wie freeman, nur dass ich was von der funktion zurückliefern lasse. habe die immer in meiner util.bb, die ich in dutzenden meiner projekte benutze. ist in sofern praktisch, dass man im hauptprogramm eigentlich nur zu schreiben hat:
Code: [AUSKLAPPEN]
Text 0,0,"fps: "+util_fps()

find ich toll so Wink. man muss nur aufpassen, nicht zweimal diesen text einzufügen, da das zu einer fpsverdopplung führt, wie es mir kürzlich passiert ist Smile
Code: [AUSKLAPPEN]
Global fps_frames,fps_ms=MilliSecs(),fps_anzeige

Function Util_Fps()
   fps_frames = fps_frames+1
   If MilliSecs()-fps_ms >= 1000 Then
      fps_anzeige = fps_frames
      fps_frames   = 0
      fps_ms      = MilliSecs()
   EndIf
   Return fps_anzeige
End Function


habe gerade noch einen fpszähler aus einem älteren projekt von mir gefunden... nicht ganz so schön geschrieben, aber auch effektiv.
Code: [AUSKLAPPEN]
If fpsc >= 10 Then fps=1000.00/Float#(MilliSecs()-t)*10 : fpsc = 0 : t=MilliSecs()
fpsc = fpsc+1
MrKeks.net

Freeman

BeitragSa, März 27, 2004 14:24
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Ensign Joe

doch das passt mit der Function . Du musst natürlich die Funktion noch aufrufen und nicht das cls + flip vergessen

beispiel :

Code: [AUSKLAPPEN]
 
Function FPS()
Frames = Frames + 1

 If ZaehlStart + 1001 < MilliSecs() Then
  FramesJeSekunde = Frames
  Frames = 0
  ZaehlStart = MilliSecs()
 EndIf

 Text 100, 10, FramesJeSekunde + " FPS"
End Function

graphics 800,600
setbuffer backbuffer()

repeat
cls
fps()
flip
until keydown(1)



probier mal , das muss doch klappen Wink
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, März 27, 2004 14:56
Antworten mit Zitat
Benutzer-Profile anzeigen
@Freeman:
deine variablen sind nicht Global, deswegen funst das auch nicht!
Code: [AUSKLAPPEN]
Global ZaehlStart,FramesJeSekunde ,Frames

setz das oben rein und es geht!
[BB2D | BB3D | BB+]

Travis

BeitragSa, März 27, 2004 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich finde die Version von Inarie am besten nachvollziehbar. Ich habe das Problem mit der Verdopplung der FPS-Werte mal gelöst. Die Funktion wird jetzt mit einem Parameter aufgerufen. Dieser bestimmt, ob der Counter die Framerate zählen soll oder ob er sie nur anzeigen soll.

Code: [AUSKLAPPEN]


Global FPSSEC = MilliSecs(), FPS, FRAMES

SetBuffer BackBuffer()
 Repeat
  Cls
   Text 0,0, FPS(1) ; Anzeigen und zählen
   Text 0,10, FPS(0) ; Nur anzeigen
  Flip
 Until KeyHit(1)
End

; --- Frames per Second ---
Function FPS(MODE)
 
 If MODE = 1 Then
  FRAMES = FRAMES + 1
  If MilliSecs() - FPSSEC => 1000 Then
   FPS = FRAMES
   FRAMES = 0
   FPSSEC = MilliSecs()
  EndIf
 EndIf

 Return FPS
End Function
; --- Frames per Second ---
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

Triton

BeitragSa, März 27, 2004 17:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich machs immer ungefähr so:

Code: [AUSKLAPPEN]
 
loops=0
time1 = MilliSecs()
While Not KeyDown(1)
   loops = loops+1
   Color 255,255,255
   Text 610, 50, fps
   If MilliSecs() - time1 > 1000 Then fps = loops:loops = 0:time1 = MilliSecs()
...
Wend

 


bzw lieber so, wenn die Hauptschleife übersichtlicher bleiben soll:

[code]
Graphics 640,480,16,2

Global fpsrate,loops, fpstime

While Not KeyDown(1)
Color 255,255,255
Text 10, 10, fps()
Plot MouseX(),MouseY()
Flip
Cls
Wend


;---
Function fps()
loops = loops+1
If MilliSecs() - fpstime > 1000 Then
fpsrate = loops
loops = 0
fpstime = MilliSecs()
End If
Return fpsrate

End Function
[/code}
  • Zuletzt bearbeitet von Triton am Mi, Aug 23, 2006 19:02, insgesamt einmal bearbeitet
 

Gast

BeitragMo, Mai 24, 2004 12:30
Antworten mit Zitat
Ich mach das immer so:

Code: [AUSKLAPPEN]

;Diese Funktion gibt die FPS aus
Global lastTime

Function fps(posX=0,posY=0)   
   Color 255,255,255   ;Farbe weiß
   
   If lastTime < MilliSecs()
      currentFrames = 1000/(MilliSecs()-lastTime)
   End If
   
   Text posX,posY,"FPS: "+currentFrames
   lastTime = MilliSecs()
End Function


die funktion gibt die fps oben links aus wenn keine parameter übergeben werden.

PhOENiX

BeitragMo, Aug 16, 2004 17:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Und wo kommt das nachher im Gnazen programm hin ??

MFG PhOENiX

Neue Antwort erstellen


Übersicht BlitzBasic FAQ und Tutorials

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group