2013-01-07 4 views
0

파이 게임뿐만 아니라 파이 게임도 배우고 있습니다. 내 코드에서 문제를 찾는 데 조금 어려움을 겪고 있습니다. 키를 누른 상태에서 다른 키를 동시에 누른 다음 키를 누를 때와 동일한 순서로 키를 놓으면 때로는 내 작은 캐릭터가 반대 방향으로 뒤로 이동합니다. 파이썬 - 파이 게임 - 학습 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

이벤트에서 keystate의 값을 업데이트하지 마십시오. 따라서 마지막 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를 사용하십시오. 당신이 on-press/click을 원할 경우, 이벤트를 사용하십시오. – ninMonkey

관련 문제