Python - time.sleep () um die Codedauer versetzt

8

Ich habe eine Funktion, die ein Häkchen () für alle Spieler und Objekte innerhalb meines Spieleservers ausführt. Ich mache das, indem ich alle 0,1 Sekunden einen Satz durchlaufe. Ich brauche es, um solide zu sein. Viel Zeit und Mathematik hängt davon ab, dass diese Pause so genau wie möglich zu 0,1 Sekunden ist. Um dies zu erreichen, habe ich dies zum Tick-Thread hinzugefügt:

%Vor%

Meine Frage ist, ist dies der beste Weg, dies zu tun? Wenn die Dauer meiner Schleife 0,01 ist, dann ist time_lapsed == 0,01 ... und dann sollte der Schlaf nur für 0,09 sein. Ich frage, denn es scheint nicht zu funktionieren. Ich habe neulich die überladene Server-Nachricht bekommen und der Server war definitiv nicht überlastet. Irgendwelche Gedanken über einen guten Weg, den Schlaf "dynamisch" zu kontrollieren? Vielleicht gibt es eine andere Art, Code jede Zehntelsekunde auszuführen, ohne zu schlafen?

    
jtsmith1287 08.11.2012, 17:27
quelle

2 Antworten

2

Andere Python-Threads können dazwischen ausgeführt werden, sodass der Thread weniger Zeit hat. Auch time.time() unterliegt Systemzeitanpassungen. Es kann zurückgesetzt werden.

Es gibt eine ähnliche Funktion Clock.tick () in pygame . Sein Zweck ist es, die maximale Bildrate zu begrenzen.

Um Einfluss von außen zu vermeiden, könntest du einen unabhängigen Frame / Turn-basierten Counter behalten, um die Spielzeit zu messen.

    
jfs 08.11.2012, 22:57
quelle
3

Es wäre besser, Ihr "Timing und Mathe" auf die Zeit zu setzen, die seit dem letzten Tick vergangen ist (). Abhängig von "sehr genauen" Zeiten sind die besten Zeiten fragil.

Update: Was ich meine ist, dass Ihre tick () -Methode ein Argument, sagen wir "t", der verstrichenen Zeit seit dem letzten Aufruf nehmen würde. Um Bewegungen auszuführen, speichert man dann die Position jedes Gegenstandes (z. B. in Pixeln) und die Geschwindigkeit (in "Pixel / Sekunde"), so dass die Größe seiner Bewegung für diesen Aufruf von tick () "velocity * t" wird >

Dies hat den zusätzlichen Vorteil, dass Sie Ihre Physik-Simulation von der Bildfrequenz entkoppeln.

Ich sehe pygame unten erwähnt: ihre "pygame.time.Clock.tick ()" Methode soll auf diese Weise verwendet werden, da sie die Anzahl der Sekunden seit dem letzten Aufruf zurückgibt.

    
mike 08.11.2012 17:50
quelle

Tags und Links