2017-10-23 2 views
1

私はゲームを作ろうとしていますが、あなたがプラットフォームゲームを作ろうとしているときに、本当に悪い高さのためにスパムを "w"(ジャンプ)し続けることができます。これはすべて私のコードです:pygameの無限ジャンプバグを修正するには?

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

をあなたは私たちがあなたのコードの詳細を参照する必要があります助けるために。ここにあなたが良く見える掲示行... – mrCarnivore

+0

OK)は、Y> = gameDisplay.get_height(場合 y_change + = GRAVITY X + = x_change Y + = y_change をy_valueする重力を#adding「私のコードの多くはで - 68: Y = gameDisplay.get_height() - 68 y_change = 0 #drawすべてgameDisplay.blit(background_image、(0,0))本当に 赤(x、y)は ' –

+0

あなたは私たちにあなたが受け取ったポイントを表示していませんでした。ユーザ入力。また、拡張コードを表示するために質問を編集してください。 – mrCarnivore

答えて

0

という変数を定義することができます。この変数は、プレーヤーが地面に接触するとTrueに設定されます。ユーザーがジャンプしたい場合は、まず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

私は今、これらのコンセプトを今に把握し始めていると思います! –

関連する問題