在 Python 中同時產生同一物件的多個實例
在遊戲中,您希望同時實例化同一物件(圓圈)的多個實例。但是,您遇到了一個問題,即隨後生成的圓圈會覆蓋先前的圓圈。
問題在於 time.sleep() 的使用。此函數會停止程式執行,從而阻止遊戲物件的連續渲染。為了解決這個問題,您需要使用替代方法來控制遊戲循環中的時間。
一種方法是利用 pygame.time.get_ticks() 函數,該函數傳回自 pygame 初始化以來的毫秒數。您可以建立一個時間間隔,例如 500 毫秒,之後應產生一個新物件。透過測量當前時間並將其與目標時間進行比較,您可以相應地建立新物件。
另一個選項涉及使用 pygame.event 模組和 pygame.time.set_timer()。這種方法可讓您定義自訂事件(例如,USEREVENT 1)並指定重複建立事件的時間間隔(以毫秒為單位)。在事件循環中,您可以檢查此自訂事件並在發生時產生新物件。
這是使用第一種方法與 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()
使用此程式碼,圓圈將每 500 毫秒產生一次,解決覆蓋問題。請記住維護已建立物件的清單(本例中為 object_list)並重繪每個影格中的所有物件(包括新物件)以確保它們保持可見。
以上是在 Python 中同時產生多個遊戲物件時如何避免覆蓋?的詳細內容。更多資訊請關注PHP中文網其他相關文章!