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:
루프가 있습니다. 첫 번째 예에서도 비슷한 문제가있을 수 있습니다.
대신 다음을 수행해야합니다
는 모든 객체와 클래스를 만듭니다.
기본 게임 루프를 작성하십시오.
메인 게임 루프는 입력을 처리 한 다음 게임의 논리를 처리하고 렌더링되어야하는 것을 렌더링해야합니다.
다음은 간단한 코드 예제입니다.
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
나는이 당신을 도와 희망 및 기타 문의 사항이있는 경우 아래의 코멘트 섹션에서 그들을 게시 주시기 바랍니다!
'setLeftRight()'메서드에서 무엇을 가지고 있습니까? 어쩌면 문제가있을 수 있습니다. 변수에 값을 표시하려면 ('self.PLAYERMOVERATE'와'self.player.rect'와 같은)'print()'를 사용하고 코드의 어떤 부분이 실행되었는지 정보를 표시하십시오. 이렇게하면 실수를 찾을 수 있습니다. 현재 코드는 괜찮은 것 같습니다. – furas
또는 한 변수에서 위치를 변경했지만 다른 변수를 사용하여 플레이어를 새로운 위치에 표시 할 수 있습니다. 그래서'print()'를 사용하여 플레이어를 표시하는 데 사용되는 변수에 값을 표시하십시오. – furas
setLeftRight 메서드에는 한 줄의 코드 만 포함됩니다. 이 메서드는 : def setLeftRight (self, pixels) : self.rect.move_ip (pixels, 0)입니다. 나는 그 문제가 여기에 없다고 확신한다. –