2017-01-25 9 views
-1

私は実際に長いawnserが必要な基本的な質問があります。誰かが私にレットジャンプをする方法を教えてもらえますか?私は四角形のサンプルが必要です。Gravity with Rects Pygame

+0

これは、Al Sweigartの[書籍](https://inventwithpython.com/makinggames.pdf)に記載されていると思います。 – fenceop

+0

正確なページはありますか? –

+0

'gravity'は常にポジションに追加する値で、バックグラウンドとの衝突のみが落ちるのを止めます。 – furas

答えて

1

私はあなたの質問を参照して、私はあなたのためのいくつかのサンプルコードを作ったと思いますが、まずそれがどのように動作するか教えてください。あなたの位置をY軸に保存するY変数に加えて、velocityYという変数が必要です。あなたは-10を言うと、それはあなたの矩形が空に飛んで行いますので、我々がする必要があることができますしvelocityYを設定してジャンプすると

while True: 
    y += velocityY # <----- Here 
    manage_window() 
    for event in pygame.event.get(): 
      handle_event(event) 
    pygame.display.flip() 

:フレームごとにゲーム内でY変数は、このようなvelocityYで変更されました重力を加える。ここに長い例があります(重要な部分です):

import pygame 

pygame.init() 

window = pygame.display.set_mode((800, 600)) 

x, y = 300, 400 
xVelocity, yVelocity = 0, 0 
rect = pygame.Rect(x, y, 200, 200) 
groundRect = pygame.Rect(0, 500, 800, 100) 

clock = pygame.time.Clock() 

white = 255, 255, 255 
red = 255, 0, 0 
black = 0, 0, 0 
blue = 0, 0, 255 

while True: 
    clock.tick(60) # Make sure the game is running at 60 FPS 
    rect = pygame.Rect(x, y, 200, 200) # Updating our rect to match coordinates 
    groundRect = pygame.Rect(0, 500, 800, 100) # Creating ground rect 

    # HERE IS WHAT YOU CARE ABOUT # 
    yVelocity += 0.2 # Gravity is pulling the rect down 
    x += xVelocity # Here we update our velocity on the X axis 
    y += yVelocity # Here we update our velocity on the Y axis 
    # HERE IS WHAT YOU CARE ABOUT # 

    if groundRect.colliderect(rect): # Check if the rect is colliding with the ground 
     y = groundRect.top-rect.height 
     yVelocity = 0 
    window.fill(white) 
    pygame.draw.rect(window, red, rect) # Here we draw the rect 
    pygame.draw.rect(window, black, rect, 5) # Here we draw the black box around the rect 
    pygame.draw.rect(window, blue, groundRect) # Here we draw the ground 
    pygame.draw.rect(window, black, groundRect, 5) # Here we draw the black box around the rect 
    for event in pygame.event.get(): # Getting events 
     if event.type == pygame.QUIT: # If someone presses X on the window, then we want to quit 
      pygame.quit() 
      quit() 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_SPACE: # Pressing space will make the cube jump 
       if y >= 300: # Checking if cube is on the ground and not in the air 
        yVelocity = -10 # Setting velocity to upwards 
    pygame.display.flip() # Updating the screen 
+0

あなたは 'rect'とgroundRect'を2回作成します。 'while 'の中で2回目を削除することができます。 – furas

+0

私は空の引数がたくさんあることを知り続けます。議論として何を置くべきですか? –

関連する問題