繁体   English   中英

如何在pygame中延迟按键操作?

[英]How to make a delay in a keypress in pygame?

我正在制作一个平台游戏,并制作一个简单的重力版本,所以我需要这样做,以便在2秒钟左右的时间跳动(空格键)时重新打开重力。 基本上,“ ychange”每帧更改字符的y轴位置(如果ychange = 3,则每帧下降3个像素)。 始终将其设置为6,因此他每帧跌落6帧,直到他撞到有碰撞的物体为止,以使他的跳变设置为-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

它们“如果event.key == pygame.K_SPACE”是跳转部分,其余则是其他绑定。

这就是time.sleep命令的示例,该命令将暂停整个程序,直到延迟完成。

有任何想法吗?

重述:

问题:延迟会暂停程序

尝试过:time.sleep,pygame.time.wait

问题:如何获得不会使整个程序暂停的延迟

使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM