Python - Pygame - 学习get_pressed

时间:2013-01-07 03:31:00

标签: python object keyboard pygame

我正在学习python以及pygame。我在代码中发现问题时遇到了一些麻烦。当我按住一个键并同时按下另一个键,然后按照我按下它们的顺序放开它们时,它有时会使我的小角色向相反方向向后移动。

这是我正在努力解决的代码:

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 个答案:

答案 0 :(得分:1)

您永远不会在keystate事件中更新KEYUP的值。因此,无论何时触发上一个KEYDOWN事件,它仍具有任何值。

要解决此问题,请更改此内容...

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

到此:

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