Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

DrthM2001

Alter Hase

  • »DrthM2001« ist der Autor dieses Themas

Beiträge: 721

Wohnort: Karlsruhe

  • Private Nachricht senden

1

18.07.2005, 18:40

Frametime-counter läuft unterschiedlich schnell

Erstmal der Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
CalculateFrameRate()
{
    static float lastTime           = 0.0f;
    static float Time = 0.0f;
    static unsigned int FrameCounter= 0;

    float currentTime = timeGetTime() * 0.001f; //->Frametime*1=1 pro sekunde       


    Game.FrameTime = (currentTime - Time);

    if(Game.FrameTime<0)
        Game.FrameTime=-Game.FrameTime;
    if(Game.FrameTime>1.f)
        Game.FrameTime=0;


    Time = currentTime;
    FrameCounter++;

    if( currentTime - lastTime > 1.0f )
    {
        lastTime = currentTime;
        Game.FPS=FrameCounter; 
        FrameCounter = 0;
    }
}


Meistens funktioniert er auch. aber manchmal-auf anderen computern öfter- läuft alles dreimal so schnell, oder langsamer! timegettime scheint aber zu funktionieren! da muss man doch auch nichts initialisieren oder?
wenn der counter einmal korrekt läuft, tut er dass auch die restliche windows-sitzung, also bis zum neustart. manchmal ändert sichs dann halt wieder.
ich rufe die funktion einmal pro frame-loop auf. was kann man da denn falsch machen?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

18.07.2005, 19:01

Benutz mal den Performance-Counter...
QueryPerformanceFrequency und QueryPerformanceCounter

DrthM2001

Alter Hase

  • »DrthM2001« ist der Autor dieses Themas

Beiträge: 721

Wohnort: Karlsruhe

  • Private Nachricht senden

3

18.07.2005, 19:39

Ich weiß jetzt zwar immernoch nicht woran es lag, aber wie es scheint, funktioniert es jetzt.
merci. ;)

DrthM2001

Alter Hase

  • »DrthM2001« ist der Autor dieses Themas

Beiträge: 721

Wohnort: Karlsruhe

  • Private Nachricht senden

4

18.07.2005, 20:55

Ich hab das jetzt so ähnlich wie im Buch bei mir eingebaut. Ich benutze für Input (noch) kein DirectInput, sondern GetKeystate und Getcursorpos. Aber immer wenn ich jetzt die maus bewege oder eine tastatureingabe verursache, steigt (!) die fps zahl sehr an, von 400 auf 20000. aber nur ganz kurz eben. auch so schwankt die framerate von 300-600. Muss jetzt DirectInput her, oder was kann man dagegen tun?

5

18.07.2005, 21:15

deinen framecounter anders implementieren. 8)

DrthM2001

Alter Hase

  • »DrthM2001« ist der Autor dieses Themas

Beiträge: 721

Wohnort: Karlsruhe

  • Private Nachricht senden

6

18.07.2005, 21:22

Ich dachte bisher immer es wäre egal wo man in dem Loop die Zeit abzapft!
ich hatte es bisher so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
while(!done)
{
if Messagevorhanden
      {
        }
else
{
     render, move etc...
}
Timer->UPDATE
}

Aus mir nicht ersichtlichen gründen ruckelt es aber so ab und zu. Plaziere ich das update hinter render,move, läufts normal. aber irgendwie führt das ja zu ungenauigkeiten, wenn da die messageloop nicht mitgezählt wird...

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

7

19.07.2005, 23:33

Zitat


Aber immer wenn ich jetzt die maus bewege oder eine tastatureingabe verursache, steigt (!) die fps zahl sehr an, von 400 auf 20000.


LoL, dann rendert Dein Code ja auch nicht mehr zwischen einem festellen der Zeit und dem nächsten!

Du musst es nach der Render Funktion machen, wie Du ja auch schon rausgefunden hast.
"Games are algorithmic entertainment."

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

8

20.07.2005, 00:24

Hmmm wegen schneller und langsamer:
es gibt, soweit ich weiß, probs mit dual core und sse cpus im vergleich zu älteren von wegen inneren timer.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Werbeanzeige