Heim  >  Artikel  >  Backend-Entwicklung  >  Wie führe ich in Pygame mehrere While-Schleifen gleichzeitig aus?

Wie führe ich in Pygame mehrere While-Schleifen gleichzeitig aus?

Linda Hamilton
Linda HamiltonOriginal
2024-11-05 10:26:02937Durchsuche

How to Run Multiple While Loops Simultaneously in Pygame?

Mehrere While-Schleifen gleichzeitig in Pygame ausführen

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.

Den Konflikt verstehen

Im bereitgestellten Codeausschnitt werden zwei While-Schleifen verwendet:

  1. Die Hauptereignisverarbeitungsschleife (erste While-Schleife): Diese Schleife prüft kontinuierlich auf Benutzereingaben und aktualisiert den Spielstatus.
  2. Die Gesichtsaktualisierungsschleife (zweite While-Schleife) :Diese Schleife aktualisiert regelmäßig das angezeigte Gesicht.

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.

Lösung: Verwendung des Zeitmesssystems von Pygame

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.

Beispielcode:

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn