Création simultanée de plusieurs instances du même objet en Python
Dans votre jeu, vous souhaitez instancier simultanément plusieurs instances du même objet (cercles). Cependant, vous avez rencontré un problème où les cercles générés par la suite écrasent les précédents.
Le problème réside dans l'utilisation de time.sleep(). Cette fonction arrête l'exécution du programme, empêchant le rendu continu des objets du jeu. Pour résoudre ce problème, vous devez contrôler le temps dans la boucle de jeu à l'aide de méthodes alternatives.
Une approche consiste à utiliser la fonction pygame.time.get_ticks(), qui renvoie le nombre de millisecondes depuis l'initialisation de pygame. Vous pouvez établir un intervalle de temps, par exemple 500 millisecondes, après lequel un nouvel objet doit apparaître. En mesurant l'heure actuelle et en la comparant à l'heure cible, vous pouvez créer de nouveaux objets en conséquence.
Une autre option consiste à utiliser le module pygame.event et pygame.time.set_timer(). Cette approche vous permet de définir un événement personnalisé (par exemple, USEREVENT 1) et de spécifier un intervalle de temps en millisecondes pour la création répétée de l'événement. Dans la boucle d'événements, vous pouvez rechercher cet événement personnalisé et générer de nouveaux objets lorsqu'il se produit.
Voici un exemple utilisant la première approche avec pygame.time.get_ticks() :
import pygame import random pygame.init() window = pygame.display.set_mode((800, 600)) class Circle(): def __init__(self, color, x, y, radius, width): self.color = color self.x = x self.y = y self.radius = radius self.width = width def draw(self, win, outline=None): pygame.draw.circle(win, self.color, (self.x, self.y, self.radius, self.width), 0) object_list = [] time_interval = 500 # 500 milliseconds == 0.5 seconds next_object_time = 0 run = True while run: window.fill((0, 0, 0)) current_time = pygame.time.get_ticks() if current_time > next_object_time: next_object_time += time_interval object_list.append(Circle((255, 255, 255), random.randint(0, 800), random.randint(0, 600), 20, 20)) for object in object_list: object.draw(window) pygame.display.update() for event in pygame.event.get(): if event.type == pygame.QUIT: run = False pygame.quit() quit()
Avec ce code, des cercles seront générés toutes les 500 millisecondes, résolvant le problème du remplacement. N'oubliez pas de conserver une liste des objets créés (object_list dans cet exemple) et de redessiner tous les objets (y compris les nouveaux) dans chaque image pour vous assurer qu'ils restent visibles.
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!