我正在尝试在屏幕上生成对象。但是它们似乎没有出现。
退出游戏时,精灵会出现。只是在游戏中看不到任何物体。
Exit = False
while not Exit:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == QUIT:
Exit = True
elif event.type == USEREVENT +1:
fireball.add(fire(screen, random.randint(50,1000), random.randint(50,800)))
fireball.update()
fireball.draw(screen)
pygame.display.flip()
答案 0 :(得分:0)
由于您没有告诉我们,因此我假设fireball
是sprite.Group
的孩子,而fire
是sprite.Sprite
的子类。从我所看到的一点来看,似乎是正确的猜测。
因此,您需要在游戏过程中创建fire
实例并将其添加到fireball
组中。
您可以通过在firefall.update()
之前的主循环中添加以下几行来实现此目的:
newev = pygame.event.Event(USEREVENT+1)
pygame.event.post(newev)
这将创建一个USEREVENT+1
类型的自定义事件,该事件将在下一次迭代时被事件检查循环捕获,因此执行以下行:fireball.add(fire(screen, random.randint(50,1000), random.randint(50,800)))
也许您不想每次迭代都创建一个新的fire
子画面。在这种情况下,您应该添加一些流控制,以在某些情况下跳过这些行。
例如,如果您要使用随机方法,则可以执行以下操作:
if random.random() < 0.1:
newev = pygame.event.Event(USEREVENT+1)
pygame.event.post(newev)
在这种情况下,主循环的每次迭代都有10%的概率提交自定义事件。调整适合您西装的概率。
如果相反,您想要在给定的时间后添加新的fire
子画面,则需要使用pygame.time.get_ticks()
测量时间。如果经过了给定的时间量,则提交事件。
checktime = pygame.time.get_ticks() - reftime
if checktime > 5000: #5 seconds, the time is in milliseconds
reftime = pygame.time.get_ticks() #reset the reference time
newev = pygame.event.Event(USEREVENT+1)
pygame.event.post(newev)
当然,请记住在主循环之前第一次定义reftime = pygame.time.get_ticks()
。
您可以参考this answer,了解有关如何使用pygame测量时间的另一个示例。