2017-06-21 2 views
-4

Ich versuche einen Zeitmechanismus zu erstellen, so dass eine Konsolenanwendung, an der ich arbeite, ungefähr 10 Frames pro Sekunde ausführt. Wenn ich diesen Code ausfühle, ist er eher stotternd und friert oft ein, als dass er 20 Frames pro Sekunde flüssig ist. Ich habe Probleme, dies zu debuggen, weil es auf der DateTime.Now.Millisecond Funktion beruht, so dass jedes Mal, wenn ich eine Pause in den Code einfüge, es die Zeiten der Anwendung durcheinander bringt.Ich versuche, eine Konsolenanwendung mit 20 Bildern pro Sekunde auszuführen

do 
{ 
    frameTimer = DateTime.Now.Millisecond; 

    if (firstLoop == true) 
    { 
     timeTillNextFrame = frameTimer + 100; 

     firstLoop = false; 
    } 

    if (timeTillNextFrame < DateTime.Now.Millisecond && DateTime.Now.Millisecond < 901) 
    { 
     Console.Clear(); 

     grid.removeFromGrid(ball.xPos, ball.yPos); 
     ball.newPos(gridSizeX, gridSizeY, grid.gridArray); 
     grid.addToGrid(ball.xPos, ball.yPos, ball.symbol); 

     grid.gridDraw(gridSizeX, gridSizeY); 

     timeTillNextFrame = DateTime.Now.Millisecond + 50; 

     if (timeTillNextFrame >= 1000) 
     { 
      timeTillNextFrame -= 1000; 
     } 

    } 
+0

Sie wahrscheinlich 'wollen DateTime.Now.TotalMilliseconds' überall, nicht wahr? Und ich bin mir nicht sicher, was der '<901'-Vergleich bewirken soll. "timeTilNextFrame" scheint auch ein irreführender Name zu sein. Vielleicht sollte es "timeOfNextFrame" sein? – smarx

+1

Sie sehen, dass sich die Konsole selbst neu zeichnet. Sie spammen CLS grundsätzlich in einer Eingabeaufforderung. – Alex

+0

Warum nicht einfach einen Timer verwenden? Wie lange Griddraw benötigt, um es auszuführen, müssen Sie berücksichtigen ... – Trey

Antwort

0

Sie wollen nicht DateTime.Now.Millisecond, möchten Sie die Gesamt Millisekunden:

private static readonly DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 

var totalMilliseconds = DateTime.Now.ToUniversalTime().Subtract(Epoch).TotalMilliseconds 
+0

Ich kann nicht den Namespace finden, die ich brauche, um dies zu implementieren, keine Hinweise? –

+0

Ich bekomme ein Fehlermeldung, dass es keine Erweiterungsmethode für "TotalMilliseconds" gibt? –

+0

Yeah Entschuldigung, TimeSpan und DateTime verwechselt. Bearbeitet die Antwort. – nvoigt

Verwandte Themen