Maison >développement back-end >Tutoriel Python >Comment éviter l'écrasement lors de la génération simultanée de plusieurs objets de jeu en Python ?

Comment éviter l'écrasement lors de la génération simultanée de plusieurs objets de jeu en Python ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-26 16:50:10354parcourir

How to Avoid Overwriting When Spawning Multiple Game Objects Concurrently in Python?

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!

Déclaration:
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