這是我的碰撞代碼。我做了一個temp_rect,因為在與地面碰撞后,它開始四處傳送。它作業正常,但當我從左/右碰撞瓷磚時,它傳送到頂部
。def collision_test(rect,tiles)。
hit_list=[]
for tile in tiles:
if rect.colliderect(tile):
hit_list.append(tile)
return hit_list
def collision_move(rect,move,tiles)。
collision_types={"Top":False,"Bottom": False,"Left":False,"Right":False}。
rect_temp=pygame.Rect(rect.x,rect.y,atom.width,atom.height-1)
rect_temp.x =movement[0]
hit_list=collision_test(rect_temp,tiles)
for瓦片 in hit_list:
if movement[0]> 0:
rect.right=tile.left
collision_types["Right"]=True。
elif movement[0] <0:
rect.left=tile.right
collision_types["Left"]=True: rect.left=tile.right
rect_temp.y =movement[1]
hit_list=collision_test(rect_temp,tiles)
for瓦片 in hit_list:
if movement[1]> 0:
rect.bottom=tile.top
collision_types["Bottom"]=True。
elif movement[1] <0:
rect.top=tile.bottom
collision_types["Top"]=True。
return rect,collision_types
uj5u.com熱心網友回復:
首先,你沿著x軸測驗碰撞。如果檢測到碰撞,矩形的位置將被糾正。因此,你必須再次設定rect_temp,在沿x軸的碰撞處理之后和y軸的碰撞處理之前:
def collision_move(rect, movement, tiles) 。
collision_types={"Top":False,"Bottom": False,"Left":False,"Right":False}。
rect_temp=pygame.Rect(rect.x,rect.y,atom.width,atom.height-1)
rect_temp.x =movement[0]
hit_list=collision_test(rect_temp,tiles)
for瓦片 in hit_list:
if movement[0]> 0:
rect.right=tile.left
collision_types["Right"]=True。
elif movement[0] <0:
rect.left=tile.right
collision_types["Left"]=True。
rect_temp=pygame.Rect(rect.x,rect.y,atom.width,atom.height-1) # <- this is missing。
rect_temp.y =movement[1]
hit_list=collision_test(rect_temp,tiles)
for瓦片 in hit_list:
if movement[1]> 0:
rect.bottom=tile.top
collision_types["Bottom"]=True。
elif movement[1] <0:
rect.top=tile.bottom
collision_types["Top"]=True。
return rect,collision_types
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/333362.html
標籤:
