在 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中文网其他相关文章!