In Pygame ist es üblich, mehrere Aufgaben gleichzeitig ausführen zu wollen. Beim Versuch, mehrere while-Schleifen gleichzeitig auszuführen, tritt jedoch häufig ein Problem auf, da eine Schleife möglicherweise die Ausführung anderer Schleifen blockiert. Dieser Artikel befasst sich mit dieser Herausforderung und bietet Lösungen, um den reibungslosen Ablauf mehrerer Schleifen zu ermöglichen.
Im bereitgestellten Codeausschnitt werden zwei While-Schleifen verwendet:
Das Problem tritt auf, weil die zweite Schleife einen Blockierungsvorgang (time.sleep()) enthält. Dadurch wird verhindert, dass die Hauptereignisverarbeitungsschleife ausgeführt wird, was möglicherweise dazu führt, dass das Programm nicht mehr reagiert.
Ersetzen der blockierenden Methode time.sleep() durch die Zeitmessung von Pygame Das System behebt das Problem. Pygame bietet eine Funktion, pygame.time.get_ticks(), die die Anzahl der Millisekunden seit der Initialisierung von Pygame zurückgibt. Mithilfe dieser Funktion ist es möglich, die Zeitintervalle für die Gesichtsaktualisierungsschleife zu berechnen und zu verfolgen, ohne die anderen Schleifen zu blockieren.
Hier ist eine modifizierte Version des Codes, die diese verwendet Lösungen:
<code class="python">import random import pygame import pygame.freetype # Initialize pygame and game variables face = ['^-^', '^v^', '◠◡◠', "'v'", '⁀◡⁀'] faceDisplay = pygame.freetype.Font('unifont.ttf', 100).render(random.choice(face), 1, (0, 255, 0)) screen = pygame.display.set_mode((800, 600)) run = True # Variable used to track next face update time next_render_time = 0 # Main game loop while run: # Handle events (quit, keyboard input, etc.) for event in pygame.event.get(): if event.type == pygame.QUIT: run = False # Calculate current time current_time = pygame.time.get_ticks() # Check if enough time has passed since the last face update if current_time >= next_render_time: # Update the displayed face and calculate the next update time faceDisplay = pygame.freetype.Font('unifont.ttf', 100).render(random.choice(face), 1, (0, 255, 0)) next_render_time = current_time + random.randint(5, 10) * 1000 # Generate random time interval # Clear the screen, draw the updated face, and flip the display screen.fill((0, 0, 0)) screen.blit(faceDisplay, (screen.get_width() // 2, screen.get_height() // 2)) pygame.display.flip()</code>
Durch die Nutzung des Zeitmesssystems von Pygame ermöglicht dieser modifizierte Code, dass die Hauptereignisverarbeitungsschleife und die Gesichtsaktualisierungsschleife ohne Unterbrechungen gleichzeitig ablaufen.
Das obige ist der detaillierte Inhalt vonWie führe ich in Pygame mehrere While-Schleifen gleichzeitig aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!