2017-10-23 2 views
1

나는 게임을 만들려고하지만, 플랫폼 게임을 만들려고 할 때 무한한 높이의 스팸을 "w"(점프)로 유지할 수 있습니다. 이 코드는 모두 내 코드입니다.파이 게임에서 무한 점프 버그를 해결하는 방법?

GRAVITY = .2 

diedorgameover = False 
while not diedorgameover: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      diedorgameover = True 

     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_a: 
       x_change = -5 
      elif event.key == pygame.K_d: 
       x_change = 5 
      elif event.key == pygame.K_s: 
       y_change = 5 
      elif event.key == pygame.K_w: 
       y_change = -5 

     if event.type == pygame.KEYUP: 
      if event.key == pygame.K_a or event.key == pygame.K_d: 
       x_change = 0 
      if event.key == pygame.K_s or event.key == pygame.K_w: 
       y_change = 0 

    #adding gravity to y_value 
    y_change += GRAVITY 
    x += x_change 
    y += y_change 

    if y >= gameDisplay.get_height() - 68: 
     y = gameDisplay.get_height() - 68 
     y_change = 0 

    #draw everything 
    gameDisplay.blit(background_image,(0,0)) 
    red(x,y) 

    pygame.display.update() 
    clock.tick(60) 


pygame.quit() 
quit() 

이 문제에 대한 통찰력이 있다면 정말 감사하겠습니다.

+0

우리가 코드의 더 볼 필요가 당신을 돕기 위해. 선은 당신이 y_change + = 중력 X + = x_change Y + = y_change 을 Y 값 중력을 #adding 'OK – mrCarnivore

+0

... 좋은 여기 내 코드의 더 살펴 게시 된 경우 Y> = gameDisplay.get_height() - 68 : gameDisplay.get_height Y =() - (68) = 0 y_change #draw 모든 gameDisplay.blit (background_image, (0,0)) 적 (x, y)를 ' –

+0

정말 더 많은 도움이되지 않습니다 : 당신은 우리에게 당신이받을 지점을 보여주지 않았다. 사용자 입력. 또한 확장 코드를 보려면 질문을 편집하십시오. – mrCarnivore

답변

0

플레이어가 땅에 닿는 경우 True으로 설정하는 변수 on_ground을 정의 할 수 있습니다. 사용자가 점프하려면 ('w'누름) 먼저 if on_ground:을 확인한 다음 y_change을 변경하고 on_groundFalse으로 설정하십시오.

import pygame 


pygame.init() 

gameDisplay = pygame.display.set_mode((800, 600)) 
clock = pygame.time.Clock() 

GRAVITY = .5 

player_img = pygame.Surface((30, 50)) 
player_img.fill((40, 120, 200)) 
x = 100 
y = 500 
x_change = 0 
y_change = 0 
on_ground = False 

diedorgameover = False 
while not diedorgameover: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      diedorgameover = True 
     elif event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_a: 
       x_change = -5 
      elif event.key == pygame.K_d: 
       x_change = 5 
      elif event.key == pygame.K_s: 
       y_change = 5 
      elif event.key == pygame.K_w: 
       # Only jump if the player is on the ground. 
       if on_ground: 
        y_change = -12 
        on_ground = False 
     elif event.type == pygame.KEYUP: 
      if event.key == pygame.K_a or event.key == pygame.K_d: 
       x_change = 0 

    y_change += GRAVITY 
    x += x_change 
    y += y_change 

    # If the player is on the ground. 
    if y >= gameDisplay.get_height() - 68: 
     y = gameDisplay.get_height() - 68 
     y_change = 0 
     on_ground = True 

    gameDisplay.fill((30, 30, 30)) 
    gameDisplay.blit(player_img, (x, y)) 

    pygame.display.update() 
    clock.tick(60) 


pygame.quit() 

또한 공중에서 키를 놓을 경우 동안 다른 플레이어가 중지 할 수 있습니다, 이러한 행을 삭제 :

if event.key == pygame.K_s or event.key == pygame.K_w: 
    y_change = 0 
+0

당신도 더 시원한 것을 안다. ... 나는 공식적으로 15 명의 대표를 둔다. :) –

+0

나는 내가 지금이 개념들을 정말로 잡기 시작하고 있다고 생각한다! –