【问题标题】:How do you compute elapsed time for KEYDOWN. (Python)您如何计算 KEYDOWN 的经过时间。 (Python)
【发布时间】:2017-12-12 02:48:11
【问题描述】:

我想知道如果按住某个键的时间更长,如何增加变量。我正在使用 Python 和 PyGame。 这是我的代码示例(速度、圈数和距离在前几行中定义):

distance_control = 1
for i in range(amount):
    x[i] += speedx[i]
    if x[i] >= 800:
        x[i] -= 800
        lap[i] += 1
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_SPACE:
            x[2] += 1
    distance[i] = (lap[i] - 1)*800 + x[i]

我想知道如何让它按住空格键的时间越长,speed_control 越高,最大 speed_control 为 5,最好使用某种经过时间的东西。

【问题讨论】:

    标签: python pygame elapsedtime


    【解决方案1】:

    您可以使用pygame.time.get_ticks() 函数返回自程序启动以来的时间来计算经过的时间。当用户按下按键时,将start_time 设置为事件循环中的当前时间,在while 循环中,您可以使用pygame.key.get_pressed() 检查它是否仍被按住并计算经过的时间。

    import pygame as pg
    
    
    def main():
        screen = pg.display.set_mode((320, 240))
        clock = pg.time.Clock()
        start_time = 0
    
        done = False
        while not done:
            for event in pg.event.get():
                if event.type == pg.QUIT:
                    done = True
                elif event.type == pg.KEYDOWN:
                    if event.key == pg.K_SPACE:
                        start_time = pg.time.get_ticks()
    
            keys = pg.key.get_pressed()
            if keys[pg.K_SPACE]:  # The spacebar is held.
                current_time = pg.time.get_ticks()
                elapsed_time = current_time-start_time  # milliseconds
                print(elapsed_time)
    
            screen.fill((30, 30, 30))
            pg.display.flip()
            clock.tick(30)
    
    
    if __name__ == '__main__':
        pg.init()
        main()
        pg.quit()
    

    如果你只想计算帧数:

    import pygame as pg
    
    
    def main():
        screen = pg.display.set_mode((320, 240))
        clock = pg.time.Clock()
        counter = 0
    
        done = False
        while not done:
            for event in pg.event.get():
                if event.type == pg.QUIT:
                    done = True
                elif event.type == pg.KEYDOWN:
                    if event.key == pg.K_SPACE:
                        counter = 0 # Set it back to 0.
    
            keys = pg.key.get_pressed()
            if keys[pg.K_SPACE]:  # The spacebar is held.
                # Increment the counter every frame.
                counter += 1
                print(counter)
    
            screen.fill((30, 30, 30))
            pg.display.flip()
            clock.tick(30)
    
    
    if __name__ == '__main__':
        pg.init()
        main()
        pg.quit()
    

    【讨论】:

    • 谢谢你。怎么能每 1000 毫秒给一个变量加一个呢,当我按住空格测试程序时,我注意到数字跳过了一些
    • 为什么需要这样做?
    • 按住空格键的时间越长,试图为汽车增加加速度
    • 我认为您应该发布另一个问题,例如“如何加速对象?”。并添加您的目标的简短描述和代码示例,向我们展示您的尝试。
    • 我已经得到了答案,您只需发布问题即可。 ;) 你知道向量和 pygame 精灵是如何工作的吗?用@skrx 写评论给我发送通知。
    猜你喜欢
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 2016-04-25
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    相关资源
    最近更新 更多