PB und Deltatime

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
wpshadow
Beiträge: 22
Registriert: 21.11.2010 21:56
Computerausstattung: i7 3770, 8gb RAM, Samsung 840 PRO SSD
Pure Basic 5.60

PB und Deltatime

Beitrag von wpshadow »

Hallo,

ich habe gerade erst wieder begonnen und wollte mal fragen, wie genau man die Geschwindigkeit per Frames berechnen bzw. ausgeben lassen kann?

Im Grunde wäre die Deltatime genau das, was ich benötigen würde... Leider habe ich noch nichts passendes zu diesem Thema gefunden.

Verwendet PB hier ggf. ein anderes Verfahren wie z.B. einen fixen Timer, der im Hintergrund mit läuft?

LG

W.
;-)
Pure Basic 5.60
Benutzeravatar
uweb
Beiträge: 461
Registriert: 13.07.2005 08:39

Re: PB und Deltatime

Beitrag von uweb »

Ich muss zugeben, dass ich bis vor 5 Minuten 0,000 Ahnung von Geschwindigkeit per Frames oder Deltatime hatte.
Unter einer Framerate kann ich mir etwas vorstellen - kam damit aber nie in Berührung weil ich noch nie etwas im screen gemacht habe.

Nach kurzem googlen bin ich hier gelandet: https://www.scirra.com/tutorials/67/del ... endence/de


Wenn ich das richtig verstanden habe wird bei delta-time dadurch Bildfrequenz-Unabhängigkeit erreicht, dass man mittels eines Timers dafür sorgt, dass sich etwas zeit- statt bildfrequenz-abhängig bewegt. delta-time scheint also mit einem fixen Timer, der im Hintergrund mit läuft, zu arbeiten und kein anderes Verfahren zu sein.

Ich habe aber auf die schnelle nichts zu dem Thema in der Windows-API gefunden. Also gehe ich davon aus, dass da jeder seine eigene Suppe kocht und entweder eine Möglichkeit zum Auslesen der delta-time anbietet oder nicht.

Da ich in der PureBasic-Hilfe keine Möglichkeit gefunden habe sie zu setzen gibt es wohl von Haus aus auch keine Möglichkeit sie zu lesen. Selbst kann man sich aber sehr wohl so etwas basteln : http://www.purebasic.fr/english/viewtopic.php?p=496697

Einen fremden Timer auszulesen stelle ich mir schwierig vor, vor Allem weil da es ja mehrere geben kann..
Theorethisch sollte es möglich sein sehr schnell hintereinander Screenshots zu erstellen und sie zu vergleichen. Das müsste aber sehr viel schneller passieren als ein Tick - also reine Theorie.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: PB und Deltatime

Beitrag von STARGÅTE »

Platformunabhängig kannst du die Zeit in PureBasic auf etwa 1-10 ms zwischen zwei ElapsedMilliseconds() aufrufen messen.
Um genauere Messwerte zu erhalten könntest du über mehrere Frames messen und dann durch die Anzahl der Frames teilen.

Unter Windows gibt es dann noch QueryPerformanceCounter_(), damit kommst du dann auch zwischen zwei Aufrufen in den Bereich von wenigen Mikrosekunden.

Code: Alles auswählen

Global QueryPerformanceFrequency.q : QueryPerformanceFrequency_(@QueryPerformanceFrequency)

#ElapsedTime_Second      = 1e0
#ElapsedTime_Millisecond = 1e3
#ElapsedTime_Microsecond = 1e6

; Returns the elapsed time between this call and the last call. 
Procedure.d ElapsedTime(Unit.d=#ElapsedTime_Second)
  
  Protected Counter.q, Time.d
  Static QueryPerformanceCounter.q
  
  QueryPerformanceCounter_(@Counter)
  Time = Unit * (Counter-QueryPerformanceCounter) / QueryPerformanceFrequency
  QueryPerformanceCounter = Counter
  
  ProcedureReturn Time
  
EndProcedure


ElapsedTime()

Delay(0)

MessageRequester("", StrF(ElapsedTime(#ElapsedTime_Microsecond)))
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
wpshadow
Beiträge: 22
Registriert: 21.11.2010 21:56
Computerausstattung: i7 3770, 8gb RAM, Samsung 840 PRO SSD
Pure Basic 5.60

Re: PB und Deltatime

Beitrag von wpshadow »

Hi,

klasse! Damit hab ich genau das, was mir für mein kleines Programmchen gefehlt hat.

Danke euch.

Ich halte euch über das Projekt auf dem Laufenden.

LG

W.
;-)
Pure Basic 5.60
Antworten