"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment exécuter plusieurs boucles While simultanément dans Pygame ?

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

Publié le 2024-11-07
Parcourir:235

How to Run Multiple While Loops Concurrently in Pygame?

Comment implémenter plusieurs boucles While simultanément dans Pygame

Dans Pygame, il est possible d'exécuter plusieurs boucles While simultanément, permettant des boucles indépendantes et opérations continues au sein de votre programme.

Surmonter le blocage de l'exécution

Dans l'extrait de code fourni, le problème provient de la présence de deux boucles while tentant de s'exécuter en même temps. . La deuxième boucle, qui intègre une fonction time.sleep() pour introduire un délai, interfère avec l'exécution de la première boucle, ce qui est crucial pour la fonctionnalité continue du programme.

Utiliser le temps système pour le délai

Au lieu de compter sur time.sleep() pour retarder l'exécution d'un bloc de code spécifique, il est recommandé d'exploiter le module pygame.time. Pygame.time.get_ticks() permet d'accéder à l'heure système en millisecondes depuis l'initialisation du programme.

Intégration avec Loop

Pour éviter le blocage d'une boucle par une autre, envisagez d'incorporer la stratégie suivante :

  • Déterminez l'intervalle de temps auquel le contenu doit être mis à jour.
  • Mettez en œuvre une vérification conditionnelle dans la boucle principale pour évaluer si le temps écoulé dépasse le temps spécifié. intervalle de temps.
  • Si l'intervalle est écoulé, effectuez les mises à jour nécessaires et réinitialisez l'intervalle de temps en conséquence.

Cette approche permet à l'action retardée de s'exécuter simultanément avec la boucle principale sans perturber son flux d'exécution.

Approche alternative utilisant les événements de minuterie

Vous pouvez également utiliser des événements de minuterie Pygame pour planifier des actions à des intervalles de temps spécifiques. Cette méthode s'avère particulièrement utile lorsqu'il s'agit d'intervalles de temps constants.

Exemple de code

Reportez-vous à l'extrait de code suivant pour un exemple complet illustrant l'implémentation de plusieurs boucles while dans Pygame :

import pygame
import random

# Initialize Pygame
pygame.init()

# Define screen dimensions
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))

# Define some faces
faces = ['^-^', '^v^', '◠◡◠', "'v'", '⁀◡⁀']

# Define the current face
current_face = random.choice(faces)

# Set up the font
font = pygame.font.SysFont('Arial', 100)

# Render the face
face_surface = font.render(current_face, True, (0, 255, 0))

# Get the center of the screen
center_x = screen_width // 2
center_y = screen_height // 2

# Set up the main loop
running = True
while running:

    # Process events
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # Calculate the next time the face should be updated
    next_update_time = pygame.time.get_ticks()   randint(5000, 10000)

    # If the time has come to update the face, do it
    if pygame.time.get_ticks() >= next_update_time:
        current_face = random.choice(faces)
        face_surface = font.render(current_face, True, (0, 255, 0))

    # Draw everything to the screen
    screen.fill((0, 0, 0))
    screen.blit(face_surface, (center_x - face_surface.get_width() // 2, center_y - face_surface.get_height() // 2))
    pygame.display.update()
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3