2014-05-21 163 views
0

我目前正在使用python 3.2.3和pygame創建遊戲。我正在製作一款與Mario(側面卷軸)非常相似的遊戲;我的遊戲涉及到一系列「磚塊」,角色需要跳躍並能夠與之相撞。我在Photoshop和麪具中創建了一個顏色編碼級別,以便紅色是角色將死的區域,綠色是磚塊的顏色,藍色是地面的顏色。這裏是我有問題的代碼:遊戲Python碰撞問題

guy[y]+=guy[vy]  # add current speed to Y 

col = mask.get_at((int(guy[x]+662), int(guy[y]+59))) 
if col == (0,0,255,255): 
    guy[y] = 537 
    guy[vy] = 0 
    guy[onground] = True 
if col == (0,255,0,255): 
    guy[vy] = 0 
    guy[onground]=True 
elif col == (255,0,0,255): 
    guy[vy] = 5 
    guy[onground] = False 
if guy[y]+59 >= 720: 
    lives -= 1 
    screen.blit(guyPic,(640,guy[y])) 
guy[vy]+=.75 

當我試圖使在磚上(或綠色),他的土地的性質土地,但他開始下沉。他也可以通過磚塊走路。我希望角色能夠與磚塊發生碰撞,這樣他就不會從磚塊中穿過,但是他能夠在不下沉的情況下跳躍並着陸。我知道另一種可能的方法,就是在每個磚的座標處繪製矩形,但是這種方法效率很低,因爲它會代碼太多。我非常感謝這個錯誤的一些幫助,因爲我試圖在過去兩週內解決它。任何幫助表示讚賞。

回答

1

繪圖反應比較好。這在邏輯上更容易。您可以檢測兩個矩陣是否碰撞,因爲pygame已經支持碰撞檢測。你可以看到:pygame.Rect.colliderect

0

確保你把'guy [vy] + =。75'放在代碼的開頭。儘管碰撞也會影響速度,但在代碼結束時它總是被設置回0.75。因此,當你在地面上時,你仍然會以0.75的速度穿過它。還可以嘗試通過爲'guy [vy] + =。75'添加一個條件語句來限制最大下降速度,所以它只運行'if guy [y] < = 10:' Good Luck :)。

guy[y]+=guy[vy]  # add current speed to Y 
guy[vy]+=.75 
col = mask.get_at((int(guy[x]+662), int(guy[y]+59))) 
if col == (0,0,255,255): 
    guy[y] = 537 
    guy[vy] = 0 
    guy[onground] = True 
if col == (0,255,0,255): 
    guy[vy] = 0 
    guy[onground]=True 
elif col == (255,0,0,255): 
    guy[vy] = 5 
    guy[onground] = False 
if guy[y]+59 >= 720: 
    lives -= 1 
    screen.blit(guyPic,(640,guy[y]))