Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Framerate berechnen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 16.10.2007, 19:35    Titel: Framerate berechnen Antworten mit Zitat

Hi,

Ich würde gern wissen, wie man ab effizientesten die Framerate berechnen kann.

Danke im voraus lächeln .
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 16.10.2007, 19:36    Titel: Antworten mit Zitat

Timer Setzen, jedes neu gezeichnete bild zählen und nach einer sekunde diese zahl ausgeben... wie der name schon sagt (is auch logisch) Frames Per Second.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 16.10.2007, 19:50    Titel: Antworten mit Zitat

da gäbe es nur ein problem:
Code:
dim as double localtime,endtime,fps
do
    localtime = timer
    locate 1,1:print fps*60*60*60*60
                    ' wenn man jetzt hier ein sleep 1 reinhaut
                    ' wird fps größer was natürlich nicht stimmt^^
    endtime = timer
    fps=endtime-localtime
    loop until inkey = chr(27)

_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
stuner



Anmeldungsdatum: 29.06.2006
Beiträge: 45

BeitragVerfasst am: 16.10.2007, 20:04    Titel: Antworten mit Zitat

Code:
Dim As Double timer1,frames
Dim As Integer fps,count

Timer1 = Timer 'Startzeit setzen
Do
   frames += 1 'Frames zählen
   
   'Programm Start
   For count = 1 To 1000
      Locate 1,1
      Print "Hallo"
   Next   
   'Programm Ende
   
   fps = frames/(Timer - timer1) 'FPS berechnen | FPS = frames/s
   Locate 2,1   
   Print "FPS: ";fps
Loop Until INKEY = CHR$(255)+"k"

Weicht ein wenig von Jojos Vorschlag ab, sollte aber trotzdem funktionieren.
Code sollte eigentlich selbsterklärend sein...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 16.10.2007, 21:14    Titel: Antworten mit Zitat

dies gibt eine weniger sprunghafte Anzeige der Fps
Code:
Screen 18,32
Dim As Integer frame
Dim As Single t = Timer
Do
  Screenlock
  'Cls
  Line (0, 0) - (799, 599), t * 2500, bf
  Screenunlock
 
  frame += 1
  If frame >= 100 Then
    Windowtitle "Fps = " & Str(Int(frame / (Timer - t)))
    t = Timer
    frame = 0
  End If
 
Loop Until Inkey = Chr(27)
End

_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 16.10.2007, 21:26    Titel: Antworten mit Zitat

AndT hat Folgendes geschrieben:
' wenn man jetzt hier ein sleep 1 reinhaut
' wird fps größer was natürlich nicht stimmt^^


warum denn das bitte?! wenn du eine verzögerung einbaust, kannst du nur weniger pro sekunde zeichnen was auch dazu führt, dass du weniger FPS hast...
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
stuner



Anmeldungsdatum: 29.06.2006
Beiträge: 45

BeitragVerfasst am: 16.10.2007, 21:37    Titel: Antworten mit Zitat

volta hat Folgendes geschrieben:
dies gibt eine weniger sprunghafte Anzeige der Fps


Ich würde sagen, genau umgekehrt.
In mein Programm hat sich ein "kleiner" Fehler eingeschlichen: Es berechnet nicht die aktuelle FPS-Rate, sondern die durchschnittliche.... peinlich

Hier der berichtigte Code:

Code:
DIM AS DOUBLE timer1
DIM AS INTEGER fps,count

Do   
   Timer1 = TIMER 'Startzeit setzen
   
   'Programm Start
   FOR count = 1 TO 1000
      LOCATE 1,1
      PRINT "Hallo"
   NEXT   
   'Programm Ende
   fps = 1/(TIMER - timer1) 'FPS berechnen | FPS = frames/s
   LOCATE 2,1   
   PRINT "FPS: ";fps;"  "
LOOP UNTIL INKEY = CHR$(255)+"k"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
d1rty.h4rry



Anmeldungsdatum: 05.10.2006
Beiträge: 116
Wohnort: Cassel

BeitragVerfasst am: 16.10.2007, 23:02    Titel: Antworten mit Zitat

hi^^ also ich hab das bei meinen Programmen immer so gemacht

Code:

