fps errechnung immer nur stufenweise?
Übersicht

feuerball11Betreff: fps errechnung immer nur stufenweise? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich habe mal versucht ein fps counter selber zu schreiben (ich weis es gibt genug hier im forum, wil aber selber einen schaffen)
und habe folgenden code: Code: [AUSKLAPPEN] timer = CreateTimer(100)
Global tmp#,tmp2#,fps# Repeat set() WaitTimer(timer) check() Until KeyHit(1) Function set() tmp = MilliSecs() End Function Function check() tmp2# = MilliSecs() If tmp2#-tmp# <> 0 Then fps# = (1000/(tmp2#-tmp#)) EndIf Print fps# End Function nun die frage. warum kommen dort immer ergebnisse wie 100 oder 125 raus und nichts ungerades? |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
fps# behält so lange seinen alten Wert, bis er neu berechnet wird; tmp2#-tmp# <> 0 - ich würde einen anderen Ansatz wählen, bei dem man nicht so auf die Division mit Null aufpassen muss. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Weil [[Millisecs()]] nur einen Integer wiedergibt, keinen Float.
mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
feuerball11 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
tmp2#-tmp# <> 0 musste ich reinmachen, da sons fehler komtm weil ich durch null teile.
was für mich eh unverständlich is, da ich ja waittimer drinn habe... |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mh... funktioniert auch ohne die Sicherung. Endweder ich bekomme immer 100.0 oder 83,333 und 125.0 im Wechsel... Sind wohl Rundungsfehler - mit Integer wie ToeB schreibt, gibt's immer dieselben, glatten Werte. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
feuerball11 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
gut. verstanden..
nun hab ich nen anderes problem... ich habe ne funktion geschrieben, aber die gibt immer Invinity fps an... ich kann einfach nicht finden warum ![]() Code: [AUSKLAPPEN] Graphics 800,600,0,2
timer = CreateTimer(100) Global tmil#,tmil2# Global count,tcount#,ghfg#,yfgh Global asd[3] Global check Global yfghi = CreateImage(800,390) ;--------hauptschliefe Repeat WaitTimer(timer) check_fps() Until KeyHit(1) Function check_fps() ;---------fps prüfung ;-------variablen setzung tmil2# = MilliSecs() ghfg# = (1000/(tmil2#-tmil#)) ;----hud Cls Text 10,50,ghfg# yfgh = yfgh + 1 If yfgh > 800 Then yfgh = 0 SetBuffer ImageBuffer(yfghi) Cls SetBuffer BackBuffer() EndIf SetBuffer ImageBuffer(yfghi) Plot yfgh,(390-ghfg) Line 0,1,800,1 Line 0,389,800,389 SetBuffer BackBuffer() DrawImage yfghi,0,200 Flip ;---------hud ende ;-------variablen setzung 2 tmil# = MilliSecs() ;-----prüfung ende End Function tät mich freuen wenn mir jemand meinen fehler aufzeigt... |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Infinity entsteht, wenn du durch unendlich kleine Werte (rund Null) Teilst. Wenn du tmil und tmil2 als Integer deklarierst, bekommst du den entsprechenden Fehler.
Wenn der Timer nicht zwischen den Beiden verschiedenen Variablenzuweisungen liegt, vergeht keine Millisekunde, was in der Rechnung tmil2 - tmil = 0 ergibt... |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
feuerball11 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
aber ich habe doch wie folgt gemacht:
repeat timer var2 rechnung vari until ... also is zwischen vari und var 2 der timer.. also müste zeit vergehen oder??? |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nein, die Rechnung liegt zwischen den Variablen - nicht das warten auf den Timer.
Die Rechnung wird näherungsweise in 0 ms abgehandelt. Setze ein Delay ein und vergleiche: BlitzBasic: [AUSKLAPPEN] Delay(100) |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
feuerball11 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
mit delay ist es dann:
.... vari until timer delay var2 rechnung ... dürfte da nicht shcon der timer reichen??? ich weis immernochnicht wo das problem ist.. kann mir das jemand erklären?? |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du willst:
{ Startzeit Schleifeninhalt, Timer Endzeit Berechung der Differenz } Du machst: { Startzeit Berechung der Differenz HUD-Darstellung Endzeit Schleifeninhalt, Timer } Ist alles etwas verwirrend, deine Variablenbenennung und Konstruktion dazwischen mit HUD und Flip sind für mich grad nicht leicht zu übersehen... BlitzBasic: [AUSKLAPPEN] Graphics 800,600,0,2 |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
feuerball11 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich mache nicht
{ Startzeit Berechung der Differenz HUD-Darstellung Endzeit Schleifeninhalt, Timer } ich mache { timer , schleifeninhalt endzeit Berechung der Differenz HUD-Darstellung startzeit } deswegen sollte es doch eig funtzen oder?? weil zwischen start und endzeit leigt die schleife + timer habe das im code nochmal kommentiert: Code: [AUSKLAPPEN] Graphics 800,600,0,2
timer = CreateTimer(100) Global tmil,tmil2 Global ghfg,yfgh Global asd[3] Global check Global yfghi = CreateImage(800,390) ;--------hauptschliefe Repeat ; --- schleifeninhalt WaitTimer(timer) check_fps() Until KeyHit(1) Function check_fps() ;---------fps prüfung ;-------variablen setzung tmil2 = MilliSecs() ;----endzeit ghfg = (1000/(tmil2-tmil)) ;----hud - kann ignoriert werden Cls Text 10,50,ghfg yfgh = yfgh + 1 If yfgh > 800 Then yfgh = 0 SetBuffer ImageBuffer(yfghi) Cls SetBuffer BackBuffer() EndIf SetBuffer ImageBuffer(yfghi) Plot yfgh,(390-ghfg) Line 0,1,800,1 Line 0,389,800,389 SetBuffer BackBuffer() DrawImage yfghi,0,200 Flip ;---------hud ende ;-------variablen setzung 2 tmil = MilliSecs() ;--- startzeit ;-----prüfung ende End Function wenn ich die start und endzeit an die richtige stelle in der schleife setze. also: Code: [AUSKLAPPEN] Repeat
; --- schleifeninhalt tmil = MilliSecs() ;--- startzeit WaitTimer(timer) tmil2 = MilliSecs() ;----endzeit check_fps() Until KeyHit(1) dann kommt divided bei zoro... also scheint der timer defekt zu sein.. oder irre ich mich da?? |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group