Maison > Article > développement back-end > Comment puis-je exécuter des boucles simultanées dans Pygame sans bloquer la boucle principale ?
Gestion des boucles simultanées dans Pygame
Dans Pygame, la gestion simultanée de plusieurs boucles while peut être cruciale pour les programmes nécessitant des tâches simultanées. Cet article aborde le problème soulevé par un utilisateur essayant d'implémenter une boucle dans une boucle tout en assurant l'exécution continue du programme.
L'utilisateur a cherché à ajouter une boucle contrôlée par le temps au sein de la boucle principale de l'application. Bien que cela puisse paraître simple, la boucle supplémentaire arrête intrinsèquement les autres opérations du programme en raison de la nature bloquante de time.sleep() et des méthodes similaires. Ce conflit découle du principe fondamental de la boucle principale de Pygame, qui gère le traitement des événements et les mises à jour d'affichage.
Solution : exploiter la mesure du temps
Plutôt que d'utiliser des fonctions de veille bloquantes, la solution recommandée utilise la fonction time.get_ticks() de Pygame pour suivre l'heure du système. En calculant les points temporels futurs en fonction de l'heure actuelle, le programme peut déterminer quand mettre à jour et restituer le visage sans interrompre la boucle principale.
Structure du code révisée
<code class="python">next_render_time = 0 while run: current_time = pygame.time.get_ticks() # Existing code here... if current_time >= next_render_time: currentFace = random.choice(face) faceDisplay = myFont.render(str(currentFace), 1, (0,255,0)) next_render_time = current_time + randint(5, 10) * 1000 screen.fill((0,0,0)) screen.blit(faceDisplay, text_rect) pygame.display.flip()</code>
Cette structure révisée permet aux deux boucles de fonctionner simultanément, garantissant que le visage change aux intervalles spécifiés sans affecter les autres fonctionnalités du programme.
Événement de minuterie Considérations
Alternativement, Pygame fournit des événements de minuterie pour planifier des actions à intervalles fixes. Cependant, dans des cas comme celui présenté, où l'intervalle n'est pas constant, il est plus approprié d'utiliser l'approche de mesure du temps.
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!