Dim as integer Timer1, FPS,FCount  'Definitionen der Variablen
timer1=timer+1                     'Start-Timer festlegen

Do                                 'Hauptschleife

FCount +=1                         'Frames zählen

If timer >= timer1 then            'Wenn 1 Sekunde vergangen ist
   FPS=Fcount                      'werden die Zählvorgänge gespeichert
   FCount=0                        'der Zähler zurückgesetzt
   Timer1=timer+1                  'und der Timer neu gesetzt
EndIf

'Dein Programmcode
'#############

? "Hello World"
For X= 1 to 50
    Locate INT( RND * 20 ), INT( RND * 30 )
    ? "LoL"
next

'#############

Locate 1,1
? "FPS :";FPS

Loop




Ich weis aber net ob das so effizient ist happy
Probiers aus happy lächeln

D1RtY happy H4RrY

Edit: "r" vergessen bei Immer grinsen
_________________
"Das Fernsehen ist so etwas wie eine geistige Neutronenbombe, das Gehirn wird weggestrahlt. Nur der Kopf bleibt da!" -Olliver Kalkhofe
-> http://fernsehkritik.tv/tv-magazin/
"Wenn alle Stricke reißen, dann häng ich mich auf", Karl Kreiss lächeln


Zuletzt bearbeitet von d1rty.h4rry am 17.10.2007, 19:48, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 17.10.2007, 16:30    Titel: Antworten mit Zitat

@jojo: mit fps meinte ich natürlich die variable aber egal mit den Augen rollen
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 17.10.2007, 16:33    Titel: Antworten mit Zitat

Dein Code ist auch sowas von sinnlos... mit den Augen rollen

Ich weiß nicht, was du dir genau unter FPS vorstellst, aber eigentlich sollte man das in gleichmäßigen Abständen messen, und was du da misst (und willkürlich *60*60*60*60 nimmst, was sich übriogens schneller als 60^4 schreiben lässt), ist einfach keine Messung, sondern Schwachsinn...
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 17.10.2007, 16:35    Titel: Antworten mit Zitat

Ich wusste ja auch nicht wie man FPS berechnet aber jetzt weisss ichs grinsen

// Edit:

Meine Variante:
Code:
dim as DOUBLE start_fpstimer,stop_fpstimer
dim as integer fps,frame
dim as integer Abstand
screen 14

Abstand = 35 ' bestimmt nach wievielen Frames die FPS angezeigt werden soll.

Do
    Frame+=1
    start_fpstimer=timer
   
    'Programmcode
   
    'SLEEP 1
    'Programmcodeende
   
    if frame = Abstand then
        stop_fpstimer =timer
        fps = 1/(start_fpstimer-timer)
        frame = 0
    end if
    windowtitle "FPS: "+str(-fps)
    Loop until inkey=chr(27)
zwinkern
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 17.10.2007, 17:25    Titel: Antworten mit Zitat

was machst du denn da schon wieder für einen mist?! O_o
Was das Programm berechnet, stimmt mal wieder nicht...
Wieso machst du nicht einfach das, was man dir sagt und was die Definition von FPS angibt: Die Frames pro Sekunde?

Du musst die Frames hochzählen, und nach einer Sekunde (wenn's schneller gehen muss, geht auch ne halbe sekunde, dann muss die FPS-Zahl aber doppelt genommen werden) diese Zahl ausgeben...
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
d1rty.h4rry



Anmeldungsdatum: 05.10.2006
Beiträge: 116
Wohnort: Cassel

BeitragVerfasst am: 17.10.2007, 19:47    Titel: Antworten mit Zitat

lol Andt das funktioniert ja überhaupt nicht richtig happy

Ich habe den eindruck du liest deine Antworten überhaupt nicht zwinkern
_________________
"Das Fernsehen ist so etwas wie eine geistige Neutronenbombe, das Gehirn wird weggestrahlt. Nur der Kopf bleibt da!" -Olliver Kalkhofe
-> http://fernsehkritik.tv/tv-magazin/
"Wenn alle Stricke reißen, dann häng ich mich auf", Karl Kreiss lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 17.10.2007, 20:46    Titel: Antworten mit Zitat

Aber sobald dein Code funktioniert, kannst du das Ganze ja mal in 'ne schöne Lib packen.

(SCNR)
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz