2013-01-18 3 views
0

나는 리눅스에서 테스트를 할 때 모든 것이 잘되지만 내 윈도우 머신에서는 대각선으로 아래로 그리고 왼쪽으로 갈 수 없다 (그러나 다른 세 개의 대각선으로 갈 수있다).파이썬 - 파이 게임 - 모든 이벤트가 등록되지 않았습니까?

def update (self, time_passed): 

    tp = time_passed # From clock.tick(60) 
    if self.moving: 
     if "forward" in self.moving and (self.rect.top > 0): 
      self.rect.move_ip(0, -self.speed*tp) 
     if "back" in self.moving and (self.rect.bottom < self.screen_ref[1]): 
      self.rect.move_ip(0, self.speed*tp) 
     if "left" in self.moving and (self.rect.left > 0): 
      self.rect.move_ip(-self.speed*tp, 0) 
     if "right" in self.moving and (self.rect.right < self.screen_ref[0]): 
      self.rect.move_ip(self.speed*tp, 0) 

는 내가 확인 치신하지 않았다 번 확인 지금 확인 :

if event.type == QUIT or event.type == KEYDOWN and event.key == K_ESCAPE: 
     self.running = False 
    if event.type == KEYDOWN: 
     if event.key == K_SPACE: 
      self.player.shooting = True 
     if event.key == K_UP: 
      self.player.moving.add("forward") 
     if event.key == K_DOWN: 
      self.player.moving.add("back") 
     if event.key == K_RIGHT: 
      self.player.moving.add("right") 
     if event.key == K_LEFT: 
      self.player.moving.add("left") 
    if event.type == KEYUP: 
     if event.key == K_SPACE: 
      self.player.shooting = False 
     if event.key == K_UP: 
      self.player.moving.remove("forward") 
     if event.key == K_DOWN: 
      self.player.moving.remove("back") 
     if event.key == K_RIGHT: 
      self.player.moving.remove("right") 
     if event.key == K_LEFT: 
      self.player.moving.remove("left") 

여기에 이동을 수행하는 업데이트 방법입니다. 대각선으로 아래로 그리고 왼쪽으로는 작동하지 않습니다. 나는 아래로 내려 가기 시작한 다음 왼쪽으로 이동하기로 변경하고 왼쪽으로 이동하여 아래로 이동하는 것으로 변경합니다. 누구나 왜 그런 아이디어가 있니?

+0

온 키가 아닌 단추를 누르고 있기 때문에 getkeystate를 사용하는 것이 더 효과적 일 수 있습니다. – ninMonkey

답변

1

이 코드가 Linux에서 작동하면 Windows에서 정확히 동일하게 작동합니다. 이런 문제는 종종 키보드의 하드웨어 제한과 관련이 있습니다.

정확히 동일한 설정을 두 가지 테스트, 특히 키보드에서 사용 했습니까? 두 가지 테스트에 동일한 키보드를 사용했다면 Windows 드라이버를 비난하게 될 것입니다.

코드를 비난하기 전에이 두 키를 한 번에 눌러 원하는 결과를 얻을 수 있는지 확인하십시오. 빠른 테스트를 위해 플래시 게임 또는 무언가를 발사하십시오.

관련 문제