生成对象问题

时间:2019-05-08 09:43:30

标签: python pygame

我正在尝试在屏幕上生成对象。但是它们似乎没有出现。

退出游戏时,精灵会出现。只是在游戏中看不到任何物体。

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()

1 个答案:

答案 0 :(得分:0)

由于您没有告诉我们,因此我假设fireballsprite.Group的孩子,而firesprite.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测量时间的另一个示例。