Das komische ist nur, dass wenn ich das vSync aus mach und das Game mit 100% läuft meine DeltaTime manchmal 0 ist, aber das Spiel läuft trotzdem normal weiter, obwohl ich alle Bewegungen von der DeltaTime abhängig gemacht hab. oO
Bei hohen Frameraten ist das menschliche Auge zu langsam, um erkennen zu können das sich zwischen zwei Frames die Bewegung nicht geändert hat.
Ich benutzte die Funktion "QueryPerfomanceCounter" und habe eine DualCore CPU. Probleme hatte ich bis jetzt aber noch nicht.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
dj3hut1: Die Methode ist dadurch natürlich nicht so anfällig wie GetTickCount alleine. Deine Methode ist da sogar recht genau. Die systembedingte "Schwäche" find ich schon recht wichtig. Ich kenne mich mit C++ jetzt nicht so gut aus. queue ist eine verkettete Liste, oder? Nur rein aus interesse.
Bergmann89: DeltaTime von 0 ist in sofern nicht schlimm, weil dann immer mal wieder Bilder dargestellt werden, die sich nicht verändert haben. Wenn sich also jedes 2te Bild nicht verändert, dann ändert sich aber trotzdem jedes zweite Bild. Sofern das alles über der Monitorfrequenz liegt ist das kein Problem. Außer, dass die anzeigte FPS nicht die wirklich sichtbare fps wiederspielgelt. Was aber über 60 fps sowieso nicht der Fall ist.
humflo hat geschrieben:
Ich benutzte die Funktion "QueryPerfomanceCounter" und habe eine DualCore CPU. Probleme hatte ich bis jetzt aber noch nicht.
Ich hatte vor einiger Zeit bei mir auch mal bewusst auf dieses Programm von AMD verzichtet und ein paar Tests gestartet. Ich konnte solche Probleme auch nicht mehr feststellen. Von daher vermute ich, dass eher nur die früheren Mehrkernsysteme davon betroffen sind. Wobei ich auch nicht weiß wie es bei MehrCPU Systemen aussieht. Aber die sind im privaten Sektor eher gar nicht mehr verbreitet.
Ich hab gerade in Java eine sehr coole Funktion gefunden. System.nanoTime(); Hier ein kleines Beispiel:
Code:
public class TimeTest {
public static void main(String[] args) {
long start = System.nanoTime();
long end = System.nanoTime();
System.out.println(end - start);
}
}
Bei mir kam 1816 raus was davon zeugt dass es sehr genau ist .
Für die dies nicht wissen eine Nanosekunde entschpricht einem milliardstel einer Sekunde.
Und einem millionstel einer Millisekunde.
Die einzige Frage die ich mir noch stelle ist ob das ganze auch noch funktioniert wenn du eine sleep zwischenstellst.
Der Counter ließt ja einfach nur die Takte aus dem TSC. Bei einem sleep hat jetzt aber der Prozessor nichts zu tun und wechselt vermutlich auch den zu verarbeitenden Prozess. Und bei so einen Interrupt wandern die Register doch auf den Stack.
Kannst du das einmal testen?
Würde mich nur interessieren ob das funktioniert und ich hab leider nicht die Möglichkeit das zu testen.
Registriert: Mo Sep 02, 2002 15:41 Beiträge: 867 Wohnort: nahe Stuttgart
@Andreas: Ja, das funktioniert (bei mir) richtig, eben selber getestet. Microsoft selber empfiehlt ja QPC als "High performance counter" und nicht als eine Art CPU-Taktzähler. Umgekehrt bedeutet das aber auch, dass es vom Mainboard/BIOS/etc. abhängt, was für Taktgeber benutzt werden und was für Frequenzen dann dabei tatsächlich verwendet werden.
Ich hab aber eben auch noch die Frequenz nachgeschaut, die bei mir "nur" etwa 3,5 MHz Auflösung hat, also keine Nanosekunden messen wird. (Intel Q9300)
Das Problem mit AMD Dualcores wurde mW mit dem Treiber größtenteils gefixt und bestand dort auch "nur" wegen Bugs mit dem BIOS/HAL.
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.