Comment exécuter plusieurs boucles While simultanément dans Pygame
Dans les applications Pygame, il est crucial d'éviter l'utilisation de fonctions de blocage comme time.sleep () pour effectuer des retards. Au lieu de cela, comptez sur la boucle d'application et des fonctions comme pygame.time.get_ticks() pour gérer les tâches liées au temps.
Comprendre le défi
Dans le code fourni dans la requête, plusieurs boucles while tentent de s'exécuter simultanément, mais une boucle utilisant time.sleep() bloque l'exécution de l'autre.
La solution : utiliser les fonctions temporelles de Pygame
Pour gérer correctement les délais, utilisez pygame.time.get_ticks() pour calculer le moment où effectuer des actions spécifiques en fonction de l'heure actuelle. Lorsque l'heure actuelle dépasse l'heure calculée, exécutez l'action.
Code révisé :
<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>
Dans ce code, la variable next_render_time stocke l'heure à laquelle le le visage devrait être mis à jour. Lorsque l'heure actuelle dépasse cette valeur, un nouveau visage est sélectionné, rendu et affiché de manière aléatoire. Cette approche permet à plusieurs boucles de s'exécuter simultanément sans blocage.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!