Mehrere Instanzen desselben Objekts gleichzeitig in Python erzeugen
In Ihrem Spiel möchten Sie gleichzeitig mehrere Instanzen desselben Objekts (Kreise) instanziieren. Sie sind jedoch auf ein Problem gestoßen, bei dem nachfolgend erzeugte Kreise vorherige überschreiben.
Das Problem liegt in der Verwendung von time.sleep(). Diese Funktion stoppt die Programmausführung und verhindert so das kontinuierliche Rendern von Spielobjekten. Um dieses Problem zu lösen, müssen Sie die Zeit innerhalb der Spielschleife mithilfe alternativer Methoden steuern.
Ein Ansatz besteht darin, die Funktion pygame.time.get_ticks() zu verwenden, die die Anzahl der Millisekunden seit der Pygame-Initialisierung zurückgibt. Sie können ein Zeitintervall festlegen, beispielsweise 500 Millisekunden, nach dem ein neues Objekt erscheinen soll. Indem Sie die aktuelle Zeit messen und mit der Zielzeit vergleichen, können Sie entsprechend neue Objekte erstellen.
Eine weitere Möglichkeit besteht darin, das Modul pygame.event und pygame.time.set_timer() zu verwenden. Mit diesem Ansatz können Sie ein benutzerdefiniertes Ereignis definieren (z. B. USEREVENT 1) und ein Zeitintervall in Millisekunden für die wiederholte Erstellung des Ereignisses angeben. Innerhalb der Ereignisschleife können Sie nach diesem benutzerdefinierten Ereignis suchen und neue Objekte erzeugen, wenn es auftritt.
Hier ist ein Beispiel für die Verwendung des ersten Ansatzes mit 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()
Mit diesem Code werden alle 500 Millisekunden Kreise erzeugt, wodurch das Problem des Überschreibens behoben wird. Denken Sie daran, eine Liste der erstellten Objekte zu führen (in diesem Beispiel „object_list“) und alle Objekte (einschließlich der neuen) in jedem Frame neu zu zeichnen, um sicherzustellen, dass sie sichtbar bleiben.
Das obige ist der detaillierte Inhalt vonWie vermeide ich ein Überschreiben, wenn in Python mehrere Spielobjekte gleichzeitig erzeugt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!