Heim >Backend-Entwicklung >Python-Tutorial >Wie vermeide ich Blockierungen und führe mehrere Schleifen gleichzeitig in Pygame aus?

Wie vermeide ich Blockierungen und führe mehrere Schleifen gleichzeitig in Pygame aus?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-06 05:39:031128Durchsuche

How to Avoid Blocking and Run Multiple Loops Simultaneously in Pygame?

So führen Sie mehrere While-Schleifen gleichzeitig in Pygame aus

In Pygame-Anwendungen ist es wichtig, die Verwendung von Blockierungsfunktionen wie time.sleep zu vermeiden () um Verzögerungen durchzuführen. Verlassen Sie sich stattdessen auf die Anwendungsschleife und Funktionen wie pygame.time.get_ticks(), um zeitbezogene Aufgaben zu verwalten.

Die Herausforderung verstehen

Im Code bereitgestellt in Bei der Abfrage versuchen mehrere while-Schleifen gleichzeitig ausgeführt zu werden, aber eine Schleife, die time.sleep() verwendet, blockiert die Ausführung der anderen.

Die Lösung: Verwendung von Pygame-Zeitfunktionen

Um Zeitverzögerungen korrekt zu handhaben, verwenden Sie pygame.time.get_ticks(), um den Zeitpunkt der Ausführung bestimmter Aktionen basierend auf der aktuellen Zeit zu berechnen. Wenn die aktuelle Zeit die berechnete Zeit überschreitet, führen Sie die Aktion aus.

Überarbeiteter Code:

<code class="python">import pygame
import random
from time import time

pygame.init()

faces = ['^-^', '^v^', '◡◠◠', "'v'", '⁀◡⁀']
display = pygame.display.set_mode((800, 600))

font = pygame.font.Font('unifont.ttf', 100)
surface = font.render(random.choice(faces), 1, (0, 255, 0))

center = surface.get_rect(center=(800/2, 600/2))
next_render_time = time()

run = True
while run:
    current_time = time()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    if current_time >= next_render_time:
        surface = font.render(random.choice(faces), 1, (0, 255, 0))
        next_render_time = current_time + random.randint(5, 10)

    display.fill((0, 0, 0))
    display.blit(surface, center)
    pygame.display.flip()</code>

In diesem Code speichert die Variable next_render_time die Zeit, zu der die Gesicht sollte aktualisiert werden. Wenn die aktuelle Zeit diesen Wert überschreitet, wird ein neues Gesicht zufällig ausgewählt, gerendert und angezeigt. Dieser Ansatz ermöglicht die gleichzeitige Ausführung mehrerer Schleifen ohne Blockierung.

Das obige ist der detaillierte Inhalt vonWie vermeide ich Blockierungen und führe mehrere Schleifen gleichzeitig in Pygame 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