Comment exécuter plusieurs boucles While simultanément dans Pygame ?

Linda Hamilton
Libérer: 2024-11-05 10:26:02
original
939 Les gens l'ont consulté

How to Run Multiple While Loops Simultaneously in Pygame?

Exécuter plusieurs boucles While simultanément dans Pygame

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.

Comprendre le conflit

Dans l'extrait de code fourni, deux boucles while sont utilisées :

  1. La boucle de traitement des événements principaux (première boucle while) : Cette boucle vérifie en permanence les entrées de l'utilisateur et met à jour le jeu état.
  2. La boucle de mise à jour du visage (deuxième boucle while) : Cette boucle met périodiquement à jour le visage affiché.

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.

Solution : utiliser le système de mesure du temps de Pygame

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.

Exemple de code :

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal