2015-01-03 59 views
-1

我想用pygame製作一個python腳本來模擬重力。問題是,我的「球員」一直在底部卡住,甚至沒有彈跳一次。如果有幫助,我使用python 3.4.1。這是我的代碼:Pygame重力劇本

import pygame 

pygame.init() 

disp_w = 800 
disp_h = 600 
disp = pygame.display.set_mode((disp_w,disp_h)) 

pygame.display.set_caption('Gravity') 

player_x = disp_w/2 
player_y = 0 
player = pygame.image.load('images/player.png') 

gravity = 0.1 
speed = 0 

clock = pygame.time.Clock() 

while True: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      quit() 

    player_y += speed 
    speed += gravity 

    if player_y > disp_h: 
     speed = speed * -0.7 

    disp.fill((0,0,0)) 
    disp.blit(player,(player_x,player_y)) 

    pygame.display.flip() 
    clock.tick(120) 
+0

重力似乎工作如你所願。如果您希望「球員」在擊中底部時彈跳,則需要對能量進行保存建模,並且球員處於完全彈性(即通過反彈釋放碰撞能量)和完全塑性(即完全吸收碰撞能量)。 – Simon

+0

@Simon我認爲'speed = speed * -0.7'是一種試圖模擬彈跳的嘗試。 – irrelephant

+0

@irrelephant:啊,是的,你是對的。 – Simon

回答

3

在一幀上,你會落在地板下面,比如1.0單位。你的速度然後達到-0.7。因此,在下一個畫面中,最終以0.3單位落在地面以下,並將你的速度再次翻轉至+0.49。

在接下來的圖片上,您在0.79單位以下的位置再次翻轉標誌,依此類推。你永遠不會出去。

嘗試:

if player_y > disp_h: 
    # stop the player at the floor 
    player_y = disp_h 
    speed = speed * -0.7 
+0

另外,如果玩家打算留在底部以上,那麼考慮到'player_y'是'player_y + player.get_height()> disp_h:player_y = disp_h-player.get_height播放器圖像的頂部。 – Simon