Pygame clock.tick()
-
Pygame Verwenden Sie
clock.tick()
und FPS in der Spielschleife -
Arbeitsablauf der Methode
clock.tick()
Wir werden in diesem Artikel über die Methode clock.tick()
lernen und wie sie im Pygame-Modul funktioniert. Wir lernen auch, was der Unterschied zwischen Ticks und fps ist.
Pygame Verwenden Sie clock.tick()
und FPS in der Spielschleife
clock.tick()
im Vergleich zu FPS
Wir werden uns die Funktion namens clock.tick()
ansehen. Wenn diese Funktion aufgerufen wird, gibt dies die Anzahl der Ticks zurück, die Ihr Prozessor ausführt.
Wenn wir 150 in tick()
eingeben, werden 150 Ticks in 0,15 Sekunden abgeschlossen, was unsere Prozessorausführungszeit sein wird.
Wenn wir uns jedes Mal, wenn die Schleife ausgeführt wird, um ein Pixel bewegen, wäre sie auf Computern mit einem schnelleren Prozessor schneller und auf Computern mit einem langsameren Prozessor langsamer. Dies ist wichtig zu wissen, denn wann immer Sie einen Uhrtick verwenden, berechnet er, dass ein Tick einer Millisekunde entspricht.
FPS steht für Framerate pro Sekunde, und FPS variiert je nach GPU-Leistung. Wenn Sie beispielsweise ein Spiel mit 30 fps spielen, werden 30 Bilder pro Sekunde angezeigt, aber das menschliche Auge kann die Änderungen nicht sehen.
Wenn das Spiel während des Streamings fehlt, liegt das daran, dass Ihre GPU-Verarbeitungsgeschwindigkeit langsamer ist.
Arbeitsablauf der Methode clock.tick()
Bevor wir uns mit dem eigentlichen Code befassen, lassen Sie uns über die Logik von Timern sprechen, da es in Pygame keine eingebaute Funktion gibt, die einige Sekunden wartet und dann Code ausführt, aber wir mussten unseren Timer erstellen, da es keine solche Funktion gibt.
Sobald wir pygame
starten, beginnt ein Timer zu laufen und zählt in Millisekunden hoch, und wir können messen, wie viel Zeit vergangen ist. Wir müssen einen einzelnen Punkt so oft wie möglich messen und ihn in einen Timer umwandeln.
Sobald wir einen statischen Punkt aufrufen, müssen wir einen Punkt kontinuierlich messen, und unser Unterbrechungspunkt ist die letzte oder aktuelle Zeit. Der Unterschied zwischen unserer aktuellen Zeit und unserem statischen Punkt ist die Länge unseres Timers.
Wenn wir einen Zwei-Sekunden-Timer wollen, brauchen wir eine Zeile wie aktuelle Zeit - statische Zeit>2000
und führen den gewünschten Code aus. Da wir die Zeit nur in jedem einzelnen Frame messen, messen wir sie nicht jede Millisekunde; bei 60 Bildern pro Sekunde messen wir die Zeit nur alle 16 Millisekunden.
Lassen Sie uns die gesamte Logik im Python-Skript implementieren.
import pygame
import sys
pygame.init()
Myscreen = pygame.display.set_mode((800, 800))
clock = pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
pygame.display.flip()
clock.tick(60)
Wir beginnen mit dem Importieren des pygame
-Moduls, dann starten wir pygame und erstellen dann das Hauptanzeigeoberflächenobjekt, das ein Fenster mit 800 x 800 Pixeln anzeigt. In der nächsten Zeile erstellen wir mit pygame.time.Clock()
eine Uhr, um genau zu messen, wann.
Dann kommen wir zu unserer Spielschleife und prüfen auf Eingaben, wenn die Spieler die Escape-Taste drücken. Dieses pygame.display.flip()
zeichnet den Frame und clock.tick(60)
misst die Zeit genau, sodass wir 60 Frames pro Sekunde haben.
Um einen Timer zu implementieren, erstellen wir eine Variable namens MyCurrent_Time
, die 0 ist, und diese Variable speichert die Zeit für jeden Frame. Diese Variable wird in dieser While-Schleife verwendet, die pygame.time.get_ticks()
aufruft und uns die Millisekunde gibt.
Jetzt erstellen wir eine weitere Variable namens button_pressTime
und initialisieren sie mit 0, und wir werden prüfen, ob eine Taste gedrückt wurde. Also nehmen wir diese Variable und weisen ihr dieselbe Funktion zu pygame.time.get_ticks()
.
Nach dem Drücken der Abwärtstaste möchten wir unseren Bildschirm mit weißer Farbe füllen. Wir verwenden die Methode fill()
und übergeben ihr RGB-Werte in einem Tupel, und nach zwei Sekunden füllt sich unser Fensterbildschirm mit schwarzer Farbe.
Vollständiger Codeausschnitt:
import pygame
import sys
pygame.init()
Myscreen = pygame.display.set_mode((800, 800))
clock = pygame.time.Clock()
MyCurrent_Time = 0
button_pressTime = 0
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
button_pressTime = pygame.time.get_ticks()
Myscreen.fill((255, 255, 255))
MyCurrent_Time = pygame.time.get_ticks()
if MyCurrent_Time - button_pressTime > 2000:
Myscreen.fill((0, 0, 0))
print(f"current time {MyCurrent_Time} button pressed time {button_pressTime}")
pygame.display.flip()
clock.tick(60)
In der Ausgabe können wir sehen, dass sich unsere aktuelle Zeit mit jedem Tick erhöht und die statische Zeit 0 bleibt, bis wir die Abwärtstaste nicht drücken.
Ausgang:
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn