如何在while循环中延迟特定事件?

时间:2018-05-08 11:39:59

标签: python pygame

最近我一直在使用 pygame 在python中使用简单直接的RPG,但我在延迟特定事件方面遇到了一些问题。运行下面的代码,一切都会立即发生。

if event.key == pygame.K_SPACE and buttonHighlight == 0:

    FireAnimation() #displays a fire image

    #DELAY HERE

    if player[6] == 'Magic': #you deal damage to the enemy
        enemy[0] = enemy[0]-(((player[1])+((player[1])*1)-enemy[4]))
    else:
        enemy[0] = enemy[0]-(((player[1])+((player[1])*1)-enemy[3]))

    #DELAY HERE

    StarAnimation() #displays a star image

    #DELAY HERE

    if enemy[6] == 'Magic': #enemy deals damage to you
        player[0] = player[0]-(((enemy[1])+((enemy[1])*1)-player[4]))
    else:
        player[0] = player[0]-(((enemy[1])+((enemy[1])*1)-player[3]))

其余的代码并不真实,我只是想指出我想要延迟的地方。运行它,两个图像显示,玩家和敌人同时受到伤害。谢谢!

编辑:我忘了提到我已经尝试了pygame.time.delay / wait和time.sleep,但所有这些都延迟了整个操作!当我使用它时,它只是推动一切前进,所以一切都在几秒钟后的同一时间发生

3 个答案:

答案 0 :(得分:2)

您可以创建两个新事件(FIRE_ANIMATION_STARTSTAR_ANIMATION_START),并将这些事件延迟发布到事件队列(pygame.time.set_timer(eventid, milliseconds))。然后在您的事件循环中,您只需检查它。

FIRE_ANIMATION_START = pygame.USEREVENT + 1
STAR_ANIMATION_START = pygame.USEREVENT + 2

# ... Your code ...

for event in pygame.event.get():

    if event.key == pygame.K_SPACE and buttonHighlight == 0:
        pygame.time.set_timer(FIRE_ANIMATION_START, 10)    # Post the event every 10 ms.
        pygame.time.set_timer(STAR_ANIMATION_START, 1000)  # Post the event every 1000 ms.

    elif event.code == FIRE_ANIMATION_START:
        pygame.time.set_timer(FIRE_ANIMATION_START, 0)     # Don't post the event anymore.
        FireAnimation() #displays a fire image
        if player[6] == 'Magic': #you deal damage to the enemy
            enemy[0] = enemy[0]-(((player[1])+((player[1])*1)-enemy[4]))
        else:
            enemy[0] = enemy[0]-(((player[1])+((player[1])*1)-enemy[3]))

    elif event.code == STAR_ANIMATION_START:
        pygame.time.set_timer(STAR_ANIMATION_START, 0)     # Don't post the event anymore.
        StarAnimation() #displays a star image
        if enemy[6] == 'Magic': #enemy deals damage to you
             player[0] = player[0]-(((enemy[1])+((enemy[1])*1)-player[4]))
        else:
             player[0] = player[0]-(((enemy[1])+((enemy[1])*1)-player[3]))
pygame.time.set_timer(eventid, milliseconds)的{​​p> Documentation。此外,由于代码现在它有错误。事件的属性在不同的事件类型之间有所不同,因此在访问属性KEYDOWNUSEREVENT之前,请务必检查事件是event.key还是event.code。可以找到不同的类型和属性here

答案 1 :(得分:0)

如果您知道需要多长时间,可以直接添加:

from time import sleep
...
sleep(0.1)

这将增加100毫秒的延迟

答案 2 :(得分:0)

您可以使用

pygame.time.delay(n)

pygame.time.wait(n)

暂停程序n毫秒。 delay稍微准确一点wait释放处理器以供其他程序在pygame等待时使用。 pygame docs中的更多详细信息。