FPS??
Hmmm...
Ich denke, das könnte man so machen, indem man zu anfang der Hauptschleife die seit dem Systemstart vergangenen Millisekunden (ElapsedMilliseconds()) herausfindet [starttime], dasselbe zu Schluss der Schleife [stoptime], dann das vom Schluss minus das vom Anfang [stoptime - starttime = vergangene ms] , dann noch 1000 durch die vergangenen millisekunden dividieren. Das müsste gehen. Ich glaub es steht auch in der Hilfe, kannst ja mal nachsschauen. Ich hoffe, das hilft dir.
Tschüss,
AndyX
Tschüss,
AndyX
hmm..
nur bei mir kommt da immer 0 raus.
nur bei mir kommt da immer 0 raus.
Code: Alles auswählen
Repeat
start=ElapsedMilliseconds()
Code...
stop=ElapsedMilliseconds()
clearscreen(0,0,0)
fps=start-stop
fps=fps/1000
StartDrawing(ScreenOutput())
DrawText(Str(fps)+"FPS")
StopDrawing()
FlipBuffers()
Until KeyboardPushed(#PB_KEY_ESCaPE)-
DarkDragon
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Such mal nach InitGameTimer in diesem und im alten Forum, dürfte dir weiterhelfen, wenn du den Topic findest, den ich meine.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Code: Alles auswählen
#k = 10
Global fps.f
Procedure FPSCounter(hwnd,nIDEvent,uElapse,lpTimerFunc)
If fps/#k < 1:SetGadgetText(0,"SPF: "+StrF(#k / fps)):Else:SetGadgetText(0,"FPS: "+StrF(fps / #k)): EndIf
While WindowEvent():Wend
EndProcedure
CreateGadgetList(OpenWindow(0,0,0,200,20,#PB_Window_ScreenCentered|#PB_Window_SystemMenu,"FPS"))
StringGadget(0,0,0,200,20,"",#PB_String_ReadOnly)
SetTimer_(WindowID(),1,1000,@FPSCounter())
While WindowEvent():Wend
Repeat
st = timegettime_()
Delay(5); ...
fps - (fps/#k) + (1000/(timegettime_()-st))
Until WindowEvent() = #PB_Event_CloseWindowfps ist allerdings nicht die wirkliche FPS-Anzahl sondern fps/#k.

[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
hi Lukas-P,
ich würde es so machen:
mfG
Tobi
ich würde es so machen:
Code: Alles auswählen
Global fps.l, Timer.l
Procedure FPSCounter()
Zeit = ElapsedMilliseconds()
If Timer < Zeit
SetGadgetText(0,"FPS: "+Str(fps))
Timer = Zeit + 1000
fps = 0
EndIf
fps + 1
EndProcedure
CreateGadgetList(OpenWindow(0,0,0,200,20,#PB_Window_ScreenCentered|#PB_Window_SystemMenu,"FPS"))
StringGadget(0,0,0,200,20,"",#PB_String_ReadOnly)
Repeat
FPSCounter()
Delay(4)
Until WindowEvent() = #PB_Event_CloseWindowTobi
Hier mal meine aktuelle Methode, wobei ich auch noch andere Benutze...
Aber die hier mißt immer den Durschschnitt innerhalb von 10 Sekunden, wobei man die Zeit natürlich variieren kann....
Aber die hier mißt immer den Durschschnitt innerhalb von 10 Sekunden, wobei man die Zeit natürlich variieren kann....
Code: Alles auswählen
Procedure.f FpS2()
Static Start_Zeit, Frames, SendFrames.f
Zeit_akt = GetTickCount_()
Frames + 1
ZeitU = Zeit_akt - Start_Zeit
If ZeitU
SendFrames = Frames / ZeitU
EndIf
If Zeit_akt >= Start_Zeit + 10000
Start_Zeit = Zeit_akt
Frames = 0
EndIf
ProcedureReturn SendFrames * 1000
EndProcedure