Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Timer Interval > Zeit anzeige ? (https://www.delphipraxis.net/104669-timer-interval-zeit-anzeige.html)

mimi 8. Dez 2007 17:08


Timer Interval > Zeit anzeige ?
 
Hallo,
In meinem Spiel möchte ich gerne eine genaue Zeitangabe habe wie lange das spiel schon läuft bzw. das Level und eine FPS anzeige möchte ich habe.

Der Timer.Interval steht auf 10 um die CPU nicht zu überlassten bzw. auf 100% zu bringen. schalte ich sie auf 1 ist sie auf 100% 2 Würde auch noch gehen, aber 10 reicht voll aus.
Delphi-Quellcode:
  inc(fps);
  if ms+1 >= 150 then begin
    ms:=0;
    UpdatetDisplayInfo(2);
    fps:=0;

    if Sekunden +1 >=60 then begin
      Sekunden:=0;
      inc(Minuten);
    end
    else
      inc(Sekunden);
  end
  else
    inc(ms);
So mache ich die Zeitberechnung... wobei ich weiß nicht wie ich diesen wert 150 anpasse weil ich kann ja nicht von 1000 ausgehen, das würde ja bedeuten das der Intervall auf 1 steht, aber das tut er nicht, er steht auf 10...
wie kann ich jetzt das Verhältnis richtig berechnen ?

Apollonius 8. Dez 2007 17:17

Re: Timer Interval > Zeit anzeige ?
 
Warum verwendest du nicht Funktionen wie Now oder GetTickCount? Du musst einfach den Anfangswert vom jetzigen Wert abziehen. Das ist deutlich genauer als die Timer-Variante.

Christian Seehase 8. Dez 2007 17:23

Re: Timer Interval > Zeit anzeige ?
 
Moin Michael,

beim Timer.Interval steht die 10 für 10 Millisekunden, und das dürfte schon unterhalb der Auflösung des Timers liegen.

himitsu 8. Dez 2007 17:31

Re: Timer Interval > Zeit anzeige ?
 
Zitat:

Zitat von mimi
Der Timer.Interval steht auf 10 um die CPU nicht zu überlassten bzw. auf 100% zu bringen. schalte ich sie auf 1 ist sie auf 100% 2 Würde auch noch gehen, aber 10 reicht voll aus.

Abgesehn davon das bei 1 eh fals gemessen würde.
TTimer arbeitet mit mit der selben Teit wie GetTickCount und dieses Zeit läuft nur "aktuell" in 10ms-Schritten und mißt dacher nur bei größeren Intervallen genau.

also einfach beim Spielstart die Zeit merken.
Start1 := Now; (TDateTime)
oder für "halbwegs genaue" (Kurzzeit)Messungen
Start2 := GetTickCount; (LongWord)

und die aktuelle Dauer/Zeit
Jetzt1 := Now - Start1; (Jetzt1 in Millisekunden)
Jetzt2 := GetTickCount - Start2; (Jetzt2 als TDateTime in Tagen+Zeit)

mimi 8. Dez 2007 18:03

Re: Timer Interval > Zeit anzeige ?
 
Vielen Dank himitsu so hat es geklappt, allerdings möchte ich die Zeit in Minuten und Sekunden anzeigen....

dazu finde ich leider nix.....

himitsu 8. Dez 2007 18:15

Re: Timer Interval > Zeit anzeige ?
 
das brauchst du dir doch nur rausrechen?

TDateTime:
1,0 = 1 Tag
0,5 = 0,5 Tage = 12 Stunden
0,25 = 1/4 Tag = 6 Stunden
0,1 = 1/10 Tag = 2 Stunden 24 Minuten

GetTickCount/Millisekunden:
1000 = 1 Sekunde
60000 = 1 Minute
...

oder du nimmst Funktionen wie Delphi-Referenz durchsuchenFormatDateTime :zwinker:

mimi 8. Dez 2007 18:17

Re: Timer Interval > Zeit anzeige ?
 
danke, ich habe in der code lib diese Funktion gefunden:
Delphi-Quellcode:
//    Seconds := (Ticks div 1000) mod 60;
//    Minutes := (Ticks div 60000) mod 60;
und das klappt beim ersten test hatte ich einfach nur 100 geschrieben stat 1000 darum die Frage.... jetzt klappt es, aber wie kann ich jetzt meine FPS anzeige dort einbauen ?

himitsu 8. Dez 2007 18:45

Re: Timer Interval > Zeit anzeige ?
 
Zitat:

Zitat von mimi
danke, ich habe in der code lib diese Funktion gefunden:
Delphi-Quellcode:
//    Seconds := (Ticks div 1000) mod 60;
//    Minutes := (Ticks div 60000) mod 60;
und das klappt beim ersten test hatte ich einfach nur 100 geschrieben stat 1000 darum die Frage.... jetzt klappt es, aber wie kann ich jetzt meine FPS anzeige dort einbauen ?

FPS = Bilder / Zeit_in_Sekunden

Delphi-Quellcode:
FPS := angeeigte_Bilder div (Ticks div 1000);
//oder
FPS := (angeeigte_Bilder * 1000) div Ticks;

mimi 8. Dez 2007 21:39

Re: Timer Interval > Zeit anzeige ?
 
Zitat:

angeeigte_Bilder
ist das einfach ein Zähler der beim Timer hoch gezählt wird ?
muss er auch auf 0 gesetzt werden ? oder eher nicht??


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz