最近我一直在使用 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,但所有这些都延迟了整个操作!当我使用它时,它只是推动一切前进,所以一切都在几秒钟后的同一时间发生答案 0 :(得分:2)
您可以创建两个新事件(FIRE_ANIMATION_START
,STAR_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。此外,由于代码现在它有错误。事件的属性在不同的事件类型之间有所不同,因此在访问属性KEYDOWN
或USEREVENT
之前,请务必检查事件是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中的更多详细信息。