Dans Pygame, il est courant de vouloir exécuter plusieurs tâches simultanément. Cependant, un problème courant survient lorsque l'on tente d'exécuter plusieurs boucles while simultanément, car une boucle peut empêcher l'exécution des autres. Cet article aborde ce défi et propose des solutions pour permettre le bon fonctionnement de plusieurs boucles.
Dans l'extrait de code fourni, deux boucles while sont utilisées :
Le problème se produit car la deuxième boucle contient un opération de blocage (time.sleep()). Cela empêche l'exécution de la boucle de traitement des événements principaux, ce qui pourrait empêcher le programme de répondre.
Remplacement de la méthode de blocage time.sleep() par la mesure du temps de Pygame Le système résout le problème. Pygame fournit une fonction, pygame.time.get_ticks(), qui renvoie le nombre de millisecondes depuis l'initialisation de Pygame. En utilisant cette fonction, il est possible de calculer et de suivre les intervalles de temps pour la boucle de mise à jour du visage sans bloquer les autres boucles.
Voici une version modifiée du code qui les utilise solutions :
<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>
En utilisant le système de mesure du temps de Pygame, ce code modifié permet à la boucle de traitement des événements principaux et à la boucle de mise à jour du visage de fonctionner simultanément sans aucune interruption.
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!