2013-01-07 69 views
0

我正在学习python以及pygame。我在我的代码中找到问题挣扎了一下。当我按住一个键并同时按下另一个键,然后以相同的顺序放开它们时,我按下它们,有时会使我的小角色朝相反的方向向后移动。Python - Pygame - 学习get_pressed

这里是我的代码,我挣扎:

while running: 
for event in pygame.event.get(): 
    if event.type == KEYDOWN: 
     keystate = pygame.key.get_pressed() 
    if event.type == pygame.QUIT: # if user clicked close 
     running = False # flag done to exit this loop 


# all game logic/controls should go below this comment 
    elif event.type == KEYDOWN: 
     if keystate[K_SPACE]: 
      print ('pressed space') 
      player.move_up = True 
     elif keystate[K_RIGHT]: 
      print ('pressed right') 
      player.move_right = True 
     elif keystate[K_LEFT]: 
      print ('pressed left') 
      player.move_left = True 
    elif event.type == KEYUP: 
     if keystate[K_SPACE]: 
      print ('released space') 
      player.move_up = False 
     elif keystate[K_RIGHT]: 
      print ('released right') 
      player.move_right = False 
     elif keystate[K_LEFT]: 
      print ('released left') 
      player.move_left = False 


if player.move_up: 
    player.pos[1] -= 3 
if player.move_up == False: 
    if player.pos[1] < ground_level: 
     player.pos[1] +=3 
if player.move_right: 
    player.pos[0] += 5 
if player.move_left: 
    player.pos[0] -= 5` 

到目前为止,我没有任何实际的物理,他只是飞来飞去。但没关系,我只是想解决我已经有的问题。

回答

1

您从不更新keystateKEYUP事件的值。因此,每当最后的KEYDOWN事件触发时,它仍然具有任何值。

为了解决这个问题,改变了...

if event.type == KEYDOWN: 
    keystate = pygame.key.get_pressed() 

这样:

if event.type in (KEYDOWN, KEYUP): 
    keystate = pygame.key.get_pressed() 
+0

要添加,您选择使用[1]基于事件的keydown /向上或[2]键,有getstate输入。 - 如果你想要WASD类型的移动,请使用getstate。如果您想按下/点击,然后使用该事件。 – ninMonkey