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

botlin

Treue Seele

  • »botlin« ist der Autor dieses Themas

Beiträge: 139

Wohnort: Berlin

Beruf: Fachinformatiker für Anwendungsentwicklung, Student Internationale Medieninformatik

  • Private Nachricht senden

1

30.09.2011, 21:05

Verstrichene Ticks =0?

Hej Leute ,
habe n kommisches Problem beim timing meiner Anwendung.
Beim messen der Zeit ist in fast regelmässigen abständen ein Unterschied.
Etwa alle 10-12 Frames wird ist die Gemessene Zeit bei 0.
0 ticks, 0Millisekunden, 0 sekunden...
Und ich kann mir nicht erklären warum.

Die anderen Främs liegen konstant bei 15 Millisekunden.

Die Zeit messe ich mit den .Net klassen DateTime und TimeSpan.
Hat jemand ne Idee worn es liegen könnte?
Habe auch schon versucht den Gameloop etwas mehr auszulasten aber kein erfolg.

Die Zeit messe ich so:

C#-Quelltext

1
2
3
time = jetzt-time1;
time1=jetzt;
GameLoop(time);

2

30.09.2011, 21:19

mal ne ganz blöde frage: was für ticks sind das?
weil wenn's immer konstant 15 ms sind, und manchmal null, hört sich das an, als wären deine ticks 15 ms lang, und solange deine frames ein wenig länger als ein tick sind, kriegst du 1 tick -> 15 ms, und wenn sie mal kürzer sind, kriegst du eben 0 ticks...

botlin

Treue Seele

  • »botlin« ist der Autor dieses Themas

Beiträge: 139

Wohnort: Berlin

Beruf: Fachinformatiker für Anwendungsentwicklung, Student Internationale Medieninformatik

  • Private Nachricht senden

3

30.09.2011, 21:38

Also wenn ich 15 ms messe sind das immer 156250 Ticks.
Ich denke mal genauer gehts nicht bis jetz habe ich ausser 0 noch keinen kleineren Wert gemessen.

Nun habe ich mal richtig aufgedreht und den Renderer ordentlich in die Knie gezungen.
Er Zeichnet jetz mit ca 25 Frames.

Was aber wieder auffält das er alle 10-12 Frames 15 ms unter dem Durchschnitt der anderen liegt.
Ich finde das komisch das das der ryhtmus immer der selbe ist.
Ich habe zwar nen Thread im Hintergrund laufen aber der Springt nur einmal alle 500 ms an um zu gucken obs was zu laden gibt.
Dadurch fängt meine Figur an zu ruckeln was mich stört.

botlin

Treue Seele

  • »botlin« ist der Autor dieses Themas

Beiträge: 139

Wohnort: Berlin

Beruf: Fachinformatiker für Anwendungsentwicklung, Student Internationale Medieninformatik

  • Private Nachricht senden

4

30.09.2011, 22:33

Habe das Rckeln jetzt damit gelöst das ich mir aus 5 Frames die Durchschnittszeit berechne.

botlin

Treue Seele

  • »botlin« ist der Autor dieses Themas

Beiträge: 139

Wohnort: Berlin

Beruf: Fachinformatiker für Anwendungsentwicklung, Student Internationale Medieninformatik

  • Private Nachricht senden

5

01.10.2011, 09:51

Hi Leute...
Also nach dem ich gestern geschlagene 3 Stunden an meiner Frametime rumgedoctort habe und heute Morgen nochmal 2 Stunden bin ich nun auf des lösungs Rätsel gekommen.

Ausgang des Problems war ein Ruckeln der Spielfigur bei Bewegungen welches ich auf die Zeitmessung zurückgeführt habe. Dieser Verdacht wurde ja auch durch oben genannte null werte untermauert.

Also habe ich immer eine Durchschnittszeit aus den letzten Frames gebildet. Ein leichtes Ruckeln war jedoch noch zu merken. ?(

Heute Morgen ist mir dann folgendes aufgefallen. :!:
Die Kamera und die Figur bewegen sich genau in die selbe Richtung mit der selben Geschwindigkeit.
Jedoch hengt die Figur bei Bewegungen etwas hinterher.

Und eben habe ich die Lösung dafür gefunden.
Ich habe die Figur gezeichnet und dann die Matrix für diese neu berechnet.
Das heisst jede Bewegung wurde immer erst einen Frame später ausgeführt.
Und genau das hat auch das Ruckeln der Figur hervorgerufen.

Da sagt man sich nur Kopf <-> Wand Kopf <-> Wand Kopf <-> Wand.
was mich da geritten hat als ich die Zeichenfunktion geschrieben habe....
Naja nun ist das Problem aus der Welt. :thumbsup:

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

01.10.2011, 10:24

Die Auflösung von DateTime.Now beträgt nur etwas in der Gegend von 10ms, ist also ungeeignet, um genaue Framedauern zu messen. Wenn du DateTime.Now verwendest, dann arbeite nicht mit der Zeitdifferenz pro Frame, sondern arbeite mit der absoluten Zeit. Wenn du wirklich die Framedauern brauchst, verwend einen genaueren Timer.

botlin

Treue Seele

  • »botlin« ist der Autor dieses Themas

Beiträge: 139

Wohnort: Berlin

Beruf: Fachinformatiker für Anwendungsentwicklung, Student Internationale Medieninformatik

  • Private Nachricht senden

7

01.10.2011, 21:13

Danke für den Tip.
Die Stopwatch hatte ich heute Morgen bereits entdeckt.

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

8

16.10.2011, 23:03

Ich hatte mit der Stopwatch Probleme, da hab ich mir sorgar QueryPerformanceCounter und QueryPerformanceFrequency per P/Invoke reingeholt.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

16.10.2011, 23:39

Was für Probleme hattest du denn mit der Stopwatch?

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

10

17.10.2011, 09:15

Ich hatte mir pro Frame einmal http://msdn.microsoft.com/de-de/library/…ch.elapsed.aspx geholt und per http://msdn.microsoft.com/de-de/library/…n.subtract.aspx hatte ich davon das TimeSpan-Objekt aus dem letzten Frame abgezogen. Dann dachte ich mir, dass ich in http://msdn.microsoft.com/de-de/library/…lliseconds.aspx die Anzahl der verstrichenen Milisekunden haben müssten, aber da kam nichts sinnvolles bei raus, was genau weiss ich nicht mehr, ist schon ein paar Monate her.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

Werbeanzeige