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;
}
}
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
Sie sehen, dass sich die Konsole selbst neu zeichnet. Sie spammen CLS grundsätzlich in einer Eingabeaufforderung. – Alex
Warum nicht einfach einen Timer verwenden? Wie lange Griddraw benötigt, um es auszuführen, müssen Sie berücksichtigen ... – Trey