繁体   English   中英

pygame:如何限制该程序在显示某物时不会得到键盘事件?

[英]Pygame: How can I limit this program not to get keyboard events while showing sth on display?

我有一个这样的程序。 它存在问题,效果很好! 按下“向下”键,它会在屏幕上显示一个圆圈5秒钟,同时按下“向下键”和“向上键”会执行其他操作(计算按下时间)。 但是我不希望它在显示圆圈时“计算”。 换句话说,当显示圆圈时,我不希望它获取键盘事件(如果获取键盘事件,则不执行任何操作)。 为此,我添加了“ p”作为条件。 它以某种方式起作用! 我的意思是在圆圈显示期间,即使您按“ Space”键,程序也不会计算。 但是问题是当圈子表演结束时。 就像在圈子显示时间之后按“ Space”键一样,它进行计算。 我的意思是,如果您在社交圈表演期间按下“空格”键,则在社交圈表演结束后会立即进行计算。 就像程序即使在圆圈显示期间也会获取关键事件一样,但是要等到条件(p == 0)变为true时才这样做。 请帮助我解决这种情况。

p = 0   
gameloop = True
while gameloop:

for event in pygame.event.get():

    if (event.type == pygame.QUIT):
            gameloop = False

    if event.type == pygame.KEYDOWN:
        if (event.key == pygame.K_DOWN)  :

                p += 1
                start_time = time.time()
                end_time = start_time + 5
                while end_time > time.time():
                    # showing a circle on display 
                p -= 1 

    if (event.type == pygame.KEYDOWN):
        if (event.key == pygame.K_SPACE)  and (p == 0)  :

            # Do something

    if (event.type == pygame.KEYUP)  :
        if (event.key == pygame.K_SPACE) and (p == 0) :

            # Do somthing

我发现,如果您在巡回演出期间按“空格”键,则该操作不会在那一刻起作用,但是当巡回演出结束后,它将立即运行。 就像您在圈子播放时间过后立即按下“ Space”一样。 因此,它花费的时间与系统运行时间一样长(正如我所说的,该程序计算“ Space”键的按下时间:space_up_time-space_down_time),并且在循环显示时间中按“ Space”键时,每次返回的时间约为0.002秒这是系统运行时间。 因此,为了解决我的问题,我添加了另一个条件:h + 0.01 <time.time()。 现在,它可以完美运行了! 但是让我知道是否还有另一种方法,因为一个人可以非常快速地按下按键,可能比0.002秒更快!

start_time = time.time()
end_time = start_time + ex
while end_time > time.time():
        # Drawing a circle
h = time.time()

      if (event.type == pygame.KEYDOWN):

        if (event.key == pygame.K_SPACE)  and ( h+0.01 < time.time())  :
               # Do calculations

暂无
暂无

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

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