Frames Ö.ö
Übersicht

![]() |
5k41Betreff: Frames Ö.ö |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey!
dieser code: Code: [AUSKLAPPEN] Graphics 800,600,32,1 SetBuffer BackBuffer() While Not KeyDown(1) time#=MilliSecs() If time#-oldTime#<>0 Then FPS#=Int(1000 / (time#-oldTime#)) If FPS#=0 Then FPS#=1 oldTime#=MilliSecs() Text 0,0,FPS Flip Cls Wend End läuft bei mir nur unter 37 frames Ö.ö (also manchmal sind och 80 dabei aber 37 ist die zahl die man immer lesen kann). Liegt es an einem Fehler in der Berechnung oder ist mein Rechner einfach soo schlecht? |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
Bud |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei mir zeigt's 71 an...
Hast du deine Bildschirmwiederholrate zu tief gestellt? (Meine ist auf 72...) Vllt. hast du einfach zu viele Programme im Hintergrund laufen... |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
mh also mein Monitor steht auf 100 Hertz von daher kanns das nicht sein... muss wohl an meinem Rechner liegen, wollte ja nur wissen obs ein Fehler in der Berechnung ist... danke!
MfG |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
FPS würde ich nie so errechnen sondern 999 ms lang eine temporäre Variable raufzählen und dann FPS auf diese Variable setzen, wie man es normalerweise sieht. Deine Variante ist zu sprunghaft was zu massiven Fehlern führt bei FPS abhängigen codes. Auch heisst FPS ja Frames per Second, nicht FPMS ![]() |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
in etwa so?
Code: [AUSKLAPPEN] Graphics 800,600,32,1 SetBuffer BackBuffer() timer=MilliSecs()+999 Dim FPS(1) While Not KeyDown(1) If timer<=MilliSecs() Then FPS(0)=FPS(1):FPS(1)=0:timer=MilliSecs()+999 If timer>MilliSecs() Then FPS(1)=FPS(1)+1 Text 0,0,FPS(0) Flip Cls Wend ist das richtig, oder gibts da noch ne elegantere Lösung? so hab ich immerhin schonmal 50 FPS ![]() MfG |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmmm, das hier funktioniert.
Code: [AUSKLAPPEN] frame=frame+4
ms=MilliSecs() If ms>mt mt=ms+246:fps=frame:frame=0 Text 0,0,fps Einfach vor dem Flip kopieren. |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich bin nicht so der copy-paste typ und irgendwie erkenne ich hinter deiner lösung keine logik... kannst du das noch ein bisschen erklären? | ||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aber sicher doch. ![]() 1) Man misst die Zeit zwischen einem Schleifendurchlauf in MS. Diese wird dann edit1: 1000 / Gemessene Zeit genommen. Vorteil: Man hat gleich nach dem zweiten Schleifendurchlauf schon ein Ergebnis und dann jeden Schleifendurchlauf. Nachteil: Die Zahl variiert so stark, daß man letztendlich keine Zahl mehr lesen kann. 2) Man misst zählt innerhalb eines bestimmten Zeitabschnittes die Frames. ZB alle 1000ms, dann wird die gezählte Zahl zur Anzeige gebracht. Vorteil: Genaue Zeitmessung ohne groß 'springenden' Zahlen. Nachteil: Schnelle Änderungen werden nur langsam angezeigt (max. 1 Sekunde warten). Code: [AUSKLAPPEN] frame=frame+4
ms=MilliSecs() If ms>mt mt=ms+246:fps=frame:frame=0 Text 0,0,fps Ich habe in meinem Beispiel mich für die zweite Möglichkeit entschieden, nur halt alle 1/4 Sekunde (250ms). Da jetzt bereits alle 1/4 Sekunde abgerechnet wird, muß die Framezahl *4 genommen werden (also frame=frame+4). Wurde die 1/4 Zeit überschritten, dann wird frame zu fps kopiert und frame wieder auf 0 gesetzt. Da es sogut wie nie ganau auf 250 oder 251 kommt, wird bereits bei >250-4=246 abgerechnet um 'genaue' Zahlen zu erhalten. edit2: Ausserdem habe ich versucht eine Möglichkeit zu finden, die mit einer Stelle im Code auskommt. Also keine Vorbereitenden Zeilen vor einer Hauptschleife etc. auskommt und denoch gute Werte anzeigt... |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
achso! Ok dann ist das ja das gleiche was ich gemacht hab, nur in kürzeren abständen ![]() Danke! MfG |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jepp: Aber du hast zwei Zeilen Code (timer=MilliSecs()+999:Dim FPS(1)) vorweg. Mag ich nicht so gerne. Ist aber Geschmackssache, da ich keine Lust habe, ein und das selbe 100mal in 100 verschiedenen Codes zu schreiben, kopiere ich dann einfach die Zeilen und setze sie in aktuelle Codes mit rein...
edit: Ausserdem fragst du zweimal in einem Schleifendurchlauf nach MilliSecs() ab. Würde ich nach Möglichkeit unterlassen. |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
mh ok dann schreib ich mir nun auch mal meine "allrund" lösung^^
~Edit~ Hier ist sie: Code: [AUSKLAPPEN] Graphics 800,600,32,1 SetBuffer BackBuffer() Const intervall=4 While Not KeyDown(1) news=MilliSecs() If news>old Then FPS=FPSCount:FPSCount=0:old=news+((1000/intervall)-intervall) If news<=old Then FPSCount=FPSCount+intervall Text 0,0,FPS Flip Cls Wend P.s.:Leider ist mein vorhaben das schön in eine Funktion zu packen gescheitert, da diese sowohl die Variable old als auch FPSCount zurückgeben müsste, damit man sie ihr wieder übergeben kann ohne mit Gloalen zu arbeiten... ![]() ~Edit 2~ Oha! Wenn man eine Taste nach dem Start des Programmes drückt fallen die Frames bei mir von 52 (auch schon sau wenig Ö.ö) auf 4! Ist aber auch irgendwie nur bei allerersten Tastendruck... mh |
||
fliege |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Da gabs doch mal was, mit dem konnte man aus zwei Variablen eine machen:
https://www.blitzforum.de/foru...highlight= Versuchs mal damit, hoffe es hilft dir. Fliege |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
hachja bitshiftig... hat mich bei directdraw schon immer so aufgeregt ![]() mfG |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo!
Sorry das ich diesen Thread nochmal aufgreife, aber irgendwas an meiner Berechnung muss falsch sein, ich find den Fehler aber nicht... :-/ Er zeigt bei mir dauerhaft 52 Frames an, ob ich meine Skyboxsymulation, nur die FPS anzeige oder meine GUI in der Hauptschleife hab... kann mir irgendwer helfen? MfG |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Und was ist daran genau falsch? Vielleicht synct dein Bildschirm einfach auf einer so niedrigen Frequenz? Versuch mal flip false ... | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo, hier ist mal meine Standard FPS Brerechnung für BB2D und BB3D, normal immer als Include Datei
BlitzBasic: [AUSKLAPPEN] ;Include ("D:\BB Includes\BB2D\FPS.bb") Und das mit Standart Code dann kannste das gleich ausprobieren ob es am Monitor liegt! Bei gedrückter F-Taste werden die Buffer sofort getauscht! Wenn es für Bplus sein soll, dann sollte man die Fps Anzeige mit BitmapFont texten, da Text bei Bplus saulangsam ist! |
||
[BB2D | BB3D | BB+]
|
D²O |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hier meine 2cents,
ein Array und eine funktion dazu. Code: [AUSKLAPPEN] Graphics 800,600,32,2
SetBuffer BackBuffer() Dim getfpstime(4) ;ist für die Funktion getfps notwendig Function getfps%(l_in = 1000) getfpstime(0) = MilliSecs() ;timer ;getfpstime(1) ;timertemp ;getfpstime(2) ;ausgabe ;getfpstime(3) ;counter getfpstime(3) = getfpstime(3) + 1 If (getfpstime(0)-getfpstime(1))>l_in getfpstime(1)= getfpstime(0) getfpstime(2) = getfpstime(3) getfpstime(3)= 0 EndIf Return getfpstime(2) End Function While Not KeyDown(1) Text 0,0,getfps%() Flip 1 Cls Wend End |
||
Blitz+; Blitz3d; BlitzMax; GLBasic; Purebasic;
GameMaker Studio 1.4xx; AGK; |
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
mhh... ich werds mir auf jedenfall nochmal alles angucken... muss aber nun erstmal an meine Daten... grrr ich hasse PCs
MfG |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group