Zeit ohne Millisecs

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Sterbendes Lüftlein

Betreff: Zeit ohne Millisecs

BeitragDi, Dez 21, 2010 22:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Text entfernt

Holzchopf

Meisterpacker

BeitragDi, Dez 21, 2010 22:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Funktioniert gut.

Alternativ kannst du auch das machen:
BlitzBasic: [AUSKLAPPEN]
Graphics 800,600,32,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()

Global F_TIMER = CreateTimer(60)

Global x
Global y

Repeat
Cls
FlushMouse
FlushKeys

Text 20,20,x/60.0

x = x +WaitTimer(F_TIMER)
Flip 0
Until KeyHit(1)

End


Der unterschied zu deiner Variante ist halt, dass hier der Zähler "nachgestellt" wird, falls das Programm mal hätte angehalten worden sein (zB beim Verschieben des Fensters).

Musst selber entscheiden, welche Methode für dich eher geeignet ist.

mfG
Holzchopf
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

mpmxyz

BeitragDi, Dez 21, 2010 22:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Auf die Schnelle fallen mir diese Aspekte auf:
Ziehe mal das Programmfenster hin und her und schaue, wie sich der Wert verändert!
Das Programm wird außerdem immer wieder angehalten und kann in dieser Zeit nichts machen.
Man muss außerdem aufpassen, dass ein Rechenabschnitt nicht länger als eine Sekunde braucht, wenn die "Uhr" nicht aus dem Takt kommen soll.
Ich würde die MilliSecs-Variante bevorzugen. Wink
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
 

CO2

ehemals "SirMO"

BeitragDi, Dez 21, 2010 22:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe das auchmal versucht und wie folgt umgesetzt:

BlitzBasic: [AUSKLAPPEN]
Graphics 1024, 768, 32, 3

SetBuffer BackBuffer()

Global FPS = 60
Global FPSTimer = CreateTimer(FPS)

Global Durchlaeufe = 0
Global Sekunden = 0

Repeat
Cls
WaitTimer(FPSTimer)

Durchlaeufe = Durchlaeufe + 1
If Durchlaeufe >= FPS Then
Sekunden = Sekunden + 1
Durchlaeufe = 0
EndIf

Text 10, 10, "Verstrichene Sekunden: " + Sekunden + " (" + Durchlaeufe + " Durchläufe)"

Flip

Until KeyHit(1)
End


Und egal wieviele FPS du machst, die Sekunden werden immer richtig abgezählt
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Tankbuster

BeitragDi, Dez 21, 2010 22:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber auch nur, solange man das Fenster nicht verschiebt.
Ich finde deshalb Holzchopfs Variante am tollsten Wink

EDIT:

Mir ist aufgefallen, dass das aber nicht mit den Millisecs()-Werten übereinstimmt. Es rennt zu schnell

BlitzBasic: [AUSKLAPPEN]
Graphics 800,600,32,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()

Global F_TIMER = CreateTimer(60)

Global x
Global y
start=MilliSecs()
Repeat
Cls
FlushMouse
FlushKeys


Text 20, 40,(MilliSecs()-start)/1000

Text 20,20,x/60.0

x = x +WaitTimer(F_TIMER)
Flip 0
Until KeyHit(1)

End
Twitter
Download Jewel Snake!
Windows|Android

Holzchopf

Meisterpacker

BeitragDi, Dez 21, 2010 23:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt. Da war mal was.

Bei einem 60Hz-Timer soll das Programm jeweils (1000ms /60 =) 16.667ms warten. Allerdings wird der Wert abgerundet und der Timer wartet jeweils nur 16ms.
Man ist auf der sicheren Seite, wenn man den Timer zB auf 50Hz stellt (1000ms /50 = 20ms, ganz ohne zu runden Wink )

mfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Eingeproggt

BeitragMi, Dez 22, 2010 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Nebenbemerkung:
Unbedingt Holzchopf's Variante benutzen und CO2 mal ganz vorsichtig darauf hinweisen, dass Flip + Timer schlecht ist. Und vor allem im Sinne von Zeitbestimmung fatal da Flip auch noch auf VSync wartet! Flip 0 + Timer ist die richtige Wahl. (eigentlich bist du, CO2, schon lang genug dabei das zu wissen...)

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

Sterbendes Lüftlein

BeitragMi, Dez 22, 2010 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Text entfernt

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group