如何延迟pygame中的按键?

时间:2014-10-19 18:52:31

标签: python time pygame delay

我正在制作一个平台游戏并制作一个简单的重力版本,我需要在2秒左右跳跃(空格键)时重力打开。基本上'ychange'改变每帧字符的y轴位置(如果ychange = 3,则每帧下降3个像素)。它总是被设置为6,所以他每帧落下6帧,直到他遇到碰撞的东西,让他跳跃ychange设置为-6或-7,这使得他每帧增加6或7个像素。

我的问题是,我怎样才能延迟从ychange = -6切换到ychange = 6跳转

例如:

当JUMP: 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 个答案:

答案 0 :(得分:1)

使用pygame.time.get_ticks()获取玩家按空格的时间,然后将布尔标志设置为true。然后从原始时间开始一帧一次,直到2秒为止,此时你将ychange设置为6并再次将标志设置为false。

或者像其中一条评论所暗示的那样查找线程。

伪代码:

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