pygame.key.get_pressed()在我的代码中不起作用,我也不知道为什么

时间:2019-04-18 18:12:25

标签: python pygame

我最近开始使用python,并决定使用pygame创建一个游戏,该游戏基本上存在掉块现象,您必须越过它们。 您可以使用向左和向右键移动,尽管如果您一直按它们,则什么也不会发生,我也不知道为什么,因为在我的代码中,我相信我在114和122之间的行中对此进行了覆盖。

而不是game_over:

for event in pygame.event.get(): 

    if event.type == pygame.QUIT: 
        sys.exit()

    x = player_pos[0]
    y = player_pos[1]

    keys = pygame.key.get_pressed() # Check if a key is pressed

    if keys[pygame.K_LEFT] and x != 0:                                   
      x -= 25             
      print("move left")                                           
    if keys[pygame.K_RIGHT] and x != 750:
      print("move right")                                
      x += 25                                   
    player_pos = [x, y] 

draw_enemies(enemy_list)
pygame.draw.rect(screen, RED, (player_pos[0], player_pos[1], player_size, player_size))

clock.tick(30)
pygame.display.update()

我希望能够在按下左右按钮的同时移动,但是我不能只在按下然后松开时移动。

1 个答案:

答案 0 :(得分:2)

引起此问题的原因是位置的更改是在事件循环中完成的,但是仅在发生事件(例如 a b c 0 1 2016 0 1 1 2017 1 2 1 2018 2 3 1 2019 3 4 2 2000 0 5 2 2000 0 6 2 2000 0 7 2 2000 0 8 3 2007 0 9 3 2008 1 10 3 2014 2 pygame.KEYDOWN)时才执行事件循环。 因此,位置不会连续变化,仅在按下任何键或释放任何键时它才会更改一次。

请注意,如果按住pygame.KEYUPK_LEFT,甚至会发生位置变化,例如K_RIGHT。您可以验证,按MOUSEMOTION并移动鼠标,播放器将移动。

将代码移动到事件循环以外的位置,并在主循环的范围内进行操作:

K_LEFT