按下Pygame键

时间:2016-01-10 00:42:09

标签: python pygame

pygame 的以下循环中 我做了以下循环来检查按键。 如何使用pygame检查密钥是否仍被按下&该动作多久会重复一次?例如,如果我希望每秒都按下向下键 - 它将重复print("something")命令多次。

for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_running = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_DOWN:
                print("something")

2 个答案:

答案 0 :(得分:4)

您可以在密钥向下处理程序中将布尔值设置为true,然后在新的密钥向上处理程序中将其设置为false。类似的东西:

for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_running = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_DOWN:
                down_pressed = True
        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_DOWN:
                down_pressed = False

if down_pressed:
  print("Down is pressed")

然后,您可以在游戏逻辑中使用该布尔值,例如移动角色。 if down_pressed: move_character_down()

答案 1 :(得分:1)

有函数pygame.key.get_pressed(),它给出了所有键的布尔值列表。

您可以查看

 pressed = pygame.key.get_pressed()

 if pressed[pygame.K_DOWN]:
     print("Down is pressed")

但是......可能你需要调用pygame.event.get()来从这个函数中获取实际值。

并且... PyGame doc:

  

快速按下的键在两次调用之间完全不被注意

而且......有一个关于SO的问题,这个列表存在问题,因为它没有保存超过两个键的信息。

所以我更喜欢@will解决方案:)

-

您可以使用

clock = pygame.time.Clock()

while True:

    print("Hello World")

    clock.tick(5)

每秒获取此文本5次 - 但while True中的其他功能也将每秒调用5次。你得到5 FPS。

您可以使用pygame.time.get_ticks()获取以毫秒为单位的时间,并使用它来仅控制print()

next_print = pygame.time.get_ticks() + 1000/5 # 1000ms = 1s

while True:

    current_time = pygame.time.get_ticks()

    if current_time >= next_print:

         print("Hello World")

         next_print += 1000/5