0

私は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`

これまでのところ、私は実際の物理学を持っていません。彼はただ飛び回っています。しかし、それは問題ありません。すでに抱えている問題を解決したいだけです。

4

1 に答える 1

1

イベントkeystateで の値を更新することはありません。したがって、最後のイベントが発生しKEYUPたときの値はそのままです。KEYDOWN

これを修正するには、これを変更します...

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

これに:

if event.type in (KEYDOWN, KEYUP):
    keystate = pygame.key.get_pressed()
于 2013-01-07T06:53:46.073 に答える