如何在pygame中实现按键延迟?
我正在制作一个平台游戏,为了让重力变得简单,我需要设置一个机制:当我按下跳跃键(空格键)后,大约2秒钟后重力才会重新生效。简单来说,'ychange'是用来改变角色在y轴上的位置的,每一帧都会更新(如果ychange = 3,角色每帧就会下降3个像素)。通常情况下,ychange被设置为6,这样角色就会以每帧6个像素的速度下落,直到碰到某个物体。如果要让角色跳跃,ychange会被设置为-6或-7,这样角色就会每帧上升6或7个像素。
我的问题是,如何在角色跳跃时,从ychange = -6切换到ychange = 6之间设置一个延迟。
举个例子:
当跳跃时:
ychange = -6
延迟2-3秒
ychange = 6
我显然尝试过time.sleep和pygame.time.wait,但这两个方法会让整个程序暂停,直到等待时间结束,这显然不好。
跳跃的代码是:
while not gameExit:
for event in pygame.event.get(): # Binds
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
xchange -= 3
if event.key == pygame.K_d:
xchange += 3
if event.key == pygame.K_SPACE: # SPACEBAR/JUMP
ychange = -6
time.sleep(2)
ychange = 6
if event.type == pygame.KEYUP:
if event.key == pygame.K_a or event.key == pygame.K_d:
xchange = 0
其中“if event.key == pygame.K_SPACE”是处理跳跃的部分,其他的则是其他按键的绑定。
这是一个使用time.sleep命令的例子,这个命令会暂停整个程序,直到延迟结束。
有没有什么好的主意呢?
重新表述一下:
问题:延迟会暂停程序
尝试过:time.sleep,pygame.time.wait
问题:如何设置一个不会暂停整个程序的延迟?
1 个回答
1
使用 pygame.time.get_ticks()
来获取玩家按下空格键的时间,然后设置一个布尔标志为真。接着,每一帧都获取一次时间,直到从最初的时间过去了2秒,这时候你就把 ychange 设置为 6,并把标志再设置为假。
另外,可以像评论中提到的那样,查一下线程相关的内容。
伪代码:
flag = False; # do this before the game loop starts
if event.type == pygame.KEYUP:
# checking flag prevents resetting the timer
if flag == False and event.key == pygame.K_w:
starttime = pygame.time.get_ticks()
ychange = -6
flag = True
# wait 2000 milliseconds before executing this
if flag == True and pygame.time.get_ticks() - starttime >= 2000:
ychange = 6
flag = False