【问题标题】:Spawning Object issue生成对象问题
【发布时间】:2019-05-08 09:43:29
【问题描述】:

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

退出游戏时,精灵会出现。只有在游戏过程中你才能看到任何物体。

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

【问题讨论】:

  • 请提供MCVE。这段代码不足以理解正在发生的事情。如果生成由fireball.add 方法处理,您应该在主循环中包含一些启动“USEREVENT +1”事件类型的内容。
  • edit您的问题并以正确的格式添加到那里。在评论中不可读。
  • 固定代码。华伦天奴

标签: python pygame


【解决方案1】:

由于您没有告诉我们,我将假设 fireballsprite.Groupfiresprite.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 sprite,则需要使用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 测量时间的另一个示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    相关资源
    最近更新 更多