2016-06-27 9 views
0

これは私が作っている最初のパイゲームです。なぜ私のキャラクターはpygame/pythonでジャンプしません

私は基本的な四角形/ブロックで2人の戦闘ゲームを作ろうと計画しています。

私は今、最初のキャラクターへのジャンプを実装しようとしています。私の目ではすべてのロジックが正しいように見えますが、現時点でエラーはありません。しかし、ジャンプするためにwを押すと、何も起こりません!

すべてのお役に立ちました。 (PS私は私のスクリプトには、クラスを持っていないなぜあなたは迷っているならば、私はクラスのまわりで私の頭を取得するように見えることができないと、彼らは私をたくさん混乱:P)のおかげで、ここに私のコードだ:

import pygame 

pygame.init() 

#Sets up 8 bit colours 
white = (255,255,255) 
black = (0,0,0) 
red = (255,0,0) 
green = (0,255,0) 
blue = (0,0,255) 
lightblue = (180,235,255) 
grassgreen =(20,200,50) 

#Sets up pygame window 
gameDisplay = pygame.display.set_mode((1000,600)) 
pygame.display.set_caption('Block Fighter') 

gameExit = False 

#Variables 
x = 50 
y = 480 
x_change = 0 
y_change = 0 

clock = pygame.time.Clock() 

#Main Game Loop 
while not gameExit: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      gameExit = True 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_a: 
       x_change = -5 
      if event.key == pygame.K_d: 
       x_change = 5 
      if 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 y <= 480: 
     onGround = False 
    else: 
     onGround = True 
    if onGround == False: 
     y_change = 5 
    if onGround == True: 
     y_change = 0 


    x += x_change 
    y += y_change 

    gameDisplay.fill(lightblue) 
    pygame.draw.rect(gameDisplay, grassgreen, [1000,600,-1000,-100]) 
    pygame.draw.rect(gameDisplay, black, [x,y,20,20]) 
    pygame.display.update() 

    clock.tick(40) 

pygame.quit() 
quit() 
+1

間違いなく、クラスを理解するための努力をしてください。 Python(あるいは実際にはほとんどの言語)を書くつもりなら、それはとても重要です。また、オブジェクト指向プログラミングがどのように機能するかについての一般的な理解を向上させ、すべてを手助けします。 – Jeff

+0

実際の問題としては、 'y_change = -5'という行の後に' print( "changed") 'をコード内に置くと、wを押すと" changed "が表示されますか? –

+0

@Jake Biggs:Johanがあなたの質問にちょうど答えました。 :D –

答えて

3

を押しますwをジャンプすると、ゲームはy_changeの値を-5に変更します。イベントキューが処理された場合は、このブロックに移行:

if y <= 480: 
     onGround = False 
else: 
    onGround = True 
if onGround == False: 
    y_change = 5 
if onGround == True: 
    y_change = 0 

あなたの物理学は、この時点では、まだシミュレートされていないので、あなたのキャラクターが地面に残っています。つまり、onGroundはまだTrueです。したがって、if onGround == True: y_change = 0コードが実行され、y_changeが再び0に設定されます。

これが起こった後、物理シミュレーションが行われ、y_changeは0になります。これがあなたのキャラクターがジャンプしない理由です。キャラクターが地面にいるかどうかをチェックしているときにキャラクターがジャンプし始めていることをゲームが理解できるように、コードを再設計する必要があります。あなたのゲームで幸運!

関連する問題