Maison > développement back-end > Tutoriel Python > Comment éviter de bloquer et exécuter plusieurs boucles simultanément dans Pygame ?

Comment éviter de bloquer et exécuter plusieurs boucles simultanément dans Pygame ?

Patricia Arquette
Libérer: 2024-11-06 05:39:03
original
1066 Les gens l'ont consulté

How to Avoid Blocking and Run Multiple Loops Simultaneously in Pygame?

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

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!

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