在 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")
答案 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