2017-12-30 37 views
0

이 질문은 중복으로 볼 수 있지만, 몇 시간 동안 검색하고 내 코드에서 무엇이 잘못되었는지 알아 냈습니다.키를 누르고있을 때 개체를 이동하는 방법?

while True: 
    keys = pygame.key.get_pressed() 
    if keys[pygame.K_LEFT]: 
     self.player.setLeftRight(-1 * self.PLAYERMOVERATE) 
    if keys[pygame.K_RIGHT]: 
     self.player.setLeftRight(self.PLAYERMOVERATE) 
+0

'setLeftRight()'메서드에서 무엇을 가지고 있습니까? 어쩌면 문제가있을 수 있습니다. 변수에 값을 표시하려면 ('self.PLAYERMOVERATE'와'self.player.rect'와 같은)'print()'를 사용하고 코드의 어떤 부분이 실행되었는지 정보를 표시하십시오. 이렇게하면 실수를 찾을 수 있습니다. 현재 코드는 괜찮은 것 같습니다. – furas

+0

또는 한 변수에서 위치를 변경했지만 다른 변수를 사용하여 플레이어를 새로운 위치에 표시 할 수 있습니다. 그래서'print()'를 사용하여 플레이어를 표시하는 데 사용되는 변수에 값을 표시하십시오. – furas

+0

setLeftRight 메서드에는 한 줄의 코드 만 포함됩니다. 이 메서드는 : def setLeftRight (self, pixels) : self.rect.move_ip (pixels, 0)입니다. 나는 그 문제가 여기에 없다고 확신한다. –

답변

0

I :

for event in pygame.event.get(): 

    if event.type == QUIT: 
     self.terminate() 

    if event.type == KEYDOWN: 
     if event.key == K_ESCAPE: 
      self.terminate() 
     if event.key == K_LEFT or event.key == K_a: 
      self.moveRight = False 
      self.moveLeft = True 
     if event.key == K_RIGHT or event.key == K_d: 
      self.moveLeft = False 
      self.moveRight = True 

    if event.type == KEYUP: 
     if event.key == K_LEFT or event.key == K_a: 
      self.moveLeft = False 
     if event.key == K_RIGHT or event.key == K_d: 
      self.moveRight = False 

# Move the player around 
if self.moveLeft : 
    # Moves the player object to left with self.PLAYERMOVERATE pixels. 
    self.player.setLeftRight(-1 * self.PLAYERMOVERATE) 


if self.moveRight : 
    self.player.setLeftRight(self.PLAYERMOVERATE) 

내가이 대안을 시도 :

내 문제는 왼쪽 또는 오른쪽 키를 누르고 될 때 내 객체라는 플레이어가 지속적으로 움직이지 않는다는 것입니다 문제는 당신이 메인 게임 루프에서 입력을 처리하지 않는다고 생각하십시오.

코드에서 객체의 메서드 내에서 입력을 처리하는 것처럼 보입니다 Player. 이것은 입력을 처리하는 방법이 아닙니다. 두 번째 코드 예제에서는 루프가 결코 종료되지 않으므로 메서드의 실행이 완료되지 않는다는 것을 의미하는 while True: 루프가 있습니다. 첫 번째 예에서도 비슷한 문제가있을 수 있습니다.

대신 다음을 수행해야합니다

  1. 는 모든 객체와 클래스를 만듭니다.

  2. 기본 게임 루프를 작성하십시오.

메인 게임 루프는 입력을 처리 한 다음 게임의 논리를 처리하고 렌더링되어야하는 것을 렌더링해야합니다.

다음은 간단한 코드 예제입니다.

while True: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() # Exit from pygame window 
      quit() # End python thread 

     if event.type == KEYDOWN: 
      if event.key == K_LEFT or event.key == K_a: 
       player.moveRight = False 
       player.moveLeft = True 
      if event.key == K_RIGHT or event.key == K_d: 
       player.moveLeft = False 
       player.moveRight = True 

     if event.type == KEYUP: 
      if event.key == K_LEFT or event.key == K_a: 
       player.moveLeft = False 
      if event.key == K_RIGHT or event.key == K_d: 
       player.moveRight = False 


    # Move player using method 
    if player.moveLeft: 
     # Move player 
    # ... 


    # Render player 

나는이 당신을 도와 희망 및 기타 문의 사항이있는 경우 아래의 코멘트 섹션에서 그들을 게시 주시기 바랍니다!